我給了下面的代碼,現在試着理解它。彙編程序中的代碼是做什麼的?
數組poiting到足夠大的內存,在.bss段代碼爲0
1 fib : file format elf 32−i386
2
3 Disassembly of section.text :
4
5 0 x08048080 <start>:
6 0 x08048080 : mov eax , 0x80490d0 <array>
7 0 x08048085 : push eax
8 0 x08048086 : mov eax , 0 x3
9 0 x0804808b : push eax
10 0 x0804808c : call 0 x8048098 <fib>
11 0 x08048091 : pop eax
12 0 x08048092 : pop eax
13 0 x08048093 : jmp 0 x80480c1 <Lend>
14
15 0 x08048098 <fib>:
16 0 x08048098 : mov ebx , [esp+0x8]
17 0 x0804809c : mov ecx , 0 x2
18 0 x080480a1 : xor edx , edx
19 0 x080480a3 : mov [ebx] , edx
20 0 x080480a5 : mov eax , 0x1
21 0 x080480aa : mov [ebx+0x4] , eax
22 0 x080480ad : jmp 0 x080480ba <Lloop_cond>
23
24 0 x080480b2 <Lloop >:
25 0 x080480b2 : push eax
26 0 x080480b3 : add eax , edx
27 0 x080480b5 : mov [ebx+ecx∗4] , eax
28 0 x080480b8 : pop edx
29 0 x080480b9 : inc ecx
30
31 0 x080480ba <Lloop_cond>:
32 0 x080480ba : cmp ecx , [esp+0x4]
33 0 x080480be : jle 0x080480b2 <Lloop>
34 0 x080480c0 : ret
35
36 0 x080480c1 <Lend>:
37 0 x080480c1 : mov ebx , 0 x0 ; Exit code 0 = success
38 0 x080480c6 : mov eax , 0 x1 ; Select System call exit
39 0 x080480cb : int 0 x80 ; System call
40
41 Disassembly of section.bss :
42
43 0 x080490d0 <array>:
44 . . .
它要求或neccessary預先初始化,我可以提供我的想法,但擔心它混淆了更多比它好。 謝謝你的建設性幫助。
我注意到了這個問題詢問被用作[家庭作業(http://www3.informatik.uni-erlangen.de/Lehre/GRa/Klausuren/ klausur-gra-2012-04-13.pdf)在幾年前的德國大學。如果沒有你的想法和你對代碼的理解或者你對某些你不明白的問題的具體問題 - 你現在就會問我們做你的功課。 –
@MichaelPetch它似乎已經從您鏈接的PDF中字面複製。 – fuz
@MichaelPetch如果你非常擅長研究,那麼你也知道德國目前有假期,假期也沒有作業,所以我問,因爲我想知道的不是因爲我需要對下一個作業做好評論。但是無所謂。通常,人們對SO沒有得到有用的評論(甚至沒有談論答案),但是有時候這些評論仍然足以進行逆向工程並理解事情是如何工作的。 – blauerschluessel