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

汇编语言中如何访问eax寄存器的第2、3字节?

如何访问EAX寄存器中的第2、3字节?

EAX是x86架构下的32位通用寄存器,其字节布局(从最低位到最高位)如下:

  • 字节0(位0-7):可通过al直接访问
  • 字节1(位8-15):可通过ah直接访问
  • 字节2(位16-23):无专用寄存器名
  • 字节3(位24-31):无专用寄存器名

x86架构没有提供像ah/al那样的专用寄存器来直接访问EAX的第2、3字节,你可以通过以下几种方式实现:

方法1:移位+位掩码指令

通过移位将目标字节移动到寄存器的低8位,再用掩码保留有效位:

  • 获取字节2:
mov ecx, eax       ; 复制EAX的值到ECX
shr ecx, 16        ; 右移16位,将字节2移至低8位
and ecx, 0xFF      ; 用掩码清除高24位,ECX低8位即为EAX的字节2
  • 获取字节3:
mov ecx, eax       ; 复制EAX的值到ECX
shr ecx, 24        ; 右移24位,将字节3移至低8位
; 右移后高24位自动填充0,ECX低8位即为EAX的字节3(无需额外掩码)

方法2:内存中转访问

先将EAX的值写入内存,再按字节偏移读取目标字节:

栈内存示例

push eax           ; 将EAX压入栈,栈顶依次为字节0、1、2、3
mov cl, [esp+2]    ; 读取栈偏移2的位置,对应EAX的字节2
mov ch, [esp+3]    ; 读取栈偏移3的位置,对应EAX的字节3
pop eax            ; 恢复栈状态

全局变量示例

.data
eax_storage db 4 dup(0)  ; 定义4字节的内存缓冲区
.code
mov dword ptr [eax_storage], eax  ; 将EAX的值写入缓冲区
mov cl, [eax_storage+2]           ; 读取缓冲区偏移2的字节(EAX的字节2)
mov ch, [eax_storage+3]           ; 读取缓冲区偏移3的字节(EAX的字节3)

方法3:同时获取高16位(字节2+3)

如果需要同时获取字节2和3(即EAX的高16位),可以通过移位将高16位转移到16位寄存器,再拆分访问:

mov cx, eax
shr cx, 16                ; CX现在存储EAX的高16位(字节2+3)
; 之后可通过ch访问字节3,cl访问字节2

内容的提问来源于stack exchange,提问作者Marlon Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:07:36