MOV Register zu Speicher
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 18 von 45.
Nachdem du nun weißt, wie man Daten aus dem Speicher in ein Register lädt, lernst du jetzt das Gegenteil: Daten aus einem Register im Speicher speichern.
Syntax:
mov [address], registerDie Klammern [ ] bedeuten: „Speichere den Wert aus dem Register an dieser Speicheradresse.“
Stell es dir so vor:
Stell dir vor, dass sich an der Speicheradresse destination eine leere Box befindet. Du hast einen Wert in einem register (zum Beispiel enthält al die Zahl 7).
Wenn du schreibst:
mov [destination], alweist du die CPU an: „Nimm den Wert aus dem al-register (7) und lege ihn in das Fach namens destination.“
Nachdem diese Anweisung ausgeführt wurde, enthält die Speicheradresse destination nun den Wert 7. Der Wert in al bleibt dort. Er wird nicht entfernt.
Beispiel:
mov al, 7 ; Lege 7 in das al-Register
mov [destination], al ; Speichere den Wert aus al in die 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 zur Größe passt. Mehr über Registergrößen lernst du später.
Wichtige Regeln:
| Regel | Erklärung |
|---|---|
| Die Klammern sind erforderlich | mov destination, al wäre falsch |
| Das Ziel muss eine Speicheradresse sein | Verwende ein Label wie [destination] |
| Die Größe muss übereinstimmen | Verwende für diese Übung al (8 Bit) |
Häufiger Fehler:
; Falsch: fehlende Klammern
mov destination, al
; Richtig: speichert den Wert in den Speicher
mov [destination], alIn der folgenden Herausforderung wurde die Speicheradresse destination bereits für dich erstellt. Du wirst in Kapitel 3 lernen, wie du deine eigenen Daten erstellst. Konzentriere dich vorerst einfach auf die MOV-Anweisung.
Aufgabe
Schreibe zwei Assemblierungszeilen, um Folgendes zu tun:
- Die Zahl 9 in das Register
alschreiben - Den Wert aus
alan der Speicheradressedestinationspeichern
(Die Speicheradresse destination wurde bereits für dich 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 eingebunden
; Es definiert destination UND die MOV-Anweisungen des Studenten
%include "solution.asm"
; Lade den gespeicherten Wert aus dem Speicher in al zum Drucken
mov al, [destination]
; Speichere es
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Übe selbstständig: Assembly-Playground