汇编内存操作数澄清

时间:2014-12-30 23:49:10

标签: assembly x86

据我所知,例如[BX]位于括号之间时,它指的是其内存内容。但同时我也不明白。

CMP [BX], 12ADH

在那个例子中,我不明白究竟是什么被比较。

MOV EBX, [BX]

同样的举动,我不知道被移动的内存地址或其内部的值。

1 个答案:

答案 0 :(得分:3)

CMP [BX], 12ADH

这实际上是一条无效指令,因为您还没有指定第一个操作数的大小。假设您打算进行WORD(16位)比较,例如:

CMP WORD [BX], 12ADH

这将首先从BX寄存器中指定的地址处的内存中获取16位WORD。然后,它会将该值与立即值12ADh进行比较。

请注意,CMPSUB的功能相同,但实际上并未修改任何值。它只会假装"进行减法,并相应地设置FLAGS


MOV EBX, [BX]

这将从BX寄存器中指定的地址处的内存中获取32位DWORD。然后,它将该值存储在EBX寄存器中。


在像WORD [BX]这样的表达式中,我们可以说BX"指向"内存中的16位WORD:

         Memory             Register File
           ...
        _________             ________
 100h  |  1234h  |     /---- |  102h  | BX
       |_________|     |     |________|
 102h  |  5678h  | <---/        ...
       |_________|
 104h  |  9ABCh  |
       |_________|
 106h  |  DEF0h  |
       |_________|
           ...