c - 在c中跳转未签名的指令

标签 c assembly x86

test ecx,ecx
jns 00400000

这段汇编代码等同于这段c代码吗?

int ECX;
if((ECX>>31)==1){..}

如果不是,我怎样才能使它等价?

感谢您的帮助。

最佳答案

基于 test instruction 的维基百科条目,测试将根据寄存器的最高有效位设置标志寄存器的符号标志 ecx .

因此,如果 MSB 则跳转没有像您所看到的那样设置。你的补充C代码几乎是等价的,但取决于是否 >>进行逻辑或算术移位,您应该将其屏蔽以确保安全。

if(((ECX>>31) & 1)==1){..}

当然,正如 Jester 提到的,如果设置了有符号位,那么 ECX < 0 也是正确的,因此在这种情况下这是一个更简单的测试。

关于c - 在c中跳转未签名的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542793/

相关文章:

c - pcap 数据链路 LINUX_SLL

c - 数组声明方括号内的星号在C中是什么意思

assembly - 为什么 "03 c8"和 "01 c1"= add ecx, eax

c++ - 是否可以访问物理地址0?

x86 - SSE/AVX 是否提供确定结果是否四舍五入的方法?

c++ - 用 C 和 C++ 接口(interface)编写库,用哪种方式包装?

c - 我需要找到 2 个字符串中的重复字符

汇编 x86 qemu : fatal: Trying to execute code outside RAM or ROM

assembly - PTX "bit bucket"寄存器

linux - 我的自旋锁有问题吗?