まとめ:MOVチャレンジ
CoddyのAssemblyジャーニー「基礎」セクションの一部 — レッスン 22/45。
チャレンジ
このチャレンジでは、以下の理解度をテストします:
- メモリからの値のロード
- メモリへの値の保存
- レジスタ間でのコピー
- 正しいレジスタサイズの使用
データアドレスはすでに作成されています。MOV命令を記述するだけです。
チャレンジ
以下のタスクを順番に完了してください。各タスクに対してアセンブリを1行記述してください。
提供されているデータ:
num1— 値 8 を保持 (1バイト)num2— 値 3 を保持 (1バイト)result— 空きスペース (1バイト)
タスク:
num1からalに値をロードするnum2からblに値をロードするblからclに値をコピーする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