27、x86-64 汇编算术指令详解

x86-64 汇编算术指令详解

1. 扩展指令

1.1 符号扩展与零扩展

在 x86 - 64 架构中,当将 32 位操作数符号扩展到 64 位寄存器时,MASM 要求使用不同的指令助记符,即 movsxd 而非 movsx 。而零扩展可以使用 movzx 指令,只要目标操作数大于源操作数,该指令就能正常工作,支持 8 位到 16 位、32 位或 64 位,以及 16 位到 32 位或 64 位的扩展,但不存在 32 位到 64 位的版本,因为这其实是不必要的。

x86 - 64 CPU 由于历史原因,在执行 32 位操作时会自动将 32 位寄存器零扩展到 64 位。例如,使用 mov eax, eax 可以将 EAX 零扩展到 RAX。

对于某些 8 位寄存器(AL、BL、CL 和 DL)扩展到对应的 16 位寄存器,可通过将互补的 HO 寄存器(AH、BH、CH 或 DH)置为 0 来实现,无需使用 movzx 。要将 AX 零扩展到 DX:AX 或将 EAX 零扩展到 EDX:EAX,只需将 DX 或 EDX 置为 0。不过,由于指令编码的限制,x86 - 64 不允许将 AH、BH、CH 或 DH 寄存器零扩展或符号扩展到任何 64 位寄存器。

1.2 扩展操作步骤总结

  • 32 位到 64 位零扩展 :使用 mov eax, eax (以 EAX 到 RAX 为例)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值