2009-11-15 40 views
1

MOV [1234H], AX表示将AX的值复制到内存中的1234十六进制地址。 所以,请纠正我,如果我说的是错误的,[]运算符作为指针,对吗?MOV [EBX],AX - 指向寄存器的指针?

这就是说,我无法理解下面的说明:MOV [EBX], AX为什么使用[]? EBX是处理器内部的通用寄存器,而不是存储单元,所以没有指向它的指针,对吧?

P.S.我在masm32下编程。

感谢

回答

5

寄存器EBX在这里保存一个值,这是一个地址。 MOV [EBX], AX表示:取寄存器AX中存储的值;将其写入存储在EBX中的地址。

4

我相信,在你的问题的情况下EBX拥有一个地址,机器做的商店。

4

[]的含义即是多“看地址......”,所以[1234H]意味着看地址为0x1234,并[EBX]看看存储在EBX地址。像C/C++中的*运算符一样,如果您熟悉这一点。

2

小心说明像

MOV [EBX], AX 

由于AX是一个16位寄存器,它可能会产生显著的性能损失,除非是EBX保存地址,不对齐。

0

括号表示间接的级别。
mov bx,ax表示将ax放入bx或直接寄存器,直接使用寄存器存储值 mov [bx],ax表示寄存器间接,取寄存器中的值并将其用作地址存储值。 mov ax,1234h表示立即数,在AX中放入1234h mov [1234h],ax与上述[bx]具有相同的间接级别,括号内的内容包含存储结果的地址。

我在我的x86语法上生锈了,但是如果x86有这个,你会看到类似于 mov [bx + cx]的ax,那就意味着添加bx和cx并使用它作为地址来存储值斧头。

+0

为了消除x86语法,16位CX寄存器不能用作地址寄存器。有效的16位地址寄存器是:bx,si,di,bp,sp。只有所有的32位寄存器都可以用作地址寄存器。 – 2014-04-09 08:15:31