2014-10-06 96 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 

結束