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!


Log in to reply