BOOL32 doStuff() {
return TRUE;
}
gcc 2.95 für VxWorks 5.x, den obigen Code mit -O0
für 32-Bit-x86-Kompilierung folgenden Code erzeugt:GCC generiert nutzlose Anweisungen?
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
Alles sieht bis zum JMP und LEA Anweisung normal. Wofür sind sie?
Meine Vermutung ist, dass es eine Art von Ausrichtung ist, aber ich bin mir nicht sicher darüber.
Ich würde so etwas getan haben:
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
Welchen Code haben Sie geschrieben, der schließlich in die oben erzeugte Assembly übersetzt wurde? Sie sollten diese Informationen einbeziehen, um die Chancen auf Hilfe zu erhöhen. – ray
Haben Sie mit Optimierungen kompiliert? Welche Plattform/Betriebssystem? – rubenvb
Infos hinzugefügt, hoffe, dass das hilft – maxbit89