在以下示例中,汇编指令MOVSX
如何工作:
MOVSX ECX,BYTE PTR DS:[EDX]
在这种情况下,以下是寄存器的状态:
ECX = 0000000F
EDX = 0012FD9F
根据我的想法,它需要[EDX] = 9F的最后一个字节,将其移至ECX,然后对其进行符号扩展以匹配16位= 0000009F。但是,实际结果是00000016。有人可以帮忙解释我错了吗?
最佳答案
这是部分正确的。然而:BYTE PTR DS:[EDX]
获取位于EDX中保存的地址处的字节。该字节被复制到ECX
到最低有效字节,其余字节用该字节的符号填充。
对于意想不到的结果,这意味着在内存地址1 0x12FD9F
中位于字节0x16
。
笔记:
段覆盖前缀DS:
在这里不是必需的。 [EDX]
自动引用DS
。
1“内存地址”在这里是指虚拟或物理内存
关于assembly - MOVSX汇编指令如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268906/