BOOL32 doStuff() {
return TRUE;
}
gcc 2.95 dla VxWorks 5.x, kompilacja powyższy kod -O0
dla 32-bit x86 generowany po kodzie:GCC generuje niepotrzebne instrukcje?
doStuff:
0e9de190: push %ebp
0e9de191: mov %esp,%ebp
308 return TRUE;
0e9de193: mov $0x1,%eax
0e9de198: jmp 0xe9de1a0 <doStuff+16>
312 {
0e9de19a: lea 0x0(%esi),%esi
// The JMP jumps here
0e9de1a0: mov %ebp,%esp
0e9de1a2: pop %ebp
0e9de1a3: ret
Wszystko wygląda normalnie, aż do instrukcji JMP i Lea. Do czego one służą?
Zgaduję, że jest to pewnego rodzaju wyrównanie, ale nie jestem tego pewien.
bym zrobił coś takiego:
doStuff:
0e9de190: push %ebp
0e9de191: mov %esp,%ebp
308 return TRUE;
0e9de193: mov $0x1,%eax
0e9de1XX: mov %ebp,%esp
0e9de1XX: pop %ebp
0e9de1XX: ret
0e9de1XX: fill with lea 0x0, %esi
Który z zapisanych kodów został ostatecznie przetłumaczony na zespół wygenerowany powyżej? Powinieneś dołączyć te informacje, aby zwiększyć szanse na uzyskanie pomocy. – ray
Czy kompilowano z optymalizacją? Jaka platforma/system operacyjny? – rubenvb
Dodano infos nadzieję, że to pomaga – maxbit89