MOV Register zu Register
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 16 von 45.
Da Sie nun wissen, wie man eine Zahl direkt in ein Register schreibt (MOV immediate), können Sie auch Werte zwischen Registern kopieren.
Syntax:
mov destination_register, source_registerDer Wert aus dem Quellregister wird in das Zielregister kopiert. Das Quellregister bleibt unverändert.
Beispiel:
mov rax, 5 ; rax = 5
mov rbx, rax ; rbx = 5 (von rax kopiert)Nach diesen beiden Anweisungen enthalten sowohl rax als auch rbx den Wert 5.
Wichtig: Das Quellregister (rax) behält seinen Wert weiterhin. MOV kopiert — es schneidet nicht aus oder verschiebt nicht.
Ein weiteres Beispiel:
mov rax, 7 ; rax = 7
mov rcx, 3 ; rcx = 3
mov rdx, rcx ; rdx = 3 (von rcx kopiert)
mov rbx, rax ; rbx = 7 (von rax kopiert)Nach diesen Anweisungen:
| Register | Wert |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
Warum das wichtig ist:
- Sie können einen Wert speichern, indem Sie ihn in ein anderes Register kopieren, bevor Sie das Original ändern
- Sie können Werte wiederverwenden, ohne sie erneut aus dem Speicher laden zu müssen
- Dies ist die Grundlage der meisten Assembly-Operationen
Aufgabe
Schreiben Sie den Assembly-Code für diese Aufgaben:
- Schreiben Sie die Zahl 4 in
rax - Kopieren Sie den Wert von
raxnachrbx - Kopieren Sie den Wert von
rbxnachrcx
Nach Ihrem Code sollten alle drei Register 4 enthalten.
Probier es selbst
section .data
msg_rax db 'rax = '
msg_rax_len equ $ - msg_rax
msg_rbx db 'rbx = '
msg_rbx_len equ $ - msg_rbx
msg_rcx db 'rcx = '
msg_rcx_len equ $ - msg_rcx
section .bss
digit resb 1
section .text
global _start
_start:
%include "solution.asm"
; Werte speichern
mov r12, rax
mov r13, rbx
mov r14, rcx
; "rax = " ausgeben
mov rax, 1
mov rdi, 1
mov rsi, msg_rax
mov rdx, msg_rax_len
syscall
; rax-Wert ausgeben
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; "rbx = " ausgeben
mov rax, 1
mov rdi, 1
mov rsi, msg_rbx
mov rdx, msg_rbx_len
syscall
; rbx-Wert ausgeben
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; "rcx = " ausgeben
mov rax, 1
mov rdi, 1
mov rsi, msg_rcx
mov rdx, msg_rcx_len
syscall
; rcx-Wert ausgeben
mov rax, r14
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