Fra*_*nXh 1 c x86 assembly cmp conditional-statements
我想了解cmp和je/jg如何在汇编中工作.我在谷歌上看到了一些例子,但我仍然有点困惑.下面我展示了我试图转换为C语言和相应C代码的汇编代码的一部分.它是以正确的方式实现还是我对cmp如何工作有错误的理解?
cmp $0x3,%eax
je A
cmp $0x3,%eax
jg B
cmp $0x1,%eax
je C
int func(int x){
if(x == 3)
goto A;
if (x >3)
goto B;
if(x == 1)
goto C;
A:
......
B:
......
C:
......
Run Code Online (Sandbox Code Playgroud)
您正确理解cmp和je/jg是如何工作的,但您的C代码中有错误.这一行:
if (*x == 1)
Run Code Online (Sandbox Code Playgroud)
应该
if (x == 1)
Run Code Online (Sandbox Code Playgroud)
这是x86控制流指令的一个非常好的总结.
此外,没有理由为相同的值重复cmp指令.执行完毕后,您可以多种方式测试结果,而无需重复比较.所以你的汇编代码应如下所示:
cmp $0x3,%eax
je A
jg B
cmp $0x1,%eax
je C
Run Code Online (Sandbox Code Playgroud)