C函数编译成汇编代码

时间:2014-10-06 11:25:00

标签: c assembly

我在学校学习集会,我想知道我是否理解它。如果我有3个C代码函数

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。

或者我认为这一切都错了?

1 个答案:

答案 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

结束