Frage zu lea in NASM
-
Hallo,
in Nasm unter Linux wird ja mit.data variable1 db 3 .code mov eax, variable1
die Adresse von variable1 geladen.
Was ist denn der Unterschied zwischen lea eax,variable1 und mov eax,variable1? Mit beiden Befehlen wird doch dasselbe Ergebnis erzeugt, oder?
-
In diesem Fall gibt es keinerlei Unterschied. Ob man lieber LEA oder lieber MOV nimmt, ist gehupft wie gesprungen. Der Unterschied beginnt dann, wenn lea die Adresse zur Laufzeit berechnen soll:
Beispiel:
.data variable1 db 1,2,3,4,5,6,7,8,9 .code mov ebx, 3 ; [variable1+ebx] zeigt jetzt auf die vierte Zahl .Schleife: lea edi, [variable1 + ebx] call irgendwas ; irgendwas erwartet in EDI einen Zeiger auf eine Zahl inc ebx cmp byte [edi], 9 jbe .Schleife ; bis 9 (einschleßlich) wiederholen
Die Adresse in EDI verändert sich ständig (abhängig von EBX). Das ist mit MOV nicht mehr ganz so einfach zu lösen.
viele grüße
ralph
-
Danke!