Menu
CoddyTech

MOV 立即数

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

MOV 最简单的形式是 MOV immediate。“Immediate”表示值直接写在指令本身中。

语法:

mov register, value

值会被复制到寄存器中。

示例:

指令作用
mov rax, 5将数字 5 复制到 rax
mov rbx, 100将数字 100 复制到 rbx
mov rcx, 0将数字 0 复制到 rcx

这段代码不会产生任何可见效果(目前还没有输出),但它成功地将数字放入了寄存器。

注意:在后续课程中学习打印或调试时,你会看到这些 MOV 指令的效果。现在只要知道数字已存储在寄存器中即可。

重要规则:

规则说明
值必须能放入寄存器rax 可以存放非常大的数字(最大为 2⁶⁴-1)
值会被复制,而不是移动原始数字仍然存在(它只是一个数字)
寄存器在左侧mov rax, 5 是正确的。mov 5, rax 是错误的
challenge icon

挑战

为每个任务写一行汇编代码:

  1. 将数字 5 放入 rax 寄存器。
  2. 将数字 7 放入 rbx 寄存器。
  3. 将数字 3 放入 rcx 寄存器。

亲手试试

section .data
    msg_rax db 'rax = '
    msg_rax_len equ $ - msg_rax
    msg_rbx db 'rbx = '
    msg_rbx_len equ $ - msg_rbx
    msg_rcx db 'rcx = '
    msg_rcx_len equ $ - msg_rcx

section .bss
    digit resb 1

section .text
    global _start

_start:
    %include "solution.asm"
    
    ; 保存值
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; 输出 "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; 输出 rax 的值
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; 输出 "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; 输出 rbx 的值
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; 输出 "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; 输出 rcx 的值
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; 退出
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Assembly 在线编辑器