Menu
Coddy logo textTech

MOV Speicher zu Register

Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 17 von 45.

Bisher haben Sie Zahlen direkt in Register verschoben (Immediate) und Werte zwischen Registern kopiert. Jetzt werden Sie lernen, wie man Daten aus dem Speicher in ein Register lädt.

Warum das wichtig ist:

Erinnern Sie sich an Kapitel 0: Die CPU kann nicht direkt mit dem Speicher arbeiten. Daten müssen zuerst in Register geladen werden. So machen Sie das.

Syntax:

mov register, [address]

Die Klammern [ ] bedeuten: „Gehe zu dieser Speicheradresse und hole den dort gespeicherten Wert.“

Stellen Sie es sich so vor:

Stellen Sie sich vor, an der Speicheradresse number befindet sich ein Feld. In diesem Feld befindet sich ein Wert, zum Beispiel die Zahl 5. Wenn Sie schreiben:

mov al, [number]    ; Lade den Wert von der Speicheradresse "number" in al

Sie sagen der CPU: „Gehen Sie zu dem Feld namens number, nehmen Sie den darin enthaltenen Wert (in diesem Fall 5) und kopieren Sie ihn in das Register al.“

Nachdem dieser Befehl ausgeführt wurde, ist der Wert 5 nun in al gespeichert. Der ursprüngliche Wert im Feld an der Adresse number bleibt dort — er wird nicht entfernt.

Wichtige Regeln:

RegelErklärung
Die Quelle muss eine Speicheradresse sein[label] oder [address]
Die Klammern sind erforderlichmov al, myNumber lädt die Adresse, nicht den Wert
Die Größe muss übereinstimmenWenn der Speicher ein Byte speichert, verwenden Sie 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]
challenge icon

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 Schülers 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
    syscall
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen