gpt4 book ai didi

assembly - 如果为正则设置字节

转载 作者:行者123 更新时间:2023-12-04 02:31:15 26 4
gpt4 key购买 nike

来自 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 指令是 defined to clear the overflow flag ,所以在这种情况下,如果 ZF = 0 且 SF = 0,则 setg 设置其操作数,这恰好是在被测试的值严格为正时。

同样,您可以在 test 之后使用 setle 来设置值是否为非正数,在此上下文中,setgesetl 分别相当于 setnssets

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

As usual, gcc and clang know this trick.

关于assembly - 如果为正则设置字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64082444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com