了解 WORD PTR
Understanding WORD PTR
我想了解一些 16 位源代码。
我有。
unsigned short addr, d;
addr = &d;
8D46FA // LEA AX,WORD PTR [d]
8946FC // MOV WORD PTR [addr],AX
地址变为0x159A
为什么 addr = 0x159A 而不是 0xFA46?
这个问题搁置了,但是答案已经给出,我已经接受了。我不是在问寄存器是如何工作的,(这似乎人们认为我是,我的问题很简单明了,为什么它编译上面的 ASM,而不是我可能期望的那样。)
反汇编有点混乱。这些地址实际上是相对于 BP
的,这对于局部变量来说是正常的。 lea
在 16 位寻址 means BP+sbyte
.[=16= 中有一个 mod R/M 字节和一个 mod R/M 字节的 46
]
lea
的重点是它使用内存操作数编码,所以它肯定需要mod R/M。
我想了解一些 16 位源代码。
我有。
unsigned short addr, d;
addr = &d;
8D46FA // LEA AX,WORD PTR [d]
8946FC // MOV WORD PTR [addr],AX
地址变为0x159A
为什么 addr = 0x159A 而不是 0xFA46?
这个问题搁置了,但是答案已经给出,我已经接受了。我不是在问寄存器是如何工作的,(这似乎人们认为我是,我的问题很简单明了,为什么它编译上面的 ASM,而不是我可能期望的那样。)
反汇编有点混乱。这些地址实际上是相对于 BP
的,这对于局部变量来说是正常的。 lea
在 16 位寻址 means BP+sbyte
.[=16= 中有一个 mod R/M 字节和一个 mod R/M 字节的 46
]
lea
的重点是它使用内存操作数编码,所以它肯定需要mod R/M。