Nicht sicher, warum wir fügen die Register %rdx und %rax, wenn der Assembler-code wurde mit %eax und %edx
Hallo ich brauche etwas Hilfe, das Verständnis, was Los ist in dieser assembly-code:
.file "mystery.c"
.text
.globl mystery
.type mystery, @function
mystery:
pushq %rbp
movq %rsp, %rbp
movl %edi, -20(%rbp)
movl $1, -16(%rbp)
movl $0, -12(%rbp)
movl $0, -8(%rbp)
cmpl $2, -20(%rbp)
jg .L2
movl $1, %eax
jmp .L3
.L2:
movl $2, -4(%rbp)
jmp .L4
.L5:
movl -12(%rbp), %eax
movl -16(%rbp), %edx
leal (%rdx,%rax), %eax
movl %eax, -8(%rbp)
movl -16(%rbp), %eax
movl %eax, -12(%rbp)
movl -8(%rbp), %eax
movl %eax, -16(%rbp)
addl $1, -4(%rbp)
.L4:
movl -4(%rbp), %eax
cmpl -20(%rbp), %eax
jle .L5
movl -8(%rbp), %eax
.L3:
leave
ret
Ich verstehe genau, was Los ist, BIS ich die bekommen .L5, Hier der Befehl leal(%rdx, %rax)
, eax ist was ist verwirrend mich. Bis jetzt habe ich bewegliche Werte zu eax und edx und jetzt im die addition der Werte in rdx und rax. Wo ist rdx und rax aus und welche Werte werden Sie halten? Sind Sie nur eine andere Art des Schreibens eax und edx? Vielen Dank für jede Hilfe.
Montage Frage sollte markiert sein, mit der architeture. [x86]? Etwas anderes?
InformationsquelleAutor Rizwan Chaudry | 2012-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen diese im Zusammenhang beantworten. Es erklärt die verschiedenen Register und deren Entwicklung. In diesem Fall, die
%rax
- register ist eine 64-bit-register.%eax
ist die 32-bit-und%ax
16 bits.%ah
bezieht sich auf den hohen 8 bits der 16 bits in dem register, und%al
bezieht sich auf das untere Ende.Diese kleine Grafik genommen wurde, eine andere Antwort auf die gleiche Frage, aber es zeigt, dass es auch...
InformationsquelleAutor CoffeeRain
Diese sind "eigentlich nur" andere Wege, zu beschreiben, zu registrieren. Je nach "Vorzeichen", Sie sind entweder 64, 32, 16 oder 8 bit:
rax
- 64 biteax
- 32-bitax
- 16 bitsah
- oberen 8 bits vonax
al
- unteren 8 bits vonax
InformationsquelleAutor Linus Kleen
Da im 64bit-Modus
lea
mit einem 64-bit - "Adresse" und einen 32-bit-Ziel ist die kürzeste Codierung.Dass es eine 32bit-Adresse hat keinen Einfluss auf das Ergebnis, aber Kosten ein byte.
Aber warum nicht eine einfache
mov eax, edx
?nun, es fügt Sie hinzu, könnte es schon ein
addl %edx, %eax
(akaadd eax, edx
) obwohl.ja, ich weiß, aber warum sollte ein lea verwendet werden, eher als ein mov? Wird es schneller/kürzer
es gibt, soweit ich weiß, keinen Grund, um jemals eine
lea
wenn einmov
benutzt worden sein könnte, statt. Es ist nicht kürzer, undlea
hat etwas niedrigeren Durchsatz alsmov
auf viele µarchs.InformationsquelleAutor harold