MOV từ thanh ghi vào bộ nhớ
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 18 trên 45.
Bây giờ bạn đã biết cách tải dữ liệu từ bộ nhớ vào thanh ghi, bạn sẽ học cách làm ngược lại: lưu dữ liệu từ thanh ghi vào bộ nhớ.
Cú pháp:
mov [address], registerDấu ngoặc [ ] có nghĩa là: "lưu giá trị từ thanh ghi vào địa chỉ bộ nhớ này."
Hãy hình dung thế này:
Hãy tưởng tượng tại địa chỉ bộ nhớ destination có một chiếc hộp rỗng. Bạn có một giá trị nằm trong thanh ghi (ví dụ: al chứa số 7).
Khi bạn viết:
mov [destination], alBạn đang yêu cầu CPU: "Lấy giá trị từ thanh ghi al (7) và đặt nó vào ô có tên destination."
Sau khi thực thi câu lệnh này, địa chỉ bộ nhớ destination hiện chứa giá trị 7. Giá trị trong al vẫn ở đó. Nó không bị xóa.
Ví dụ:
mov al, 7 ; Đưa 7 vào thanh ghi al
mov [destination], al ; Lưu giá trị từ al vào địa chỉ bộ nhớ "destination"Lưu ý: Trong bài tập này, dữ liệu trong bộ nhớ có kích thước 1 byte (8 bit). Vì vậy, chúng ta dùng al. Đây là thanh ghi 8 bit phù hợp với kích thước đó. Sau này bạn sẽ tìm hiểu thêm về kích thước thanh ghi.
Quy tắc quan trọng:
| Quy tắc | Giải thích |
|---|---|
| Phải có dấu ngoặc vuông | mov destination, al sẽ không đúng |
| Đích phải là một địa chỉ bộ nhớ | Dùng một nhãn như [destination] |
| Kích thước phải khớp | Với bài tập này, hãy dùng al (8 bit) |
Lỗi thường gặp:
; Sai: thiếu dấu ngoặc vuông
mov destination, al
; Đúng: lưu giá trị vào bộ nhớ
mov [destination], alTrong thử thách dưới đây, địa chỉ bộ nhớ destination đã được tạo sẵn cho bạn. Bạn sẽ học cách tạo dữ liệu của riêng mình trong Chương 3. Hiện tại, chỉ cần tập trung vào lệnh MOV.
Thử thách
Viết hai dòng assembly để:
- Đưa số 9 vào thanh ghi
al - Lưu giá trị từ
alvào địa chỉ bộ nhớdestination
(Địa chỉ bộ nhớ destination đã được tạo sẵn cho bạn.)
Tự làm thử
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; Tệp solution.asm được chèn vào đây
; Tệp này định nghĩa destination VÀ các lệnh MOV của người học
%include "solution.asm"
; Nạp giá trị đã lưu từ bộ nhớ vào al để in ra
mov al, [destination]
; Lưu giá trị đó
mov r12, rax
; In ra "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; In ra giá trị
mov rax, r12
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