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

setcc指令是否会对寄存器进行零扩展?以setnl cl为例

setcc指令是否会对寄存器进行零扩展?

问题说明

setcc指令仅会写入目标寄存器的低字节,比如执行指令setnl cl时,不少开发者会疑惑:对应的32位寄存器ecx或64位寄存器rcx是否会被自动零扩展?

结论

setcc指令不会对寄存器进行零扩展。它仅修改目标寄存器的低8位(例如cl对应ecx的低8位),寄存器的高位部分(32位模式下为高24位,64位模式下为高56位)会保持指令执行前的原有值,不会被清零或修改。

示例

假设在32位模式下,执行setnl cl前ecx的值为0x12345678:

  • 如果条件满足(无小于,即CF=0且ZF=0),cl会被设置为0x01,此时ecx的值变为0x12345601
  • 如果条件不满足,cl会被设置为0x00,此时ecx的值变为0x12345600

可见ecx的高24位0x123456始终保持不变,并未被零扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:03:12