Menu
CoddyTech

MOV từ bộ nhớ sang thanh ghi

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 17 trên 45.

Đến nay, bạn đã chuyển trực tiếp các số vào thanh ghi (tức thời) và sao chép giá trị giữa các thanh ghi. Bây giờ, bạn sẽ học cách nạp dữ liệu từ bộ nhớ vào một thanh ghi.

Vì sao điều này quan trọng:

Hãy nhớ từ chương 0: một lệnh có thể dùng nhiều nhất một toán hạng bộ nhớ, và thanh ghi nhanh hơn bộ nhớ rất nhiều, vì vậy bạn tải các giá trị cần xử lý vào thanh ghi. Đây là cách bạn thực hiện.

Cú pháp:

mov register, [address]

Dấu ngoặc [ ] có nghĩa là: "đi đến địa chỉ bộ nhớ này và lấy giá trị được lưu ở đó."

Hãy hình dung thế này:

Hãy tưởng tượng tại địa chỉ bộ nhớ number có một chiếc hộp. Bên trong hộp là một giá trị, chẳng hạn như số 5. Khi bạn viết:

mov al, [number]    ; Load the value from memory address "number" into al

Bạn đang yêu cầu CPU: "Đến ô có tên number, lấy giá trị bên trong (trong trường hợp này là 5) và chép nó vào thanh ghi al."

Sau khi thực hiện câu lệnh này, giá trị 5 được lưu trong al. Giá trị ban đầu bên trong ô tại địa chỉ number vẫn ở đó. Nó không bị xóa.

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

Quy tắcGiải thích
Nguồn phải là địa chỉ bộ nhớ[label] hoặc [address]
Bắt buộc phải có dấu ngoặc vuôngNếu không có dấu ngoặc vuông, myNumber là địa chỉ, không phải giá trị
Kích thước phải khớpNếu bộ nhớ lưu một byte, hãy dùng al (không dùng rax)

Lỗi thường gặp:

; Sai: không có dấu ngoặc vuông, myNumber là ĐỊA CHỈ, không phải giá trị
mov al, myNumber

; Đúng: nạp GIÁ TRỊ lưu tại myNumber
mov al, [myNumber]
challenge icon

Thử thách

Viết một dòng assembly để tải giá trị từ địa chỉ bộ nhớ value vào thanh ghi al.

Tự làm thử

section .data
    msg db 'al = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; Đoạn code của bạn chạy trước (nạp giá trị vào al)
    
    %include "solution.asm"
    
    ; Lưu giá trị từ al
    mov r12, rax
    
    ; In ra "al = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; In ra giá trị trong al
    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