Menu
Coddy logo textTech

Dosya Tanımlayıcı (rdi)

Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 36 / 45.

Önceki derste, write syscall'unun bir parçası olarak mov rdi, 1 kullandınız. Bu 1 sayısı, bir dosya tanımlayıcı (file descriptor) olarak adlandırılır.

Dosya tanımlayıcı, işletim sistemine verinin nereye gönderileceğini söyleyen bir sayıdır.

Linux'taki üç standart dosya tanımlayıcısı:

Dosya tanımlayıcısıAdVerinin gittiği yer
0stdinKlavye girişi (kullanıcıdan veri okuma)
1stdoutEkran çıktısı (normal program çıktısı)
2stderrEkran çıktısı (hata mesajları)

Ekran için neden iki çıktı var?

Normal çıktı (stdout) ve hata çıktısı (stderr) aynı ekrana gider, ancak bunlar ayrı ayrı ele alınır. Bu şunları yapmanıza olanak tanır:

  • Hataları ekranda görmeye devam ederken normal çıktıyı bir dosyaya yönlendirmek
  • Normal çıktı gizlendiğinde bile hataları göstermek

Bu kursta yazdırma işlemi için:

Mesajları yazdırmak için her zaman 1 (stdout) dosya tanımlayıcısını kullanacaksınız. Henüz stderr'e ihtiyacınız yok.

Örnek:

mov rdi, 1      ; çıktıyı stdout'a (ekrana) gönder

Yanlış dosya tanımlayıcısı (file descriptor) kullanırsanız ne olur?

KullanılanSonuç
0 (stdin)write syscall çıktı değil, girdi bekler — başarısız olur veya hiçbir şey yapmaz
2 (stderr)stdout gibi çalışır (ekrana yazdırır), ancak hatalar için tasarlanmıştır
Başka herhangi bir sayıÇekirdek (kernel) bunu tanımaz — syscall başarısız olur
challenge icon

Görev

Size, değeri 'OK' olan ve ardından bir yeni satır karakteri gelen message adlı bir dize verilmiştir. Dosya tanımlayıcısını ekrana (stdout) yazdırmak üzere ayarlayan kod satırını yazın. Yalnızca rdi için mov komutunu yazın.

Kendin dene

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

section .text
    global _start

_start:
    ; Öğrenci dosya tanımlayıcıyı burada ayarlar
    %include "solution.asm"
    
    mov rax, 1
    ; rdi zaten öğrenci tarafından ayarlanmış olmalıdır
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler