Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

واصف الملف (rdi)

جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 36 من 45.

في الدرس السابق، استخدمت mov rdi, 1 كجزء من write syscall. هذا الرقم 1 يسمى واصف الملف (file descriptor).

واصف الملف (file descriptor) هو رقم يخبر نظام التشغيل أين يرسل البيانات.

واصفات الملفات القياسية الثلاثة في Linux:

واصف الملفالاسمأين تذهب البيانات
0stdinإدخال لوحة المفاتيح (قراءة البيانات من المستخدم)
1stdoutإخراج الشاشة (مخرجات البرنامج العادية)
2stderrإخراج الشاشة (رسائل الخطأ)

لماذا يوجد مخرجان للشاشة؟

ينتقل المخرج العادي (stdout) ومخرج الأخطاء (stderr) إلى نفس الشاشة، ولكن يتم التعامل معهما بشكل منفصل. يتيح لك ذلك القيام بما يلي:

  • إعادة توجيه المخرج العادي إلى ملف مع الاستمرار في رؤية الأخطاء على الشاشة
  • إظهار الأخطاء حتى عندما يكون المخرج العادي مخفياً

للطباعة في هذه الدورة:

ستستخدم دائمًا واصف الملف 1 (stdout) لطباعة الرسائل. لست بحاجة إلى stderr بعد.

مثال:

mov rdi, 1      ; إرسال المخرجات إلى stdout (الشاشة)

ماذا يحدث إذا استخدمت واصف ملف (file descriptor) خاطئ؟

إذا استخدمتالنتيجة
0 (stdin)يتوقع استدعاء النظام write مدخلات وليس مخرجات — سيفشل أو لن يفعل شيئاً
2 (stderr)يعمل مثل stdout (يطبع على الشاشة)، ولكنه مخصص للأخطاء
أي رقم آخرلا تتعرف عليه النواة (kernel) — سيفشل استدعاء النظام (syscall)
challenge icon

التحدي

لقد تم إعطاؤك سلسلة نصية تسمى message بقيمة 'OK' متبوعة بسطر جديد. اكتب سطر الكود الذي يضبط واصف الملف (file descriptor) للطباعة على الشاشة (stdout). اكتب فقط تعليمة mov الخاصة بـ rdi.

جرّب بنفسك

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

section .text
    global _start

_start:
    ; يقوم الطالب بتعيين واصف الملف هنا
    %include "solution.asm"
    
    mov rax, 1
    ; يجب أن يكون rdi قد تم تعيينه بالفعل من قبل الطالب
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات