Menu
CoddyTech

MOV với giá trị tức thời

Thuộc phần Kiến thức nền tảng trong hành trình Assembly của Coddy. Bài học 15 trên 45.

Dạng đơn giản nhất của MOV là MOV immediate. “Immediate” nghĩa là giá trị được ghi trực tiếp trong chính câu lệnh.

Cú pháp:

mov register, value

Giá trị được sao chép vào thanh ghi.

Ví dụ:

LệnhTác dụng
mov rax, 5Sao chép số 5 vào rax
mov rbx, 100Sao chép số 100 vào rbx
mov rcx, 0Sao chép số 0 vào rcx

Đoạn code này không tạo ra kết quả nào hiển thị (chưa có đầu ra), nhưng vẫn đưa các số vào thanh ghi thành công.

Lưu ý: Bạn sẽ thấy tác dụng của các lệnh MOV này trong những bài học sau, khi học cách in ra hoặc gỡ lỗi. Còn bây giờ, chỉ cần biết rằng các số được lưu trong thanh ghi.

Các quy tắc quan trọng:

Quy tắcGiải thích
Giá trị phải vừa với thanh ghirax có thể chứa các số rất lớn (lên đến 2⁶⁴-1)
Giá trị được sao chép, không được di chuyểnSố ban đầu vẫn tồn tại (nó chỉ là một con số)
Thanh ghi nằm bên tráimov rax, 5 là đúng. mov 5, rax là sai
challenge icon

Thử thách

Viết một dòng mã assembly cho mỗi nhiệm vụ:

  1. Đưa số 5 vào thanh ghi rax.
  2. Đưa số 7 vào thanh ghi rbx.
  3. Đưa số 3 vào thanh ghi rcx.

Tự làm thử

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"
    
    ; Lưu các giá trị
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; In ra "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; In ra giá trị của rax
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; In ra "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; In ra giá trị của rbx
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; In ra "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; In ra giá trị của rcx
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Thoát
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Playground Assembly