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, valueGiá trị được sao chép vào thanh ghi.
Ví dụ:
| Lệnh | Tác dụng |
|---|---|
mov rax, 5 | Sao chép số 5 vào rax |
mov rbx, 100 | Sao chép số 100 vào rbx |
mov rcx, 0 | Sao 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ắc | Giải thích |
|---|---|
| Giá trị phải vừa với thanh ghi | rax 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ển | Số ban đầu vẫn tồn tại (nó chỉ là một con số) |
| Thanh ghi nằm bên trái | mov rax, 5 là đúng. mov 5, rax là sai |
Thử thách
Viết một dòng mã assembly cho mỗi nhiệm vụ:
- Đưa số 5 vào thanh ghi
rax. - Đưa số 7 vào thanh ghi
rbx. - Đư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
syscallBà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