1. مقدمة
الملفات : هي التي يتم الكتابة فيها أو القراءة منها ويتم حفظها في الأقراص.
عند التعامل مع الملفات في المجمع، فهناك قاطعتين تقومان بذلك :
القاطعة الآلية 13h : الخاصة بـ BIOS وهي في الحقيقة أصل كل دالة تقوم سواء بالكتابة في الملفات أو القراءة أو المسح الكلي للقرص الصلب أو القرص المرن ...، أو التحقق وفحص الأقراص ...
القاطعة المحدثة 21h : الخاصة بـ DOS وهي تستعمد أساسا في أصلها على القاطعة 13h،
الذين يريدون التعامل مع القاطعة 13h هم فقط الذين يحاولون إنشاء نظام تشغيل جديد.
لكن في فقرتنا هذه سنتطرق فقط للقاطعة 21h التي تتميز بسهولتها واحتوائها على طريقتين للتعامل مع الملفات .
الطريقة FCB : معقدة إلى حد ما، لكن يجب معرفتها خصوصا لمن يتعامل مع الحماة المعلوماتية (الفيروسات).
الطريقة Handle : سهلة وسريعة.
2.التعامل مع المجلدات
ملاحظة : جميع الدوال التي سنتطرق إليها تنتمي إلى القاطعة 21h.
2.1 الدالة 39h : إنشاء مجلد
الدخول | : | ah=39h |
ds:dx : اسم المجلد والمكان الذي تود وضعه فيه (الاسم يجب أن يكون منتهيا بالقيمة 0) | ||
الخروج | : | CF : الصفر 0 يعني النتيجة تمت بنجاح. |
1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | ||
مقابلتها في DOS | : | MKDIR |
مقابلتها في C | : | ()mkdir |
مقابلتها في Pascal | : | Mkdir |
مثال | : |
chemin db 'c:\salam',0 ...... mov ah,39h |
2.2 الدالة 3Ah :حذف مجلد
الدخول |
: | ah=3Ah |
ds:dx : اسم المجلد والمكان الذي تود حذفه (الاسم يجب أن يكون منتهيا بالقيمة 0) | ||
الخروج |
: | CF : الصفر 0 يعني النتيجة تمت بنجاح. |
1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | ||
مقابلتها في DOS | : | RMDIR |
مقابلتها في C | : | ()rmdir |
مقابلتها في Pascal | : | Rmdir |
مثال | : |
chemin db 'c:\salam',0 ...... mov ah,3Ah |
2.3 الدالة 3Bh :فتح مجلد
الدخول | : | ah=3Bh |
ds:dx : اسم المجلد والمكان الذي تود فتحه (الاسم يجب أن يكون منتهيا بالقيمة 0) | ||
الخروج | : | CF : الصفر 0 يعني النتيجة تمت بنجاح. |
1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | ||
مقابلتها في DOS | : | CHDIR |
مقابلتها في C | : | ()chdir |
مقابلتها في Pascal | : | Chdir |
مثال | : |
chemin db 'c:\salam',0 ...... mov ah,3Bh |
3.التعامل مع الملفات
ملاحظة : جميع الدوال التي سنتطرق إليها تنتمي إلى القاطعة 21h.
الملف : يمكن أن يكون ملفا للكتابة مثلا أو القراءة ، ويمكن أن يكون أيضا عبارة عن مجلد.
بصفة عامة يطلق اسم الملف غلى الملف ذاته وعلى المجلد.
2.1 الطريقة باستعمال Handle
معنى كلمة Handle
handle تعني خواص الملف أو كيفية الدخول إليه.
ملاحظة : الخانات الملونة هي التي تعنينا هنا فلا مجال للتفكير عن معنى الخانات الأخريات.
خواص الملف :
ثمن | الزوج | إذا كان يساوي | ماذا يعني |
0 | 1 | ملف للقراءة فقط | |
1 | 1 | ملف مخفي | |
2 | 1 | ملف نظام | |
3 | 1 | اسم القرص الذي ينتمي إليه | |
4 | 1 | ليس بملف بل هو مجلد | |
5 | 1 | أرشيف | |
6 | 0 | ما زال هذا الزوج غير مستعمل | |
7 | 0 | ما زال هذا الزوج غير مستعمل |
كيفية الدخول إليه عن طريق اللغة المعلوماتية :
ثمن | الزوج | إذا كان يساوي | ماذا يعني : الدخول من أجل | ||
0 | 1 | 2 | |||
000 | القراءة | ||||
001 | الكتابة | ||||
010 | القراءة والكتابة | ||||
3 | 0 | ما زال هذا الزوج غير مستعمل | |||
4 | 5 | 6 | |||
000 | خاص للطريقة FCB | ||||
001 | يمكن لتطبيق حالي للدخول | ||||
010 | الكتابة | ||||
010 | القراءة | ||||
010 | الكل | ||||
7 | 0 | ما زال هذا الزوج غير مستعمل |
الدالة 3Ch : إنشاء ملف
الدخول | : | ah=3Ch | |
ds:dx : اسم المجلد والمكان الذي تود وضعه فيه (الاسم يجب أن يكون منتهيا بالقيمة 0) | |||
cx : يحمل خواص الملف : أي إذا كان يساوي : | |||
0 : ملف للقراءة فقط | |||
1 : ملف مخفي | |||
2 : ملف نظام | |||
الخروج | : | CF = 0 يعني النتيجة تمت بنجاح. | |
CF = 1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | |||
مقابلتها في C | : | ()fopen | |
مقابلتها في Pascal | : | ASSIGN | |
مثال | : |
nom db 'c:\salam.txt',0 ...... mov ah,3ch |
2.1.3 الدالة 3Dh : قتح ملف
الدخول | : | ah=3Dh | |
ds:dx : اسم المجلد والمكان الذي تود وضعه فيه (الاسم يجب أن يكون منتهيا بالقيمة 0) | |||
AL : يحمل طريقة الدخول إلى الملف : أي إذا كان يساوي : | |||
0 : للقراءة فقط | |||
1 : للكتابة | |||
2 : للكتابة والقراءة | |||
الخروج | : | CF = 0 يعني النتيجة تمت بنجاح. | |
CF = 1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | |||
مقابلتها في C | : |
للقراءة فقط : fopen("nom","r") للكتابة : fopen("nom","w") للكتابة والقراءة : fopen("nom","a") |
|
مقابلتها في Pascal | : |
للقراءة فقط : reset للكتابة : rewrite للكتابة والقراءة : appened |
|
مثال | : |
nom db 'c:\salam.txt',0 ...... mov ah,3dh |
2.1.4 الدالة 3Eh : غلق ملف
ملاحظة : جميع الدوال التي تلاحظ أنه يوجد فيها handle : BX تعني أنك يجب إدخال handle في BX قبل أن تستدعي القاطعة 21h ، و handle عبارة عن عدد يمنح لكل ملف مفتوح، ولهذا فعند فتح أي ملف سواء للقراءة أو الكتابة أو هما معا فيجب أن تحفظ القيمة المتواجدة في bx في متغير ما عند لحظة الفتح لكي تسترجعا عند الغلق أو ما شابه ذلك.
الدخول | : | ah=3Eh |
handle : BX | ||
الخروج | : | CF = 0 يعني النتيجة تمت بنجاح. |
CF = 1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | ||
مقابلتها في C | : |
fclos() |
مقابلتها في Pascal | : |
close() |
مثال | : |
[SEGMENT .data] |
الدالة 3Fh : قراءة ملف
الدخول | : | ah=3Fh |
Handle : BX | ||
CX : عدد الأثمان المراد قراءتها (أي عدد الحروف) | ||
DS:DX : عنوان الجدول المراد الوضع فيه الحروف المقروءة | ||
الخروج | : | CF = 0 يعني النتيجة تمت بنجاح. |
CF = 1 هناك خطأ ما (ax يحتوي على رقم الخطأ) | ||
مقابلتها في C | : | fopen("nom","r") |
مقابلتها في Pascal | : | reset |
مثال | : |