Citat:
10:43:52 @ ~/tmp > gcc -c -g -o aproba aproba.c
10:44:05 @ ~/tmp > gdb aproba
...
(gdb) list main
1 int main() {
2 return 0;
3 }
(gdb) disass aproba
No symbol "aproba" in current context.
(gdb) disass main
Dump of assembler code for function main:
0x0 <main>: push %ebp
0x1 <main+1>: mov %esp,%ebp
0x3 <main+3>: xor %eax,%eax
0x5 <main+5>: jmp 0x7 <main+7>
0x7 <main+7>: leave
0x8 <main+8>: ret
NOP-a nema na dvoprocesorskoj PIII mašini (isto je i bez ,,-c'', odnosno kada se i linkuje).
A zašto se ubacuje (odnosno koristi) JMP instrukcija, mislim da objašnjava sledeće:
Citat:
(gdb) list main
1 int main() {
2 if (1==0)
3 return 0;
4 else return 1;
5 }
(gdb) disass main
Dump of assembler code for function main:
0x0 <main>: push %ebp
0x1 <main+1>: mov %esp,%ebp
0x3 <main+3>: jmp 0x10 <main+16>
0x5 <main+5>: xor %eax,%eax
0x7 <main+7>: jmp 0x17 <main+23>
0x9 <main+9>: jmp 0x17 <main+23>
0xb <main+11>: nop
0xc <main+12>: lea 0x0(%esi,1),%esi
0x10 <main+16>: mov $0x1,%eax
0x15 <main+21>: jmp 0x17 <main+23>
0x17 <main+23>: leave
0x18 <main+24>: ret
Znači, JMP se koristi da se obezbedi ,,Jedna Tačka Izlaska'' (znači da nemamo 100 leave/ret-ova po funkciji). To izgleda sasvim logično kada imamo sve više grananja, a ove jednostavne probleme i optimizacija rešava u prvom stupnju (optimizovan, ovaj je iste veličine kao i prethodni, samo vraća 1 umesto 0).
Znači, čini mi se da se radi o najopštijem slučaju (a optimizacija je zadužena za ostalo).
Naravno, ovo je samo moja procena, a šta se zapravo dešava ne znam. Znam da stariji GCC (2.8) očekuje od asemblera da ubaci NOP ,,zbog grananja'' (citat sa
http://www.cag.lcs.mit.edu/raw/memo/10/rgcc.html, nije verodostojan).
A osim vaših objašnjenja (o dopunjavanju radi istovremenog izvršavanja većeg broja instrukcija), i ovog gore nepouzdanog citata, nemam druge ideje.
Pozdrav
PS. Upotreba ,,gcc -S'' (asembler izlaz) navodi na misao da se neka poravnjavanja ipak odigravaju (align...). Ko bolje zna od mene, više će mu i kod reći.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.