Im Allgemeinen disp(base,index,scale)
gibt Adresse:
base + scale * index + disp
daher Adresse (%edx, %edx, 4)
wird interpretiert als
disp := 0
base := %edx
index := %edx
disp := 4
In zusammen, es gibt:
%edx + %edx * 4 + 0
die %edx * 5
gibt.
Jetzt wird leal
für die Adresszuweisung verwendet. Es weist die obige Adresse %eax
zu, daher erhalten Sie %eax := %edx * 5
.
Dieser allgemein gesehen wird, da der Skalierungsfaktor scale
nur 1 sein kann, 2, 4, 8, daher gibt es keine Möglichkeit% EDX von 5 direkt zu multiplizieren. Ähnlich, wenn wir %eax = %edx * 3
bekommen wollen, müssen wir leal (%edx, %edx, 2), %eax
tun.
Die Frage, die Sie bereits verknüpft haben, erklärt es. Es ist nur 'edx + edx * 4', das ist natürlich 'edx * 5' (du weißt,' 1 + 4 = 5') – Jester
@Jester kannst du Schritt für Schritt erklären, wie 'edx + edx * 4' zu' edx wird * 5 (wie aus 4 wird 5)? – andrew01239
Das ist Mathe der Grundschule ... wenn du 1 Apfel und 4 weitere Äpfel bekommst, bekommst du 5 Äpfel ... was ist unklar? – Jester