assembler mov variationen?

2 Antworten

Bei ARM Assembler habe ich MOV so erklärt bekommen:

Ein Variante ist das Kopieren von einem Register in ein anderes Register.

Dann besteht noch die Möglichkeit kleine Konstanten (16 bit) bzw. noch kleinere verschobene Konstanten (8 bit) in ein Register zu laden. Da die Konstante klein ist, kann dieser Wert im Befehl drin stehen.

Eine dritte Variante, die dich vermutlich interessiert, ist das Laden von großen Konstanten (32 bit). Auch wenn im Quellcode MOV benutzt wird, wird es am Ende ein LDR. Man kann es mit dem Disassembler sehen.

Die Konstante wird beim Assemblieren in der Nähe des Programms im Speicher abgelegt. Der LDR Befehl nutzt dann den Programm Counter (aktuelle Zeile des Codes im Speicher) und rechnet ein Offset drauf. Das Ergebnis ist dann die Speicheradresse von der Konstanten.

Ich habe es im Bezug auf ein 32bit ARM Entwickler Board ohne Betriebssystem gelernt. Bei 64bit ARM könnten die Größen der Kostanten anders sein.

Bei x86, wo es eine direkte Adressierung gibt, wird es bestimmt anders aussehen.


frank824 
Beitragsersteller
 30.09.2024, 13:29

prima, dass du das weißt , aber hat nichts mit meiner frage zu tun, siehe

tunik123

Die meisten Prozesoren, die ich kenne, haben je nach Adressmode verschiedene Opcodes. Der Assembler sucht dann den passenden aus.

Die VAX-11 als rein mikroprogrammgesteuerte Maschine hatte nur ein Byte (8 Bit) als Opcode, und dann für jeden Operanden ein extra Byte, in dem der Adressmode codiert war. Man konnte also (bis auf wenige Ausnahmen) jeden Befehl mit jedem beliebigen Adressmode verwenden.


frank824 
Beitragsersteller
 30.09.2024, 13:27

prima, hatte ich doch richtig vermuter,