Assembly 汇编内存操作数
我理解当[BX]在括号中时,它指的是它的内存内容。但同时我也不明白这一点Assembly 汇编内存操作数,assembly,x86,Assembly,X86,我理解当[BX]在括号中时,它指的是它的内存内容。但同时我也不明白这一点 CMP [BX], 12ADH 在那个例子中,我不明白真正被比较的是什么 MOV EBX, [BX] 对于这个移动,我不知道移动的是什么,它的内存地址或者里面的值 CMP [BX], 12ADH 这实际上是一条无效指令,因为您没有指定第一个操作数的大小。假设您打算进行单词(16位)比较,如: CMP WORD [BX], 12ADH 这将首先在BX寄存器中指定的地址从内存中提取一个16位字。然后,它将该值与立即值1
CMP [BX], 12ADH
在那个例子中,我不明白真正被比较的是什么
MOV EBX, [BX]
对于这个移动,我不知道移动的是什么,它的内存地址或者里面的值
CMP [BX], 12ADH
这实际上是一条无效指令,因为您没有指定第一个操作数的大小。假设您打算进行单词(16位)比较,如:
CMP WORD [BX], 12ADH
这将首先在BX寄存器中指定的地址从内存中提取一个16位字。然后,它将该值与立即值12ADh
进行比较
请注意,CMP
执行与SUB
相同的操作,但没有实际修改任何值。它只“假装”进行减法运算,并相应地设置标志
这将在BX寄存器中指定的地址从内存中获取32位DWORD。然后,它将该值存储在EBX寄存器中
在类似于WORD[BX]
的表达式中,我们可以说BX“指向”内存中的16位单词:
Memory Register File
...
_________ ________
100h | 1234h | /---- | 102h | BX
|_________| | |________|
102h | 5678h | <---/ ...
|_________|
104h | 9ABCh |
|_________|
106h | DEF0h |
|_________|
...
内存寄存器文件
...
_________ ________
100h | 1234h |/----102h | BX
|_________| | |________|
102h | 5678h |这两个都像你说的那样使用内存。第一种方法将地址bx
处的单词与12ADh
进行比较,第二种方法从地址bx
获取dword(这种形式不常见,但合法)。如果bx=10,则[bx]指地址10处的内存。如果这是清楚的,什么是不清楚的?哪一个是源,哪一个是目标取决于汇编程序语法(英特尔蚂蚁AT&T,这些是oposite)。在您的例子中,它似乎是Intel,所以第一个操作数是目标。我假设这是16位汇编,对吗?
Memory Register File
...
_________ ________
100h | 1234h | /---- | 102h | BX
|_________| | |________|
102h | 5678h | <---/ ...
|_________|
104h | 9ABCh |
|_________|
106h | DEF0h |
|_________|
...