بادئة مقطع البرنامج

بادئة مقطع البرنامج ( PSP) هي بنية بيانات تُستخدم في أنظمة DOS لتخزين حالة البرنامج . وهي تُشبه الصفحة الصفرية في نظام التشغيل CP/M . تتكون بادئة مقطع البرنامج من البنية التالية:

إزاحةمقاسمحتويات
00:00–01:002 بايت (رمز)مخرج مشابه لـ CP/M-80 (يحتوي دائمًا على INT 20h ) [ 1 ] [ 2 ]
02h–03hكلمة (2 بايت)جزء من البايت الأول يتجاوز الذاكرة المخصصة للبرنامج
04 ساعةبايتمحجوز
05:00–09:005 بايت (رمز)إدخال الاستدعاء البعيد الشبيه بنظام CP/M-80 إلى نظام DOS، وحجم مقطع البرنامج [ 1 ] [ 3 ]
0Ah–0Dhكلمة مزدوجة (4 بايت)إنهاء عنوان البرنامج السابق ( INT 22h القديم )
0Eh–11hكلمة مزدوجةعنوان الخروج من البرنامج السابق ( INT 23h القديم )
12 ساعة - 15 ساعةكلمة مزدوجةعنوان الخطأ الحرج للبرنامج السابق ( INT 24h القديم )
16:00 - 17:00كلمةقسم PSP الخاص بالوالدين (عادةً COMMAND.COM - داخلي)
18 ساعة - 2 ساعة20 بايتجدول ملفات الوظائف (JFT) (داخلي)
2Ch–2Dhكلمةقطاع البيئة
2Eh–31hكلمة مزدوجةSS:SP عند الدخول إلى آخر مكالمة داخلية لمدة 21 ساعة (داخلية)
32 ساعة - 33 ساعةكلمةحجم JFT (داخلي)
34 ساعة - 37 ساعةكلمة مزدوجةمؤشر إلى JFT (داخلي)
38 ساعة - 3 ساعاتكلمة مزدوجةمؤشر إلى جهاز PSP سابق (يستخدم فقط بواسطة SHARE في نظام التشغيل DOS 3.3 والإصدارات الأحدث)
3Ch–3Fh4 بايتمحجوز
40 ساعة - 41 ساعةكلمةإصدار DOS المراد إرجاعه (DOS 5 والإصدارات الأحدث، ويمكن تغييره عبر SETVER في DOS 5 والإصدارات الأحدث)
42 ساعة - 4 ساعات14 بايتمحجوز
50 ساعة - 52 ساعة3 بايت (رمز)مدخل استدعاء بعيد يشبه نظام يونكس إلى نظام DOS (يحتوي دائمًا على INT 21h + RETF)
53-54 ساعة2 بايتمحجوز
55h–5Bh7 بايتمحجوز (يمكن استخدامه لتحويل المدافع الأول إلى مدافع موسع)
5Ch–6Bh16 بايتعلبة قياسية FCB 1 غير مفتوحة
6Ch–7Fh20 بايتبطاقة FCB 2 القياسية غير المفتوحة (يتم استبدالها إذا تم فتح بطاقة FCB 1)
80 ساعة1 بايتعدد البايتات في سطر الأوامر
81h–FFh127 بايتسطر الأوامر (ينتهي بـ 0Dh ) [ 4 ] [ 5 ]

يُستخدم PSP في أغلب الأحيان للحصول على وسيطات سطر الأوامر لبرنامج DOS؛ على سبيل المثال، يقوم الأمر "FOO.EXE /A /F" بتنفيذ FOO.EXE مع الوسيطات '/A' و '/F'.

إذا كانت قيمة طول سطر الأوامر في سجل PSP غير صفرية، وكان مؤشر قسم البيئة ليس 0000h ولا FFFFh ، فيجب على البرامج أولاً محاولة استرداد سطر الأوامر من متغير البيئة %CMDLINE% قبل استخراجه من سجل PSP. بهذه الطريقة، يُمكن تمرير أسطر أوامر أطول من 126 حرفًا إلى التطبيقات.

يُمرَّر عنوان مقطع PSP في سجل DS عند تنفيذ البرنامج. ويمكن تحديده لاحقًا باستخدام الدالة 51h أو الدالة 62h من النوع Int 21h. تُعيد أيٌّ من الدالتين عنوان PSP في السجل BX. [ 6 ]

بدلاً من ذلك، في برامج .COM100h المحملة عند الإزاحة ، يمكن الوصول إلى PSP مباشرةً باستخدام الإزاحات المذكورة أعلاه. 000hتشير الإزاحة إلى بداية PSP، 0FFhوتشير إلى نهايته، وهكذا.

على سبيل المثال، يعرض الكود التالي وسائط سطر الأوامر:

org 100h ; .COM - لا يستخدم ds; تتطلب الدالة الفرعية 9 من النوع INT 21h علامة '$' لإنهاء السلسلة xor bx , bx mov bl ,[ 80h ] cmp bl , 7Eh ja exit ; لمنع تجاوز السعةmov byte [ bx + 81h ], '$'اطبع السلسلة mov ah , 9 mov dx , 81h int 21hخروج: mov ax , 4C00h ; الدالة الفرعية 4C int 21h

في نظام التشغيل DOS 1.x، كان من الضروري أن يحتوي سجل CS (مقطع التعليمات البرمجية) على نفس المقطع الموجود في PSP عند إنهاء البرنامج، وبالتالي تضمنت ممارسة البرمجة القياسية حفظ سجل DS (نظرًا لأن سجل DS يتم تحميله بمقطع PSP) مع كلمة صفرية في المكدس عند بدء البرنامج وإنهاء البرنامج بتعليمات RETF، والتي من شأنها أن تسحب قيمة المقطع المحفوظة من المكدس وتقفز إلى العنوان 0 من PSP، والذي يحتوي على تعليمة INT 20h.

; save push ds xor ax , ax push ax; نقل إلى مجموعة البيانات الافتراضية (@data) mov ax , @ data mov ds , ax; اطبع الرسالة في mess1 (الدالة الفرعية 9 من 21h) mov dx , mess1 mov ah , 9 int 21hretf

إذا كان الملف التنفيذي ملفًا بامتداد .COM، فإن هذه العملية غير ضرورية، ويمكن إنهاء البرنامج ببساطة باستخدام تعليمة INT 20h مباشرة، أو باستدعاء الدالة INT 21h رقم 0. ومع ذلك، كان على المبرمج التأكد من أن سجل CS يحتوي على عنوان مقطع PSP عند إنهاء البرنامج.

بدء القفزmess1 db 'Hello world!$'البداية: mov dx , mess1 mov ah , 9 int 21hint 20h

في نظام التشغيل DOS 2.x والإصدارات الأحدث، تم إنهاء البرنامج بدلاً من ذلك باستخدام وظيفة INT 21h 4Ch التي لم تتطلب أن يحتوي سجل CS على قيمة مقطع PSP.

انظر أيضاً

مراجع

  1. 1 2 تايلور، روجر؛ ليمونز، فيل (يونيو 1982). "الهجرة التصاعدية - الجزء 1: المترجمون - استخدام برامج الترجمة لنقل برامج CP/M-86 إلى CP/M وMS-DOS" [ استخدام برامج الترجمة لنقل برامج CP/M إلى CP/M-86 وMS-DOS ] (ملف PDF) . بايت . المجلد  7، العدد  6. منشورات بايت. الصفحات 321-322 ، 324، 326، 328، 330، 332، 334، 336، 338، 340، 342، 344 [342، 344]. الرقم الدولي الموحد للدوريات 0360-5280 . رمز الكود BYTEDJ . مؤرشف (ملف PDF) من الأصل بتاريخ 16 يناير 2020 . تم الاسترجاع بتاريخ 15 يناير 2020. […] الوصول إلى CP/M-86 […] يتطلب الوصول إلى CP/M-86 وضع رمز الدالة في سجل CL، ووضع مُعامل البايت في سجل DL أو وضع مُعامل الكلمة في سجل DX، ووضع مقطع البيانات في سجل DS (عادةً لا يتم تغيير مقطع البيانات في البرنامج المُحوّل)، وتنفيذ مقاطعة برمجية، INT #224 . تُعاد النتيجة في سجل AL إذا كانت قيمة بايت؛ أما إذا كانت قيمة كلمة، فتُعاد في كلٍ من سجلي AX وBX. تُعاد قيم الكلمات المزدوجة مع الإزاحة في سجلي BX ومقطع البيانات في سجل ES. بالتالي، يتطلب تحويل البرامج من CP/M-80 إلى CP/M-86 استبدال استدعاء الموقع 5 بالمقاطعة البرمجية INT #224. يتضمن التغيير الضروري الآخر إعادة التشغيل الدافئ . في نظام CP/M-80، يمكن الوصول إلى إعادة التشغيل السريع عبر استدعاء نظام برمز وظيفة 0 للانتقال إلى الموقع 0. أما في نظام CP/M-86، فلا يُدعم الانتقال إلى الموقع 0. لذا، يجب تعديل مخرج البرنامج هذا في البرنامج المُترجم لضمان تشغيله بشكل صحيح. شريطة استبدال استدعاء الموقع 5 بالمقاطعة رقم 224، وإجراء تعديل إعادة التشغيل السريع، وتعيين السجلات بشكل صحيح، لن تكون هناك مشكلة تُذكر في تمكين البرنامج المُترجم من الوصول إلى وظائف نظام CP/M-86. [...] الوصول إلى MS-DOS [...] على الرغم من أن MS-DOS يمتلك آلية "مُفضلة" للوصول إلى النظام عبر مقاطعة برمجية، المقاطعة رقم 33 ، إلا أنه يوفر آلية إضافية للبرامج "الموجودة مسبقًا" متوافقة مع اصطلاحات استدعاء CP/M-80، على الأقل للوظائف في النطاق من 0 إلى 36. فيما يتعلق باستدعاءات النظام ضمن نطاق الوظائف المسموح به، لا يحتاج المبرمج إلى إجراء أي تعديلات على البرامج المترجمة لتشغيلها على نظام MS-DOS سوى تعيين السجلات بشكل صحيح. يدعم نظام MS-DOS أيضًا وظيفة إعادة التشغيل السريع لنظام CP/M-80. يؤدي الانتقال إلى الموقع 0 في نظام MS-DOS إلى تنفيذ مقاطعة برمجية، وهي المقاطعة رقم 32.   ، وهو عملياً نهاية البرنامج والطريقة المعتادة للخروج منه. […](13 صفحة)
  2. بول، ماتياس ر. (2002-10-07) [2000]. "رد: تشغيل ملف COM" . مجموعة الأخبار : alt.msdos.programmer . تم الاسترجاع في 2017-09-03 . {{cite newsgroup}}: CS1 maint: deprecated archiveal service ( link )(ملاحظة: يحتوي على تفاصيل حول اصطلاحات استدعاء برامج COM في نظام DOS.)
  3. نيكاسيك، ميخال (13 سبتمبر 2011). "من يحتاج إلى التفاف العنوان على أي حال؟" . متحف نظام التشغيل OS/2 . مؤرشف من الأصل في 19 فبراير 2020. تم الاسترجاع في 19 فبراير 2020. [...] استخدم نظام 86-DOS ، وبالتالي نظامي PC DOS و MS-DOS ، حيلة ذكية. احتوى البايت عند الإزاحة 5 من PSP على رمز عملية استدعاء بعيد (9Ah)؛ واحتوت الكلمة عند الإزاحة 6 من PSP على القيمة المناسبة للإشارة إلى حجم مقطع البرنامج، وكذلك جزء الإزاحة من الاستدعاء البعيد. صُممت الكلمة عند الإزاحة 8، والتي كانت بمثابة جزء المقطع من الاستدعاء البعيد، بحيث عند دمجها مع الإزاحة، فإنها ستلتف (وهي ميزة معروفة جيدًا لوحدة المعالجة المركزية 8086 ) وتشير إلى العنوان 0:C0h، الذي يحتوي على متجه المقاطعة 30h. تعمل واجهة CALL 5 حتى في محاكاة DOS على نظامي التشغيل Windows NT و OS/2، ومن المؤكد أن هذين النظامين لا يمكن تشغيلهما مع تعطيل خط A20 . فكيف يتم ذلك إذًا؟ بدلًا من حذف بتات العنوان، يقوم النظام بعكس البايتات الخمسة الموجودة في 0:C0h إلى 1000C0h. وقد استُخدمت التقنية نفسها في DOS 5 والإصدارات الأحدث التي تعمل مع DOS=HIGH . في هذه الحالة، يضمن DOS أن العنوان الخطي 1000C0h يحتوي على استدعاء بعيد مناسب.
  4. ^ بول ماتياس ر. (1997-07-01) [1994-01-01]. MSDOSTIPs - نصائح للاستخدام مع MS-DOS 5.0-7 (باللغة الألمانية). مؤرشف من الأصل بتاريخ 2017-08-22 . تم الاسترجاع 2013/10/25 .{{cite book}}تم تجاهل هذا |work=( مساعدة ) (ملاحظة: ملف MSDOSTIP.TXT جزء من ملف MPDOSTIP.ZIP، الذي تم الاحتفاظ به حتى عام 2001 وتم توزيعه على العديد من المواقع في ذلك الوقت. يشير الرابط المقدم إلى نسخة أقدم من ملف MSDOSTIP.TXT تم تحويلها إلى HTML.)
  5. ^ بول ماتياس ر. (1997-05-01) [1995-03-01]. "الرجوع إلى JPSofts 4DOS 5.5b/c, 5.51, 5.52a و NDOS" . MPDOSTIP (باللغة الألمانية). أرشفة من النسخة الأصلية بتاريخ 2016-11-04 . تم الاسترجاع 2015/05/08 .(ملاحظة: يشير الرابط المرفق إلى نسخة من 4DOS5TIP.TXTالملف تم تحويلها إلى HTML، وهي جزء من MPDOSTIP.ZIPالمجموعة.)
  6. "INT 21h,62h - الحصول على عنوان PSP (DOS 3.x)" . مؤرشف من الأصل بتاريخ 2012-02-07.
  7. 1 2 3 شولمان، أندرو؛ براون، رالف د .؛ ماكسي، ديفيد؛ ميشيلز، ريموند ج.؛ كايل، جيم (1994) [نوفمبر 1993]. نظام التشغيل DOS غير الموثق: دليل المبرمج لوظائف MS-DOS المحجوزة وهياكل البيانات - موسع ليشمل MS-DOS 6 وNovell DOS وWindows 3.1 ( الطبعة الثانية). ريدينغ، ماساتشوستس، الولايات المتحدة الأمريكية: أديسون ويسلي . ISBN  0-201-63287-X.(xviii+856+vi صفحات، قرص مرن 3.5 بوصة) تصحيحات:

للمزيد من القراءة

  • 86-DOS - نظام تشغيل القرص لمعالج 8086 - دليل المبرمج (ملف PDF) . الإصدار 0.3 ( طبعة أولية). سياتل، واشنطن، الولايات المتحدة الأمريكية: شركة سياتل لمنتجات الحاسوب، 1980. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 23 يونيو 2019. تاريخ الاسترجاع: 13 سبتمبر 2011 .(41 صفحة)
  • "تنسيق بادئة مقطع البرنامج (PSP)" . INTER61 . 2000. مؤرشف من الأصل بتاريخ 17 فبراير 2020. تم الاطلاع عليه بتاريخ 19 ديسمبر 2019 .
  • شيبرز، آرني (1991). "Kapitel 5: تفاصيل EXEC - بادئة مقطع البرنامج (PSP)". DOS 5 für Programmierer: Die endgültige Referenz (باللغة الألمانية) (1  ed.). أديسون ويسلي (ألمانيا) GmbH . ص 148 – 151، 971 – 972. ISBN  3-89319-350-2.(1123+ صفحة، قابلة للطي، قرص مرن 5.25 بوصة)