Menu
CoddyTech

Bộ mô tả tệp (rdi)

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

Trong bài học trước, bạn đã dùng mov rdi, 1 trong lệnh gọi hệ thống write. Số 1 đó được gọi là bộ mô tả tệp.

Bộ mô tả tệp là một số cho hệ điều hành biết cần gửi dữ liệu đến đâu.

Ba bộ mô tả tệp tiêu chuẩn trong Linux:

Bộ mô tả tệpTênNơi dữ liệu được gửi đến
0stdinĐầu vào từ bàn phím (đọc dữ liệu từ người dùng)
1stdoutĐầu ra trên màn hình (đầu ra thông thường của chương trình)
2stderrĐầu ra trên màn hình (thông báo lỗi)

Tại sao lại có hai đầu ra trên màn hình?

Đầu ra thông thường (stdout) và đầu ra lỗi (stderr) được gửi đến cùng một màn hình, nhưng được xử lý riêng biệt. Điều này cho phép bạn:

  • Chuyển hướng đầu ra thông thường đến một tệp mà vẫn thấy lỗi trên màn hình
  • Hiển thị lỗi ngay cả khi ẩn đầu ra thông thường

Để in ra trong khóa học này:

Bạn sẽ luôn dùng bộ mô tả tệp (file descriptor) 1 (stdout) để in thông báo. Bạn chưa cần dùng stderr.

Ví dụ:

mov rdi, 1      ; Gửi đầu ra (output) đến stdout (màn hình)

Điều gì xảy ra nếu bạn dùng sai bộ mô tả tệp?

Nếu bạn dùngKết quả
0 (stdin)Lệnh gọi hệ thống sẽ thất bại nếu đầu vào đến từ một pipe hoặc một tệp. Trong terminal, văn bản thường vẫn được in ra, nhưng stdin dành cho đầu vào, không phải đầu ra
2 (stderr)Hoạt động như stdout (in ra màn hình), nhưng dành cho lỗi
Bất kỳ số nào khácKernel không nhận diện được số đó: lệnh gọi hệ thống thất bại
challenge icon

Thử thách

Bạn được cung cấp một chuỗi có tên message với giá trị 'OK' theo sau là một ký tự xuống dòng. Hãy viết dòng code đặt bộ mô tả tệp để in ra màn hình (stdout). Chỉ viết lệnh mov cho rdi.

Tự làm thử

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; Bạn đặt bộ mô tả tệp ở đây
    %include "solution.asm"
    
    mov rax, 1
    ; Bạn cần đặt giá trị cho rdi trước đó
    mov rsi, message
    mov rdx, msgLen
    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