PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler für ein ++i;


mekakic
2008-07-21, 15:54:31
Hi,

ich habe mir den Assemblercode von einigen Trivial-Programmen angeschaut und mich gewundert, wieso ein ++i 4x MOV und 1x LEA Operationen braucht:
++i;
mov 0xfffffffffffffff0(%rbp),%rax
mov (%rax),%eax
lea 0x1(%rax),%edx
mov 0xfffffffffffffff0(%rbp),%rax
mov %edx,(%rax)
Kenne mich zugegeben nicht sehr gut mit Assembler aus, aber warum lädt man das nicht einfach und macht ein INC(Q) oder ein ADD(Q)?

Coda
2008-07-21, 19:23:00
Ist das Debug- oder Release-Code? Welcher Compiler?

RattuS
2008-07-22, 02:04:17
Ich kenne mich mit 64-Bit Assembly nicht aus, aber für mich sieht das nicht sehr sinnvoll aus. Wozu den BP modifizieren, warum wird RAX für 2 Adresse verwendet? Sieht absolut nicht nach einem Inkrement aus.

mekakic
2008-07-22, 08:59:35
Ist das Debug- oder Release-Code? Welcher Compiler?
Autsch, das war Debug Code :redface: Compiler war GCC 4.1.2 und das macht er beim Release Code; schaut schon besser aus:

movl $0, -4(%rbp)
incl -4(%rbp)
movl $0, %eax

Was er da im Debug Modus macht verstehe ich zwar auch nicht, aber das dann auch nicht sooo schlimm :)