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

执行shr eax,8指令后,如何保留被移出的e0值以供后续使用?

保存SHR指令移出字节的可行方案

原代码执行后,eax的低8位0xe0会被丢弃,要保留这个值,必须在移位操作前将其暂存,以下是几种实用方法:

方法1:用通用寄存器暂存

如果有空闲寄存器(比如bl),直接将低8位复制过去:

mov eax, 0x4012e0         ; eax = 0x4012e0
mov bl, al                ; bl = 0xe0(保存低8位)
shr eax, 8                ; eax = 0x4012

后续可直接使用bl中的0xe0。

方法2:用零扩展保存到32位寄存器

如果需要将低8位作为32位值使用,用movzx指令零扩展存储:

mov eax, 0x4012e0         ; eax = 0x4012e0
movzx ecx, al             ; ecx = 0x000000e0(完整保存低8位)
shr eax, 8                ; eax = 0x4012

方法3:用栈暂存(寄存器不足时)

如果通用寄存器都在占用,可将低16位压入栈,移位后再取出低8位:

mov eax, 0x4012e0         ; eax = 0x4012e0
push ax                   ; 将ax(0x12e0)压入栈
shr eax, 8                ; eax = 0x4012
pop bx                    ; bx = 0x12e0,此时bl = 0xe0

注意:SHR指令右移8位时,低8位会直接丢失,无法通过CPU标志位恢复整个字节,因此必须在移位前完成保存操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:07:47