setcc 是否对寄存器进行零扩展? [重复]

问题描述 投票:0回答:1

setcc 指令写入寄存器的低字节。如果我写,例如“setnl cl”,ecx/rcx 会被零扩展吗?

编辑:在下面发表评论后,我发现 setcc 不会对寄存器进行零扩展。

assembly x86-64 nasm
1个回答
-2
投票
0C06:0100 mov ecx,ffffffff
0C06:0106 setnl cl
0C06:0109
-r
EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 ESP=0000FFFE EBP=00000000
ESI=00000000 EDI=00000000 EIP=00000100 EFL=000B0202 NV UP EI PL NZ NA PO NC
DS=0C06 ES=0C06 SS=0C06 CS=0C06 FS=0000 GS=0000
0C06:0100 66B9FFFFFFFF      MOV     ECX,FFFFFFFF
-t
DPMI entry hooked, new entry=05A6:02A4
EAX=00000000 EBX=00000000 ECX=FFFFFFFF EDX=00000000 ESP=0000FFFE EBP=00000000
ESI=00000000 EDI=00000000 EIP=00000106 EFL=00033202 NV UP EI PL NZ NA PO NC
DS=0C06 ES=0C06 SS=0C06 CS=0C06 FS=0000 GS=0000
0C06:0106 0F9DC1            SETGE   CL
-t
EAX=00000000 EBX=00000000 ECX=FFFFFF01 EDX=00000000 ESP=0000FFFE EBP=00000000
ESI=00000000 EDI=00000000 EIP=00000109 EFL=00033202 NV UP EI PL NZ NA PO NC
DS=0C06 ES=0C06 SS=0C06 CS=0C06 FS=0000 GS=0000
0C06:0109 2824              SUB     [SI],AH                          DS:0000=CD

来自英特尔手册:

根据状态标志(CF、SF、OF、ZF 和 PF)的设置,将目标操作数设置为 0 或 1 EFLAGS 寄存器。目标操作数指向字节寄存器或内存中的字节。条件代码后缀 (cc) 表示正在测试的条件。

© www.soinside.com 2019 - 2024. All rights reserved.