واصف الملف (rdi)
جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 36 من 45.
في الدرس السابق، استخدمت mov rdi, 1 كجزء من استدعاء النظام write. يُسمّى هذا الرقم 1 واصف ملف.
واصف الملف هو رقم يُخبر نظام التشغيل بمكان إرسال البيانات.
واصفات الملفات القياسية الثلاثة في Linux:
| واصف الملف | الاسم | إلى أين تذهب البيانات |
|---|---|---|
| 0 | stdin | إدخال لوحة المفاتيح (قراءة البيانات من المستخدم) |
| 1 | stdout | إخراج الشاشة (إخراج البرنامج العادي) |
| 2 | stderr | إخراج الشاشة (رسائل الخطأ) |
لماذا يوجد مخرجان للشاشة؟
يذهب الإخراج العادي (stdout) وإخراج الأخطاء (stderr) إلى الشاشة نفسها، لكن تتم معالجتهما بشكل منفصل. يتيح لك ذلك:
- إعادة توجيه الإخراج العادي إلى ملف مع الاستمرار في رؤية الأخطاء على الشاشة
- عرض الأخطاء حتى عندما يكون الإخراج العادي مخفيًا
للطباعة في هذه الدورة:
ستستخدم دائمًا واصف الملف 1 (stdout) لطباعة الرسائل. لا تحتاج إلى stderr بعد.
مثال:
mov rdi, 1 ; أرسل الإخراج إلى stdout (الشاشة)ماذا يحدث إذا استخدمت واصف الملف الخطأ؟
| إذا استخدمت | النتيجة |
|---|---|
| 0 (stdin) | تتوقع syscall الخاصة بـ write إدخالًا، وليس إخراجًا: ستفشل أو لن تفعل شيئًا |
| 2 (stderr) | تعمل مثل stdout (تطبع على الشاشة)، لكنها مخصّصة للأخطاء |
| أي رقم آخر | لا تتعرّف النواة عليه: تفشل syscall |
التحدي
أُعطيت سلسلة نصية تُسمّى message وتحتوي على القيمة 'OK' متبوعة بسطر جديد. اكتب سطر التعليمات البرمجية الذي يعيّن واصف الملف للطباعة على الشاشة (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تدرّب بنفسك: Playground لـ Assembly