Pie*_*ard 3 syntax x86 assembly nasm cpu-registers
我试着理解x86汇编中的括号.在这个例子中,寄存器ax应该包含X,因为括号代表当前的地址LABEL.
mov ax, [LABEL]
LABEL:
db "X", 0
Run Code Online (Sandbox Code Playgroud)
但我不明白以下两条装配线:
mov al, [ebx]
Run Code Online (Sandbox Code Playgroud)
为什么我需要括号?是因为ebx是32位寄存器还是ax16位?区别在于:
mov al, ebx
Run Code Online (Sandbox Code Playgroud)
或者这个,我不明白为什么我需要括号......
mov [edx], ax
Run Code Online (Sandbox Code Playgroud)
括号表示法用于访问寄存器指定的"值".
在:
mov ax, [LABEL]
LABEL:
db "X", 0
Run Code Online (Sandbox Code Playgroud)
您ax使用value指定的设置进行设置LABEL,在这种情况下,您将'X'(0x58 ASCII)复制到ax寄存器中.
LABEL 包含"X"所在的地址.
这不是有效的操作:
mov al, ebx
Run Code Online (Sandbox Code Playgroud)
还有这个:
mov [edx], ax
Run Code Online (Sandbox Code Playgroud)
您正在将值移动ax到"指向的值"的前两个字节edx,因为它ax是一个16位寄存器,edx是一个32位寄存器,用于保存存储器地址.