MOV Register zu Speicher
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 18 von 45.
Da Sie nun wissen, wie man Daten aus dem Speicher in ein Register lädt, werden Sie nun das Gegenteil lernen: das Speichern von Daten aus einem Register in den Speicher.
Syntax:
mov [address], registerDie Klammern [ ] bedeuten: „speichere den Wert aus dem Register an dieser Speicheradresse.“
Stellen Sie es sich so vor:
Stellen Sie sich vor, an der Speicheradresse destination befindet sich eine leere Box. Sie haben einen Wert in einem Register (zum Beispiel enthält al die Zahl 7).
Wenn Sie schreiben:
mov [destination], alSie sagen der CPU: „Nehmen Sie den Wert aus dem al-Register (7) und legen Sie ihn in das Feld namens destination.“
Nachdem dieser Befehl ausgeführt wurde, enthält die Speicheradresse destination nun den Wert 7. Der Wert in al bleibt dort erhalten — er wird nicht entfernt.
Beispiel:
mov al, 7 ; Schreibe 7 in das al-Register
mov [destination], al ; Speichere den Wert aus al an der Speicheradresse "destination"Hinweis: In dieser Übung sind die Daten im Speicher 1 Byte (8 Bit) groß. Deshalb verwenden wir al — es ist das 8-Bit-Register, das der Größe entspricht. Sie werden später mehr über Registergrößen erfahren.
Wichtige Regeln:
| Regel | Erklärung |
|---|---|
| Die Klammern sind erforderlich | mov destination, al wäre falsch |
| Das Ziel muss eine Speicheradresse sein | Verwenden Sie ein Label wie [destination] |
| Die Größe muss übereinstimmen | Verwenden Sie für diese Übung al (8 Bit) |
Häufiger Fehler:
; Falsch: Fehlende Klammern
mov destination, al
; Richtig: Speichert den Wert im Speicher
mov [destination], alIn der untenstehenden Herausforderung ist die Speicheradresse destination bereits für Sie erstellt. In Kapitel 3 werden Sie lernen, wie Sie Ihre eigenen Daten erstellen. Konzentrieren Sie sich vorerst nur auf den MOV-Befehl.
Aufgabe
Schreiben Sie zwei Zeilen Assembly, um:
- Die Zahl 9 in das
alRegister zu schreiben - Den Wert aus
alan die Speicheradressedestinationzu speichern
(Die Speicheradresse destination wurde bereits für Sie erstellt.)
Probier es selbst
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; solution.asm wird hier eingefügt
; Es definiert destination UND die MOV-Anweisungen des Schülers
%include "solution.asm"
; Lade den gespeicherten Wert aus dem Speicher in al zum Drucken
mov al, [destination]
; Speichere ihn
mov r12, rax
; Drucke "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Drucke den Wert
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Beenden
mov rax, 60
mov rdi, 0
syscallDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 Architektur3Erster Befehl - MOV
Was ist MOV?MOV ImmediateMOV Register zu RegisterMOV Speicher zu RegisterMOV Register zu SpeicherLEA - Adresse ladenMOV mit verschiedenen GrößenÜbung: Register tauschenRückblick: MOV Challenge