int fun1(int a, int b)
{
unsigned ua = (unsigned) a;
if (ua < b)
return b;
else
return ua;
}
int fun2(int a, int b)
{
if (b < a)
return b;
else
return a;
}
int fun3(int a, int b)
{
if (a < b)
return a;
else
return b;
}
然后我有汇编代码
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%edx
movl 12(%ebp),%eax
cmpl %eax,%edx
jge .L3
movl %edx,%eax
.L3:
movl %ebp,%esp
popl %ebp
ret
我是否理解fun1是汇编代码的正确C代码?
这是前两行是头,接下来两个将int和int b添加到它们的“spot”中,cmpl是无符号的ua =(无符号)a然后如果ua不大于或等于b那么我们跳直接到.L3。
或者我认为这一切都错了?
答案 0 :(得分:2)
pushl %ebp
movl %esp,%ebp
这是头脑
movl 8(%ebp),%edx
movl 12(%ebp),%eax
这将a和b带入寄存器
cmpl %eax,%edx
这是条件
movl %edx,%eax
.L3:
movl %ebp,%esp
这是条件
的结果popl %ebp
ret
结束