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/