assembler mov variationen?
mov kann bezüglich quelle eine direkten Datenadresse oder ein registerer indirekte Adresse auch ein konstanter Wert sein, es müssen doch im opcodebereich bits existieren, die dafür sorgen, dass innerhalb des microprogramm, nennen wir es mov, in den abschnitt für quelloperand ist ram adresse oder konstante springen, bitte mit eigenen worten erklären und keine verweise angeben, wo ich infos erhalte,
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.
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.