据我所知,例如[BX]位于括号之间时,它指的是其内存内容。但同时我也不明白。
CMP [BX], 12ADH
在那个例子中,我不明白究竟是什么被比较。
MOV EBX, [BX]
同样的举动,我不知道被移动的内存地址或其内部的值。
答案 0 :(得分:3)
CMP [BX], 12ADH
这实际上是一条无效指令,因为您还没有指定第一个操作数的大小。假设您打算进行WORD(16位)比较,例如:
CMP WORD [BX], 12ADH
这将首先从BX寄存器中指定的地址处的内存中获取16位WORD。然后,它会将该值与立即值12ADh
进行比较。
请注意,CMP
与SUB
的功能相同,但实际上并未修改任何值。它只会假装"进行减法,并相应地设置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 |
|_________|
...