Menu
CoddyTech

回顾:MOV 挑战

本课属于 Coddy Assembly 学习旅程的“基础知识”单元。第 22 课,共 45 课。

challenge icon

挑战

这个挑战将测试你对以下内容的理解:

  • 从内存加载值
  • 将值存储到内存
  • 在寄存器之间复制
  • 使用正确大小的寄存器

数据地址已经为你创建好了。你只需要编写 MOV 指令。

挑战

按顺序完成以下任务。每个任务写一行汇编代码。

已提供的数据:

  • 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 在线编辑器