回顾:MOV 挑战
本课属于 Coddy Assembly 学习旅程的“基础知识”单元。第 22 课,共 45 课。
挑战
这个挑战将测试你对以下内容的理解:
- 从内存加载值
- 将值存储到内存
- 在寄存器之间复制
- 使用正确大小的寄存器
数据地址已经为你创建好了。你只需要编写 MOV 指令。
挑战
按顺序完成以下任务。每个任务写一行汇编代码。
已提供的数据:
num1:包含值 8(1 字节)num2:包含值 3(1 字节)result:空出的空间(1 字节)
任务:
- 将
num1中的值加载到al - 将
num2中的值加载到bl - 将
bl中的值复制到cl - 将
al中的值存储到result
编写代码后:
al中应包含 8bl中应包含 3cl中应包含 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 在线编辑器