Deskriptor file (rdi)
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 36 dari 45.
Di pelajaran sebelumnya, kamu menggunakan mov rdi, 1 sebagai bagian dari syscall write. Angka 1 itu disebut file descriptor.
File descriptor adalah angka yang memberi tahu sistem operasi ke mana data harus dikirim.
Tiga deskriptor file standar di Linux:
| Deskriptor file | Nama | Tujuan data |
|---|---|---|
| 0 | stdin | Input dari keyboard (membaca data dari pengguna) |
| 1 | stdout | Output di layar (output normal program) |
| 2 | stderr | Output di layar (pesan error) |
Mengapa ada dua output untuk layar?
Output normal (stdout) dan output error (stderr) ditampilkan di layar yang sama, tetapi diperlakukan secara terpisah. Ini memungkinkan kamu untuk:
- Mengalihkan output normal ke file sambil tetap melihat error di layar
- Menampilkan error meskipun output normal disembunyikan
Untuk mencetak dalam kursus ini:
Kamu akan selalu menggunakan file descriptor 1 (stdout) untuk mencetak pesan. Kamu belum perlu menggunakan stderr.
Contoh:
mov rdi, 1 ; kirim output ke stdout (layar)Apa yang terjadi jika kamu menggunakan file descriptor yang salah?
| Jika kamu menggunakan | Hasil |
|---|---|
| 0 (stdin) | syscall write mengharapkan input, bukan output: akan gagal atau tidak melakukan apa pun |
| 2 (stderr) | Berfungsi seperti stdout (mencetak ke layar), tetapi dimaksudkan untuk error |
| Angka lainnya | Kernel tidak mengenalinya: syscall gagal |
Tantangan
Kamu diberi string bernama message dengan nilai 'OK' yang diikuti baris baru. Tulis baris kode yang mengatur file descriptor untuk mencetak ke layar (stdout). Tulis hanya instruksi mov untuk rdi.
Coba sendiri
section .data
message db 'OK', 0x0a
msgLen equ $ - message
section .text
global _start
_start:
; Kamu mengatur deskriptor file di sini
%include "solution.asm"
mov rax, 1
; Kamu seharusnya sudah mengatur rdi
mov rsi, message
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
3Instruksi Pertama: MOV
Apa Itu MOV?MOV dengan Nilai LangsungMOV dari Register ke RegisterMOV dari Memori ke RegisterMOV dari Register ke MemoriLEA: Muat AlamatMOV dengan Ukuran BerbedaLatihan: Tukar RegisterUlasan: Tantangan MOV6Syscall write
Syscall write (1)Deskriptor file (rdi)Alamat buffer (rsi)Jumlah byte (rdx)Rangkai SemuanyaCetak Dua stringNewline Itu PentingRingkasan: Penyiapan writeLatihan sendiri: Playground Assembly