Menu
CoddyTech

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], register

Dấ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], al

Bạ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ắcGiải thích
Phải có dấu ngoặc vuôngmov 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ớpVớ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], al

Trong 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.

challenge icon

Thử thách

Viết hai dòng assembly để:

  1. Đưa số 9 vào thanh ghi al
  2. Lưu giá trị từ al và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
    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