Menu
Coddy logo textTech

MOV レジスタからメモリへ

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

メモリからレジスタにデータをロードする方法を学んだので、次は、その逆であるレジスタからメモリへのデータのストア(保存)について学びます。

構文:

mov [address], register

かっこ [ ] は、「レジスタの値をこのメモリアドレスに格納する」ということを意味します。

次のように考えてみましょう:

メモリ番地 destination に空の箱があると想像してください。レジスタに値が入っています(例えば、al には数値の 7 が格納されています)。

次のように記述すると:

mov [destination], al

CPUに対して次のように指示していることになります:「alレジスタの値(7)を取り出し、それをdestinationという名前のボックスに入れなさい。」

この命令が実行された後、メモリアドレス destination には値 7 が格納されます。al の値はそのまま残り、削除されません。

例:

mov al, 7            ; 7をalレジスタに格納
mov [destination], al ; alの値をメモリ番地 "destination" に格納

注: この演習では、メモリ内のデータは1バイト(8ビット)です。そのため、alを使用します。これはサイズに一致する8ビットレジスタです。レジスタのサイズについては、後ほど詳しく学習します。

重要なルール:

ルール説明
ブラケット([])は必須ですmov destination, al は誤りです
転送先はメモリアドレスである必要があります[destination] のようなラベルを使用してください
サイズが一致している必要がありますこの演習では、al(8ビット)を使用してください

よくある間違い:

; 誤り: ブラケット(括弧)がありません
mov destination, al

; 正解: 値をメモリに格納します
mov [destination], al

以下のチャレンジでは、メモリアドレス destination はあらかじめ作成されています。独自のデータを作成する方法については、第3章で学びます。今は、MOV命令だけに集中してください。

challenge icon

チャレンジ

以下の操作を行うために、アセンブリを2行記述してください:

  1. 数値の 9 を al レジスタに格納する
  2. al の値をメモリアドレス destination に保存する

(メモリアドレス destination はあらかじめ作成されています。)

自分で試してみよう

section .data
    msg db 'destination = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; solution.asm がここにインクルードされます
    ; これは destination と生徒の MOV 命令を定義します
    
    %include "solution.asm"
    
    ; 表示のためにメモリから al に格納された値をロードします
    mov al, [destination]
    
    ; それを保存します
    mov r12, rax
    
    ; "destination = " を出力します
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; 値を出力します
    mov rax, r12
    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腕試し

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

基礎のすべてのレッスン