واصف الملف (rdi)
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 36 من 45.
في الدرس السابق، استخدمت mov rdi, 1 كجزء من write syscall. هذا الرقم 1 يسمى واصف الملف (file descriptor).
واصف الملف (file descriptor) هو رقم يخبر نظام التشغيل أين يرسل البيانات.
واصفات الملفات القياسية الثلاثة في Linux:
| واصف الملف | الاسم | أين تذهب البيانات |
|---|---|---|
| 0 | stdin | إدخال لوحة المفاتيح (قراءة البيانات من المستخدم) |
| 1 | stdout | إخراج الشاشة (مخرجات البرنامج العادية) |
| 2 | stderr | إخراج الشاشة (رسائل الخطأ) |
لماذا يوجد مخرجان للشاشة؟
ينتقل المخرج العادي (stdout) ومخرج الأخطاء (stderr) إلى نفس الشاشة، ولكن يتم التعامل معهما بشكل منفصل. يتيح لك ذلك القيام بما يلي:
- إعادة توجيه المخرج العادي إلى ملف مع الاستمرار في رؤية الأخطاء على الشاشة
- إظهار الأخطاء حتى عندما يكون المخرج العادي مخفياً
للطباعة في هذه الدورة:
ستستخدم دائمًا واصف الملف 1 (stdout) لطباعة الرسائل. لست بحاجة إلى stderr بعد.
مثال:
mov rdi, 1 ; إرسال المخرجات إلى stdout (الشاشة)ماذا يحدث إذا استخدمت واصف ملف (file descriptor) خاطئ؟
| إذا استخدمت | النتيجة |
|---|---|
| 0 (stdin) | يتوقع استدعاء النظام write مدخلات وليس مخرجات — سيفشل أو لن يفعل شيئاً |
| 2 (stderr) | يعمل مثل stdout (يطبع على الشاشة)، ولكنه مخصص للأخطاء |
| أي رقم آخر | لا تتعرف عليه النواة (kernel) — سيفشل استدعاء النظام (syscall) |
التحدي
لقد تم إعطاؤك سلسلة نصية تسمى 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)3التعليمة الأولى - MOV
ما هي MOV؟MOV المباشرةMOV من سجل إلى سجلMOV من الذاكرة إلى السجلMOV من السجل إلى الذاكرةLEA - تحميل العنوانMOV بأحجام مختلفةتدريب: تبديل السجلاتملخص: تحدي MOV6نداء النظام Write
نداء النظام Write (1)واصف الملف (rdi)عنوان الـ Buffer (rsi)عدد البايتات (rdx)تجميع الأجزاء معاًطباعة سلسلتين نصيتينأهمية السطر الجديدمراجعة: إعداد Write