我想了解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:
......
最佳答案
您正确理解cmp和je/jg是如何工作的,但是您的C代码中有一个错误。这一行:
if (*x == 1)
应该是
if (x == 1)
Here是x86控制流指令的一个很好的摘要。
同样,没有理由对相同的值重复cmp指令一旦您执行了它,就可以通过多种方式测试结果,而无需重复比较。所以程序集代码应该如下所示:
cmp $0x3,%eax
je A
jg B
cmp $0x1,%eax
je C
关于c - cmp je/jg它们在组装中的工作方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12665289/