Menu
Coddy logo textTech

MOV レジスタからメモリへ

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

メモリからレジスタにデータを読み込む方法がわかったので、今度はその逆、レジスタからメモリにデータを格納することを学びます。

構文:

mov [address], register

brackets [ ] は、「register から値を into この memory address に格納する」という意味です。

次のように考えてみてください:

メモリアドレス destination に空の箱があると想像してください。レジスタに値が入っています(たとえば、al には number 7 が含まれています)。

次のように書くと:

mov [destination], al

CPU に、「al レジスタ(7)から値を取り出し、それを destination という名前の箱に入れてください」と伝えていることになります。

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

例:

mov al, 7            ; alレジスタに7を入れる
mov [destination], al ; alからの値をメモリアドレス"destination"に格納する

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

重要なルール:

ルール説明
brackets は必須ですmov destination, al は Wrong です
destination は memory address でなければなりません[destination] のようなラベルを使用してください
サイズは一致していなければなりませんこの演習では、al(8 ビット)を使用してください

よくある間違い:

; 誤り: ブラケットが欠けている
mov destination, al

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

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

challenge icon

チャレンジ

次の操作を行うアセンブリコードを2行記述してください:

  1. 数値9をalレジスタに入れる
  2. alの値をメモリアドレスdestinationにStoreする

(メモリアドレス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腕試し

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

基礎のすべてのレッスン

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