assembly - MOVSX汇编指令如何工作?

标签 assembly x86 mov

在以下示例中,汇编指令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/

相关文章:

assembly - 我可以在现代系统上的汇编中使用 movl 代替 movb 或 movw 吗?

assembly - RISC-V 汇编语法中的混合目标/源操作数顺序

c++ - 在 .text 部分定义只读数据的原因是什么?

c - 内核开发 : Setting ES:DI in real mode

assembly - 有什么区别——MOV指令

c - 内联汇编 - 无用的中间复制指令

使用来自reflect.Method的通用签名信息生成Java字节码

gcc - Asm 代码说明

x86 - 使用 sse 指令复杂的 Mul 和 Div

ffmpeg - 使用 ffmpeg 将 .flv 转换为 .mov