Menu
Coddy logo textTech

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_register

Der 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:

RegisterWert
rax7
rcx3
rdx3
rbx7

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
challenge icon

Aufgabe

Schreibe den Assembly-Code für diese Aufgaben:

  1. Put die number 4 into rax
  2. Copy den Wert von rax into rbx
  3. Copy den Wert von rbx into rcx

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
    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

Übe selbstständig: Assembly-Playground