MOV [1234H], AX
表示将 AX 的值复制到内存中的 1234 十六进制地址。所以,如果我说的是错误的,请纠正我,[] 运算符用作指针,对吗?
话虽如此,我无法理解以下说明:MOV [EBX], AX
为什么使用 [ ]?EBX 是处理器内部的通用寄存器,不是内存单元,所以没有指向它的指针,对吧?
PS我在masm32下编程。
谢谢
此处的寄存器 EBX 保存一个值,即地址。MOV [EBX], AX
表示:取寄存器 AX 中存储的值;将其写入存储在 EBX 中的地址。
我相信您的问题案例中EBX
有一个地址,并且机器进行了存储。
的意思[]
更多的是“看地址...”,所以[1234H]
意思是看地址0x1234,[EBX]
看存储的地址EBX
。就像*
C/C++ 中的运算符一样,如果你熟悉的话。
小心指令,如
MOV [EBX], AX
由于 AX 是一个 16 位寄存器,除非 EBX 持有的地址未对齐,否则它可能会导致显着的性能损失。
括号表示间接级别。
mov bx,ax 表示将 ax 放入 bx 或直接寄存器,直接使用寄存器存储值 mov [bx],ax 表示寄存器间接,将寄存器中的值作为存储值的地方的地址. mov ax,1234h 表示立即数,将 1234h 放入 AX mov [1234h],ax 与上面的 [bx] 有一个间接级别,括号中的内容包含存储结果的位置的地址。
我对我的 x86 语法生疏了,但是如果 x86 有这个,并且你会看到类似 mov [bx+cx],ax 这意味着添加 bx 和 cx 并将其用作将值存储在 ax 中的地址。