MOV Register zu Register
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 16 von 45.
Nachdem du nun weißt, wie man eine Zahl direkt in ein Register schreibt (MOV immediate), kannst du Werte auch zwischen Registern kopieren.
Syntax:
mov destination_register, source_registerDer Wert aus dem source-Register wird in das destination-Register kopiert. Das source-Register bleibt unverändert.
Beispiel:
mov rax, 5 ; rax = 5
mov rbx, rax ; rbx = 5 (kopiert von rax)Nach diesen beiden Anweisungen enthalten sowohl rax als auch rbx den Wert 5.
Wichtig: Das Quellregister (rax) hat seinen Wert still. MOV kopiert: Es schneidet nicht aus und verschiebt nicht.
Ein weiteres Beispiel:
mov rax, 7 ; rax = 7
mov rcx, 3 ; rcx = 3
mov rdx, rcx ; rdx = 3 (kopiert von rcx)
mov rbx, rax ; rbx = 7 (kopiert von rax)Nach diesen Anweisungen:
| Register | Wert |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
Warum das wichtig ist:
- Du kannst einen Wert speichern, indem du ihn in ein anderes Register kopierst, bevor du das Original änderst
- Du kannst Werte wiederverwenden, ohne sie erneut aus dem Speicher zu laden
- Dies ist die Grundlage der meisten Assembleroperationen
Aufgabe
Schreibe den Assembly-Code für diese Aufgaben:
- Put die number 4 into
rax - Copy den Wert von
raxintorbx - Copy den Wert von
rbxintorcx
Nach deinem Code sollten alle drei Register den Wert 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Übe selbstständig: Assembly-Playground