You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86汇编movsbq指令执行后%rax结果与预期不符疑问

结果产生原因

核心问题是你对%dl中存储的0xAA的符号位判断错误,同时忽略了movsbq会覆盖整个目标寄存器的特性:

  • 8位寄存器%dl存储的0xAA,换算为二进制是10101010,8位有符号数的符号位为最高位(第7位),这里值为1,属于有符号数范畴里的负数。
  • movsbq的作用是将8位有符号数符号扩展为64位有符号数,规则就是用源操作数的符号位填充所有高位空位,这里就会用1填充%rax除低8位之外的56位,最终得到0xFFFFFFFFFFFFFFAA。
  • 额外注意:movsbq的目标操作数是64位寄存器%rax,执行时会直接覆盖整个寄存器的所有位,和第3行执行完的%rax旧值没有关联。

如果你想把%dl的值做无符号扩展得到0x00000000000000AA,应该使用零扩展指令movzbq %dl, %rax,该指令会统一用0填充所有高位。

内容的提问来源于stack exchange,提问作者user14596364

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:57:01