当前位置: 代码迷 >> 汇编语言 >> LDS 命令不是很懂啊该怎么处理
  详细解决方案

LDS 命令不是很懂啊该怎么处理

热度:295   发布时间:2016-05-02 04:37:44.0
LDS 命令不是很懂啊
这里不懂,LDS指令完成把SRC所指向的主存单元的内容(偏移量)传送到所表示的通用寄存器中,把SRC+2 所指向的主存单元的内容(段基址)传送到DS段寄存器中;

这句不理解啊   SRC所指向的主存单元的内容,不就是一个平常的数么?为什么是偏移量
这个偏移量是谁的偏移量啊

SRC+2 所指向的主存单元的内容  不就也是个平常的数么?为什么是段基址?  是谁的段基址

我知道 当他们传送完了 就完成数据段寄存器的段基址的重置,因为他们呢被用作了新的  偏移量和段基址 ,这点我明白 但是 括号里的是什么吗意思啊??
------解决方案--------------------
拿16位的 lds bx, [0x1000] 说哈。
如果内存里是这样:
0x1000 34 12
0x1002 78 56
那么这个指令执行完后,DS:BX == 0x5678:0x1234
也就是说,这个指令把src指向的内存里的东西放到DS:dest里。

在内存里,偏移在段基址前面,是因为这是little endian机器……

至于你问的“为什么是偏移/基址?是谁的偏移/基址?”
其实内存里的东西,你可以认为就是个平常的数,你让它是什么都行,lds本身看不明白,指令只是按着定好的规则做动作而已(当然,放的东西不对会出错)。
不是说“是谁的”偏移/基址,而是你让它是谁的他就是谁的………………

不知道你看明白没,我感觉说的不是很明白呃……
------解决方案--------------------
括号里的内容是我们赋予给它的实际意义.  对于机器来说,程序就是数据,数据就是程序,同样的道理,内存单元中存放的数据,我们可以赋予它多种含义,内存单元中可能存放的是要被执行的代码,可能是一个数值,可能是一个字符,它的意义要看用在什么地方,起到什么作用.

LDS 完成的任务是把SRC指向的内存单元的内容传递给指定的通用寄存器,把SRC+2内存单元中的内容传递给DS寄存器.

内存单元中存放的就是一个数值而已,为什么要称为 段基址跟偏移量呢? 其实非常容易理解,我们在访问内存单元时,总是要通过 段地址*16+偏移量 的方法来对内存单元进行访问. 要么指定段前缀,要么使用默认的段寄存器.
DS是常用的数据段 段寄存器,具体到 LDS 指令,用内存中的数据重新设置DS以后,DS的内容发生了变化,既然DS表示了数据段的段值,那么它的值变化了,也就是 段基址发生了变化,因此段基址 是我们在使用LDS指令时,对SRC指向的内存单元中的数据赋予的实际意义.
  相关解决方案