SETcc

在条件上设置字节

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
0F 97SETA r/m8M有效有效上方设置字节( CF=0, ZF=0) 。
0F 93SETAE r/m8M有效有效如果高于或等于(CF=0),则设置字节。
0F 92SETB r/m8M有效有效如果下面设置字节( CF=1) 。
0F 96SETBE r/m8M有效有效如果低于或等于(CF=1或ZF=1),则设置字节。
0F 92SETC r/m8M有效有效携带时设置字节( CF=1).
0F 94SETE r/m8M有效有效如果等于( ZF=1) 则设置字节 。
0F 9FSETG r/m8M有效有效如果更大, 设置字节( ZF = 0, SF = OF) 。
0F 9DSETGE r/m8M有效有效如果大于或等于(SF=OF),则设置字节。
0F 9CSETL r/m8M有效有效如果少则设置字节( SF OF) 。
0F 9ESETLE r/m8M有效有效如果小于或等于(ZF=1或SF OF),则设置字节。
0F 96SETNA r/m8M有效有效如果不是以上(CF=1或ZF=1)则设置字节.
0F 92SETNAE r/m8M有效有效如果不是以上或相等,则设置字节(CF=1).
0F 93SETNB r/m8M有效有效如果不低于(CF=0),则设置字节。
0F 97SETNBE r/m8M有效有效如果不低于或等于(CF=0和ZF=0),则设置字节。
0F 93SETNC r/m8M有效有效如果不携带则设置字节(CF=0).
0F 95SETNE r/m8M有效有效设置非相等的字节( ZF=0) 。
0F 9ESETNG r/m8M有效有效设置字节( ZF=1 或 SF OF)
0F 9CSETNGE r/m8M有效有效设置字节( 如果不是较大或相等) 。
0F 9DSETNL r/m8M有效有效设置字节( SF = OF) 。
0F 9FSETNLE r/m8M有效有效设置字节( ZF=0, SF=OF) 。
0F 91SETNO r/m8M有效有效设置未溢出字节( OF=0) 。
0F 9BSETNP r/m8M有效有效如果不是对等, 则设置字节( PF=0) 。
0F 99SETNS r/m8M有效有效设置未签名的字节( SF=0) 。
0F 95SETNZ r/m8M有效有效设置字节, 如果不是零( ZF=0) 。
0F 90SETO r/m8M有效有效如果溢出则设置字节( OF=1)
0F 9ASETP r/m8M有效有效如果对等, 设置字节( PF = 1) 。
0F 9ASETPE r/m8M有效有效设置偶数的字节( PF=1) 。
0F 9BSETPO r/m8M有效有效如果偶数( PF=0) , 设置字节
0F 98SETS r/m8M有效有效设置符号的字节( SF=1) 。
0F 94SETZ r/m8M有效有效如果为零则设置字节( ZF=1) 。

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

M

  1. modrm.rm escrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

实测开销

正在从 arch-data 加载实测数据...

说明

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

术语"以上"和"以下"与CF旗相关,指两个无符号整数值之间的关系. "大"和"小"这两个术语与SF和OF旗有关,并指两个签名的整数值之间的关系.

许多SETcc指令操作码都有交替的mnemonics. 例如,SETG(如果较大则设置位元)和SETNLE(如果不小或相等则设置位元)具有相同的操作码,且测试条件相同: ZF 等于 0,SF 等于 OF. 提供了这些备选的演示词,以使代码更加易懂。 附录B"EFLAGS条件代码",在Intel(R)64和IA-32架构软件开发者手册第1卷中显示了各种测试条件的交替模式.

一些语言代表一个逻辑的,作为所有位集的整数. 这种表示可以通过选择SETcc指令的逻辑相反条件来获得,然后降低结果. 例如,为了测试溢出,使用SETNO指令,然后降低结果.

ModR/M字节的reg字段不用于SETCC指令,那些操作码比特被处理器忽略.

在IA-64模式中,操作数大小固定在8位. 使用 REX 前缀可以实现对额外字节注册符的统一地址. 否则,此指令的操作与遗留模式和兼容模式相同.

行动

IF condition
    THEN DEST := 1;
    ELSE DEST := 0;

FI;

受影响的旗帜

None.

异常

保护模式
#GP(0)如果目的地位于不可写入的区段中。如果内存操作数的有效地址位于CS、DS、ES、FS或GS区段限制之外。如果DS、ES、FS或GS登记簿包含NULL 段选择子。
#SS(0)如果 内存操作数 有效地址在 SS 段限制之外. #PF(fault-code) 如果 页面错误 发生.
#UD如果使用 LOCK 前缀 。
实地址模式
#GP如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS如果 内存操作数 的有效地址在 SS 段限制之外。
#UD如果使用 LOCK 前缀 。
虚拟 8086 模式
#GP(0)如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS(0)如果 内存操作数 的有效地址在 SS 段限制之外。
#PF(fault-code)如果发生 页面错误 。
#UD如果使用 LOCK 前缀 。
兼容模式
与保护模式中的例外相同.
64 位模式
#SS(0)如果引用SS部分的内存地址是非冠状的.
#GP(0)如果内存地址是非冠状的. #PF(fault-code) 如果发生 页面错误.
#UD如果使用 LOCK 前缀 。

来源