MOV Speicher zu Register
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 17 von 45.
Bisher hast du Zahlen direkt in Register geladen (unmittelbar) und Werte zwischen Registern kopiert. Jetzt lernst du, wie du Daten aus dem Speicher in ein Register lädst.
Warum das wichtig ist:
Denke an Kapitel 0 zurück: Die CPU kann nicht direkt mit dem Speicher arbeiten. Daten müssen zuerst in Register geladen werden. So machst du es.
Syntax:
mov register, [address]Die eckigen Klammern [ ] bedeuten: „Gehe zu dieser Speicheradresse und hole den dort gespeicherten Wert.“
Stell es dir so vor:
Stell dir vor, an der Speicheradresse number befindet sich eine Box. In dieser Box befindet sich ein Wert, zum Beispiel die Zahl 5. Wenn du schreibst:
mov al, [number] ; Lade den Wert von der Speicheradresse "number" in alDu sagst der CPU: „Gehe zum Fach namens number, nimm den darin enthaltenen Wert (in diesem Fall 5) und kopiere ihn in das al-Register.“
Nachdem diese Anweisung ausgeführt wurde, ist der Wert 5 nun in al gespeichert. Der ursprüngliche Wert im Fach an der Adresse number bleibt dort. Er wird nicht entfernt.
Wichtige Regeln:
| Regel | Erklärung |
|---|---|
| Die Quelle muss eine Speicheradresse sein | [label] oder [address] |
| Die Klammern sind erforderlich | mov al, myNumber lädt die Adresse, nicht den Wert |
| Die Größe muss übereinstimmen | Wenn der Speicher ein Byte speichert, verwende al (nicht rax) |
Häufiger Fehler:
; Falsch: lädt die ADRESSE von myNumber, nicht den Wert
mov al, myNumber
; Richtig: lädt den WERT, der an myNumber gespeichert ist
mov al, [myNumber]Aufgabe
Schreibe eine Zeile Assembly, um den Wert von der Speicheradresse value in das al-Register zu laden.
Probier es selbst
section .data
msg db 'al = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; Der Code des Studenten wird zuerst ausgeführt (lädt den Wert in al)
%include "solution.asm"
; Speichere den Wert aus al
mov r12, rax
; Gib "al = " aus
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Gib den Wert in al aus
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