pol*_*sop 2 c x86 assembly if-statement
int get_cont(int *p1, int *p2)
{
if (p1 > p2)
return *p2;
else
return *p1;
}
Run Code Online (Sandbox Code Playgroud)
汇编代码为:
movl 8(%ebp), %eax
cmpl 12(%ebp), %eax
jbe .L2
movl 12(%ebp), %eax
movl (%eax), %eax
jmp .L3
Run Code Online (Sandbox Code Playgroud)
为什么使用jbe?条件是p1 > p2. 为什么不使用ja?
ja和jbe都是无符号跳转操作码。为什么编译器反转条件?
在您的示例中,如果测试在跳转后立即成功,编译器会生成要执行的代码,因此如果测试失败则必须进行跳转,即:如果测试低于或等于 ( ) 则jbe跳转p1 > p2。
但请注意,编译器可能会生成任何适当的代码,并且操作数可能会以不同的顺序出现在汇编指令中,从而导致不正确的解释。