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

x86汇编执行mov $0x2023,%ax后寄存器值与预期不符的疑问

x86汇编中mov $0x2023, %ax的执行逻辑及寄存器值异常解析

问题涉及的代码片段

mov $0, %eax
mov $0x2023, %ax
mov $1, %ah

核心问题拆解

你遇到的困惑源于对x86寄存器重叠映射结构的误解,以下是每条指令的实际执行过程:

  1. mov $0, %eax
    将32位寄存器EAX的所有位清零,此时:

    • EAX = 0x00000000
    • AX(EAX的低16位)= 0x0000
    • AH(AX的高8位)= 0x00,AL(AX的低8位)= 0x00
  2. mov $0x2023, %ax
    把16位立即数0x2023写入AX寄存器,这会直接覆盖AX的全部16位,同时因为AX是EAX的低16位,EAX的低16位也会同步更新:

    • AX = 0x2023,其中高8位AH = 0x20,低8位AL = 0x23(0x2023拆分后就是高字节0x20、低字节0x23)
    • EAX此时的值为0x00002023(高16位保持清零状态,低16位被AX更新)
  3. mov $1, %ah
    把立即数1写入AH寄存器(AX的高8位),仅覆盖AH的值,AL不受影响:

    • AH = 0x01,AL仍为0x23,因此AX = 0x0123
    • EAX的低16位随AX更新,最终值为0x00000123(调试器通常会省略前导零,显示为0x123)

你的理解误区

你之前错误地认为AH、AL和AX是独立的寄存器,但实际上它们是重叠的存储区域:修改AX会同时修改AH和AL,修改AH/AL也会改变AX的值,进而影响EAX的低16位。第二条指令执行后,AH和AL已经被0x2023的高低字节覆盖,并非保持初始的0。

内容的提问来源于stack exchange,提问作者Mr. Sir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:15:18