Menu
Coddy logo textTech

Dosya Tanımlayıcı (rdi)

Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 36 / 45.

Önceki derste, write sistem çağrısının bir parçası olarak mov rdi, 1 kullandınız. 1 sayısına dosya tanımlayıcısı adı verilir.

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

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

Dosya tanımlayıcısıAdVerilerin 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 ayrı ayrı işlenirler. Bu, şunları yapmanızı sağlar:

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

Bu kursta yazdırma için:

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

Örnek:

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

Yanlış dosya tanımlayıcısını kullanırsanız ne olur?

Şunu kullanırsanızSonuç
0 (stdin)write sistem çağrısı çı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 kullanılması amaçlanmıştır
Başka herhangi bir sayıÇekirdek bunu tanımaz: sistem çağrısı başarısız olur
challenge icon

Görev

Yeni satırın ardından 'OK' değerine sahip message adlı bir dize veriliyor. Dosya tanımlayıcısını ekrana (stdout) yazdıracak şekilde ayarlayan kod satırını yazın. Yalnızca rdi için mov yönergesini yazın.

Kendin dene

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

section .text
    global _start

_start:
    ; Öğrenci dosya tanımlayıcısını burada ayarlar
    %include "solution.asm"
    
    mov rax, 1
    ; rdi zaten öğrenci tarafından ayarlanmış olmalı
    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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground