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