まとめ: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基礎のすべてのレッスン
自分で練習してみよう: Assemblyプレイグラウンド