我以为我理解 x86 汇编中的括号。在这个例子中,寄存器ax
应该包含X
,因为括号代表LABEL
的当前地址。
mov ax, [LABEL]
LABEL:
db "X", 0
但我不明白以下两条 assembly 线:
mov al, [ebx]
为什么需要括号?是因为 ebx 是 32 位寄存器而 ax 是 16 位吗?有什么区别:
mov al, ebx
或者这个,我不明白为什么我需要括号......
mov [edx], ax
最佳答案
方括号表示法用于让您访问寄存器或标签“指向的值”。
mov ax, [LABEL]
LABEL:
db "X", 0
您正在使用LABEL
标记的内存中的值加载ax
。在本例中,您将“X”(0x58 ASCII)复制到 ax
寄存器中,同时将 0
复制到 ax
的高字节中>。因此,ax = 0x0058
,以及 ah = 0
、al = 0x58
。
LABEL
附加到“X”所在的地址。
这不是一个有效的操作:
mov al, ebx
还有这个:
mov [edx], ax
您正在将 ax
的值移动到“edx
指向的值”的前两个字节中,因为 ax
是一个16 位寄存器和 edx 只是保存应写入的内存地址。
关于assembly - Intel x86 汇编语法中寄存器上的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156933/