2014-10-06 90 views
-2

我正在学校学习汇编,我想知道我是否理解它。如果我有3个C代码功能编译成汇编代码的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代码?

这是前2行是头,下两个将int a和int b添加到它们的“点”中,cmpl是无符号ua =(无符号)a然后如果ua不大于或等于b,则我们直接跳到.L3。

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

+0

你的同学已经问同样的问题3天前在这里: http://stackoverflow.com/questions/26188068/assembly-language-how-it-works/26191257#26191257 [1]:http://stackoverflow.com/questions/26188068/assembly-language-how-it-works/26191257#26191257 – 2014-10-07 00:52:01

回答

2
pushl %ebp 
movl %esp,%ebp 

这是头

movl 8(%ebp),%edx 
movl 12(%ebp),%eax 

这需要和b代入寄存器

cmpl %eax,%edx 

这是条件

movl %edx,%eax 
.L3: 
movl %ebp,%esp 

,这是的条件的结果

popl %ebp 
ret 

结束