Alle normalen "Rechen"-Befehle wie Addieren, Multiplizieren, Exklusivieren oder Setzen der Statusflags wie Null, Vorzeichen. Wenn Sie eine komplizierte Adresse verwenden, AX xor:= mem[0x333 +BX + 8*CX]
Die Flaggen werden entsprechend der xor-Operation gesetzt.
Nun möchten Sie die Adresse vielleicht mehrfach verwenden. Das Laden einer solchen Adresse in ein Register ist nie dazu gedacht, Statusflags zu setzen und tut es zum Glück auch nicht. Die Formulierung "effektive Adresse laden" macht den Programmierer darauf aufmerksam. Daher rührt auch der seltsame Ausdruck.
Es ist klar, dass der Prozessor, sobald er in der Lage ist, die komplizierte Adresse zu verwenden, um ihren Inhalt zu verarbeiten, auch in der Lage ist, sie für andere Zwecke zu berechnen. Sie kann nämlich zur Durchführung einer Transformation verwendet werden x <- 3*x+1
in einer einzigen Anweisung. Dies ist eine allgemeine Regel in der Assembler-Programmierung: Verwenden Sie die Anweisungen, wie es Ihnen gefällt. Das Einzige, was zählt, ist die Frage, ob die in der Anweisung verkörperte Transformation für Sie nützlich ist.
Unterm Strich
MOV, X| T| AX'| R| BX|
y
LEA, AX'| [BX]
haben die gleiche Wirkung auf AX aber nicht bei den Statuskennzeichen. (Dies ist ciasdis Notation).
8 Stimmen
Siehe auch LEA auf Werte anwenden, die keine Adressen/Zeiger sind? : LEA ist nur ein Shift-and-Add-Befehl. Er wurde wahrscheinlich zum 8086 hinzugefügt, weil die Hardware bereits vorhanden ist, um Adressierungsmodi zu dekodieren und zu berechnen, nicht weil er nur für die Verwendung mit Adressen "gedacht" ist. Denken Sie daran, dass Zeiger in Assembler nur ganze Zahlen sind.