Menu
CoddyTech

Số byte (rdx)

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

Bạn đã cho OS biết cần in ra ở đâu (rdi) và cần in ra nội dung gì (rsi). Bây giờ bạn cần cho hệ điều hành biết cần in ra bao nhiêu byte.

Thanh ghi dùng để lưu số byte là rdx.

Tại sao hệ điều hành cần biết độ dài?

Hệ điều hành không biết chuỗi của bạn kết thúc ở đâu. Nếu không có độ dài, hệ điều hành sẽ đọc bộ nhớ mãi mãi. Độ dài cho hệ điều hành biết chính xác khi nào cần dừng.

Ví dụ:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = số byte cần in ra

Điều gì xảy ra nếu độ dài không chính xác?

Nếu bạn đặtKết quả
Quá ngắnChỉ một phần của chuỗi được in ra
Quá dàiHệ điều hành tiếp tục đọc vượt quá chuỗi của bạn, đến vùng nhớ rác: có thể in ra ký tự ngẫu nhiên hoặc gặp sự cố
Bằng khôngKhông có gì được in ra

Tự động tính độ dài:

Ở chương 3, bạn đã học mẫu $ - label:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + ký tự xuống dòng)

Điều này giúp độ dài luôn chính xác, ngay cả khi bạn thay đổi chuỗi.

Ví dụ hoàn chỉnh:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; Lời gọi hệ thống write
    mov rdi, 1           ; stdout
    mov rsi, msg         ; Địa chỉ của chuỗi
    mov rdx, msgLen      ; Số byte
    syscall
challenge icon

Thử thách

Bạn được cung cấp một chuỗi có tên color với giá trị 'Red', theo sau là một ký tự xuống dòng. Một hằng số có tên colorLen đã được định nghĩa bằng cách dùng $ - color.

Viết dòng code đặt rdx thành độ dài của chuỗi bằng hằng số colorLen.

Chỉ viết lệnh mov cho rdx.

Tự làm thử

section .text
    global _start

_start:
    ; Code của bạn chạy trước (thiết lập rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx đã chứa độ dài (do code của bạn thiết lập)
    syscall

    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