Menu
Coddy logo textTech

まとめ:MOVチャレンジ

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

challenge icon

チャレンジ

このチャレンジでは、以下についての理解が問われます:

  • メモリから値を読み込む
  • 値をメモリに保存する
  • レジスタ間でコピーする
  • 正しいレジスタサイズを使用する

データアドレスはすでに作成されています。MOV命令を書くだけです。

チャレンジ

以下のタスクを順番に完了してください。各タスクにつき、アセンブリを1行書きます。

すでに提供されているデータ:

  • num1:値8を格納(1バイト)
  • num2:値3を格納(1バイト)
  • result:空き領域(1バイト)

タスク:

  1. num1から値をalに読み込む
  2. num2から値をblに読み込む
  3. blからclに値をコピーする
  4. alの値をresultに保存する

コード実行後:

  • alには8が格納されている
  • blには3が格納されている
  • clには3が格納されている
  • resultのメモリには8が格納されている

自分で試してみよう

section .data
    msg_al db 'al = '
    msg_al_len equ $ - msg_al
    msg_bl db 'bl = '
    msg_bl_len equ $ - msg_bl
    msg_cl db 'cl = '
    msg_cl_len equ $ - msg_cl
    msg_result db 'result = '
    msg_result_len equ $ - msg_result
    newline db 0xa

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; 生徒のコードが最初に実行される
    
    %include "solution.asm"
    
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    mov r15, 0
    mov r15b, [result]

    mov rax, 1
    mov rdi, 1
    mov rsi, msg_al
    mov rdx, msg_al_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, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, msg_bl
    mov rdx, msg_bl_len
    syscall

    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, msg_cl
    mov rdx, msg_cl_len
    syscall

    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, msg_result
    mov rdx, msg_result_len
    syscall

    mov rax, r15
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

基礎のすべてのレッスン

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