Menu
Coddy logo textTech

MOV 即値

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

MOVの最も単純な形式はMOVイミディエイトです。「イミディエイト」とは、値が命令自体の中に直接書き込まれていることを意味します。

構文:

mov register, value

値がレジスタにコピーされます。

例:

命令動作
mov rax, 5数値 5 を rax にコピーします
mov rbx, 100数値 100 を rbx にコピーします
mov rcx, 0数値 0 を rcx にコピーします

このコードは目に見える動作は何も行いません(まだ出力はありません)が、数値をレジスタに正常に格納しています。

注: これらのMOV命令の効果は、後のレッスンで出力やデバッグについて学ぶ際に確認できます。今は、数値がレジスタに格納されていることだけを覚えておいてください。

重要なルール:

ルール説明
値はレジスタに収まる必要がありますrax は非常に大きな数(最大 2⁶⁴-1)を保持できます
値は移動ではなくコピーされます元の数値は依然として存在します(それは単なる数値です)
レジスタは左側に記述しますmov rax, 5 は正しいです。mov 5, rax は誤りです
challenge icon

チャレンジ

各タスクに対して、アセンブリコードを1行ずつ記述してください:

  1. 数値 5 を rax レジスタに格納してください。
  2. 数値 7 を rbx レジスタに格納してください。
  3. 数値 3 を rcx レジスタに格納してください。

自分で試してみよう

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腕試し

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

基礎のすべてのレッスン