如果为正,则设置字节



SETcc的页面上,我可以用测试(带符号(数字是否为负数

test %ax, %ax
sets %r10b

如果一个数字为零:

test %ax, %ax
setz %r10b

有没有一个条件来检查某个东西是否是阳性的。我在找一个ZF=0和SF=0的,如果存在的话。建议用什么方法来检查(签名的(数字是否为正数?

我唯一能想到的就是:

cmp %ax, $0
setg %r10b

有没有办法用test做到这一点?

是的,您可以使用

test %ax, %ax
setg %r10b

正如您在链接的页面上看到的那样,setg指令的精确定义是,如果ZF=0且SF=of,即如果零标志清除且符号标志等于溢出标志,它将设置其操作数。test指令被定义为清除溢出标志,因此在这种情况下,如果ZF=0和SF=0,setg将设置其操作数,这正是测试值为正的时候。

同样,您可以在test之后使用setle来设置值是否为非正,在这种情况下,setgesetl分别等效于setnssets

当然,条件跳转指令也是如此。

和往常一样,gcc和clang都知道这个技巧。

最新更新