Menu
Coddy logo textTech

MOV レジスタ間

CoddyのAssemblyジャーニー「基礎」セクションの一部。レッスン 16/45。

レジスタに数値を直接入れる方法(MOV immediate)がわかったので、レジスタ間で値をコピーすることもできます。

構文:

mov destination_register, source_register

sourceレジスタの値がdestinationレジスタにコピーされます。sourceレジスタは変更されません。

例:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (rax からコピー)

この 2 つの命令の後、raxrbx の両方に 5 が含まれます。

重要: ソースレジスタ (rax) には値が残っています。MOV はコピーします。切り取ったり移動したりするわけではありません。

別の例:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (rcx からコピー)
mov rbx, rax    ; rbx = 7 (rax からコピー)

これらの命令の後:

レジスタ
rax7
rcx3
rdx3
rbx7

これが重要な理由:

  • 元の値を変更する前に別のレジスタへコピーすることで、値を保存できます
  • メモリから再度読み込まずに値を再利用できます
  • これはほとんどのアセンブリ操作の基礎です
challenge icon

チャレンジ

次のタスクのアセンブリコードを書いてください:

  1. 数値 4 を rax に入れる
  2. rax の値を rbx にコピーする
  3. ​​rbx の値を rcx にコピーする

コードの実行後、3つすべてのレジスタに 4 が入っているはずです。

自分で試してみよう

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"
    
    ; 値を保存
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; "rax = " を出力
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; rax の値を出力
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; "rbx = " を出力
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; rbx の値を出力
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; "rcx = " を出力
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; rcx の値を出力
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; 終了
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Assemblyプレイグラウンド