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

如何在执行SHL EAX, CL指令后检查无符号整数结果是否溢出?

检查SHL EAX, CL后无符号结果是否溢出的简便方法

对于无符号整数的SHL EAX, CL操作,要判断理论结果(EAX × 2^CL)能否容纳在32位EAX寄存器中,有两种简便的检查方式:

  • 直接检查进位标志CF:
    SHL指令执行后,若CF=1,说明移位过程中有高位被移出寄存器,意味着原始值乘以2^CL的结果超出了32位无符号整数的范围,无法完全存放在EAX中;若CF=0,则表示移位无溢出,结果完整保存在EAX里。这和ADD指令用CF判断无符号溢出的逻辑完全一致。

  • 移位前预判溢出:
    可以先用BT EAX, 32 - CL指令,检查EAX中第32 - CL位(从0开始计数)是否为1。如果该位是1,那么执行SHL EAX, CL后必然会有高位溢出;反之则不会。注意需要先处理CL=0的情况——此时移位无操作,自然不存在溢出。

举个实际例子:
若EAX=0x80000000(32位无符号数最大值的一半),CL=1,执行SHL EAX, CL后,CF会被置1,同时EAX变为0x00000000。显然原始值×2的结果是0x100000000,超出了32位无符号EAX的范围,CF=1直接给出了溢出的信号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:27:03