جوف
تم تطوير مواصفات GOFF (تنسيق ملف الكائن المعمم) لنظام التشغيل MVS من IBM ليحل محل تنسيق ملف الكائن IBM OS/360 للتعويض عن نقاط الضعف في التنسيق الأقدم. [ 1 ]
خلفية
طُوِّر تنسيق ملفات الكائنات الأصلي لنظام التشغيل IBM OS/360 عام 1964 لجهاز الحاسوب المركزي الجديد IBM System/360 . واستُخدم هذا التنسيق أيضًا من قِبَل مُصنِّعي الحواسيب المركزية المتوافقة والمُشابهة، بما في ذلك Univac 90/60 و90/70 و90/80 وFujitsu B2800. وتم توسيع التنسيق لإضافة سجلات رمزية ومعلومات مُوسَّعة حول الوحدات، بالإضافة إلى دعم الإجراءات والوظائف ذات الأسماء التي يزيد طولها عن 8 أحرف. ورغم أن هذا ساعد، إلا أنه لم يُوفِّر المعلومات المُحسَّنة اللازمة للغات البرمجة الأكثر تعقيدًا اليوم، والميزات الأكثر تقدمًا مثل الكائنات والخصائص والأساليب، ودعم Unicode ، والأساليب الافتراضية .
طُوِّر تنسيق ملف كائنات GOFF بواسطة شركة IBM في عام 1995 تقريبًا كوسيلة للتغلب على هذه المشكلات. [ 2 ] أول ذكر لهذا التنسيق كان في المعلومات التمهيدية حول مُجمِّع المستوى العالي الجديد. [ 3 ] يدعم GOFF معلومات تصحيح الأخطاء المُضمَّنة بتنسيق البيانات المرتبطة (ADATA)، ولكنه لا يدعم سجلات SYM القديمة التي يُنشئها خيار TEST. تجدر الإشارة إلى أن تنسيق ملف كائنات OS/360 قد تم استبداله ببساطة بتنسيق GOFF، ولم يتم إيقاف استخدامه، ولا يزال قيد الاستخدام من قِبل المُجمِّعات ومُترجمات اللغات حيثما تستطيع اللغة تحمُّل قيود التنسيق القديم.
الاتفاقيات
ستستخدم هذه المقالة مصطلح "الوحدة النمطية" للإشارة إلى أي اسم أو رمز مكافئ يُستخدم لتوفير مُعرِّف لجزء من التعليمات البرمجية أو البيانات خارج النطاق الذي يُشار إليه. [ أ ] قد تُشير الوحدة النمطية إلى روتين فرعي، أو دالة، أو بيانات مشتركة أو بيانات كتلة في لغة فورتران ، أو كائن أو فئة، أو طريقة أو خاصية لكائن أو فئة، أو أي روتين أو مُعرِّف آخر مُسمى خارج ذلك النطاق المحدد الذي يُشير إلى الاسم الخارجي. تجدر الإشارة إلى أن استخدام مصطلح "الوحدة النمطية" في هذه المقالة يهدف إلى تبسيط الموضوع، ولكنه لا يُطابق ما تستخدمه شركة IBM للدلالة على هذا المصطلح.
يُستخدم مصطلح "المجمع" للإشارة إلى برنامج يحول لغة التجميع إلى لغة الآلة ، وكذلك مصطلح "التجميع" كعملية استخدام المجمع، ومصطلح "الترجمة" كعملية استخدام " المترجم "، الذي يقوم بنفس الشيء للغات عالية المستوى؛ ولأغراض هذه المقالة، فإن مصطلحي "الترجمة" و"المترجم" قابلان للتبادل مع مصطلحي "التجميع" و"المجمع".
تُستخدم الأرقام في هذه المقالة على النحو التالي: ما لم يُحدد أنها سداسية عشرية (أساس 16)، فإن جميع الأرقام المستخدمة هي عشرية (أساس 10). عند الحاجة إلى التعبير عن رقم بالنظام السداسي العشري، يُستخدم تنسيق مُجمِّع الحواسيب المركزية القياسي، والذي يتضمن استخدام الحرف الكبير X قبل الرقم، وكتابة أي أحرف سداسية عشرية في الرقم بأحرف كبيرة، ووضع الرقم بين علامتي اقتباس مفردتين، على سبيل المثال، يُعبَّر عن الرقم 15deadbeef 16 على النحو التالي: X'15DEADBEEF'.
يُقصد بكلمة "بايت" في هذا المقال وحدةً تتكون من 8 بتات، وما لم يُنص على خلاف ذلك، فإن "البايت" و"الحرف" هما الشيء نفسه؛ فالأحرف في ترميز EBCDIC تتكون أيضًا من 8 بتات. عند استخدام مجموعات الأحرف متعددة البايتات (مثل يونيكود ) في برامج المستخدم، فإنها ستستخدم بايتين (أو أكثر).
المتطلبات والقيود
يشبه هذا التنسيق تنسيق ملف الكائن الخاص بنظام التشغيل OS/360، ولكنه يضيف معلومات إضافية لاستخدامها في بناء التطبيقات. [ 4 ]
- ملفات GOFF إما أن تكون ذات طول ثابت أو متغير.
- يجب أن يتطابق سجل GOFF تمامًا مع سجل واحد في نظام الملفات الأساسي . ملف GOFF ليس ملفًا من نوع التدفق .
- يجب أن يكون حجم السجلات ذات الطول الثابت 80 بايتًا. أما الحد الأدنى لحجم السجلات ذات الطول المتغير فهو 56 بايتًا. في حالة السجلات ذات الطول الثابت، ستكون هناك بايتات غير مستخدمة في نهاية السجل، ويجب تعيين هذه البايتات إلى الصفر الثنائي.
- لا يفترض البرنامج الذي يقرأ (أو يكتب) سجلات GOFF أي شيء عن التنسيق الداخلي لهذه السجلات، إذ يُفترض أن نظام التشغيل قادر على توفير سجلات ذات أطوال ثابتة أو متغيرة دون أن يحتاج البرنامج الذي يقرأها إلى معرفة نظام إدارة الملفات الداخلي لنظام التشغيل. ولا يُعد طول السجل جزءًا من السجل نفسه.
- يتم تخزين القيم الثنائية بتنسيق big endian ، على سبيل المثال القيمة 1 هي X'01' لقيمة 8 بت، و X'0001' لقيمة 16 بت، و X'00000001' لقيمة 32 بت، و X'0000000000000001' لقيمة 64 بت.
- يتم عد البتات من اليسار إلى اليمين؛ البت 0 هو البت الأيسر في البايت أو الكلمة.
- تُعدّ السجلات ذات الطول الثابت ضرورية لملفات GOFF المنشورة على أنظمة Unix .
- يجوز استكمال سجل في سجل لاحق. وفي حالة استكمال سجل، لا يجوز وجود أي سجلات وسيطة بين السجل الذي يتم استكماله وسجل الاستكمال.
- يبدأ ملف كائن GOFF بسجل HDR وينتهي بسجل END. يجب أن يتضمن سجل END عدد سجلات GOFF (وليس عدد السجلات الفعلية) في الملف.
- يمكن لمترجم أو مُجمِّع لغة برمجة إنتاج ملفات GOFF متعددة في عملية ترجمة/تجميع واحدة، ولكن يجب أن تكون ملفات GOFF منفصلة عن بعضها البعض. هذا يعني أنه يمكن أن تتبع وحدة أو وحدة ترجمة، تتكون من سجل HDR، وESD وسيط، وTXT، وغيرها، وتنتهي بسجل END، وحدة ترجمة أخرى تبدأ بسجل HDR وتنتهي بسجل END، وهكذا، حسب الحاجة.
- أسماء الوحدات والفئات حساسة لحالة الأحرف. فالوحدة المسماة "exit" (كما هو مستخدم في لغة C ) لا يشترط أن تكون مطابقة لـ "EXIT" المستخدمة في لغة Fortran .
- يتم نقل بعض الاتفاقيات المطبقة على تنسيق ملف الكائن OS/360 إلى تنسيق ملف الكائن GOFF، بما في ذلك:
- ما لم يُنص على خلاف ذلك، فإن جميع الأحرف موجودة في مجموعة أحرف EBCDIC ، باستثناء الأسماء الخارجية، كما هو مذكور أدناه.
- يجب ترقيم عناصر ESD (البرامج الرئيسية، والروتينات الفرعية، والوظائف، وFORTRAN Common، والأساليب والخصائص في الكائنات) بدءًا من 1، ويجب أن يكون لكل عنصر جديد الرقم التالي في التسلسل، دون أي "فجوات" في تسلسل الترقيم.
- يجب تعريف عنصر ESD قبل أن يشير إليه أي سجل آخر (مثل سجل TXT أو RLD).
- يحتوي كل سجل ESD على عنصر ESD واحد فقط. (يختلف هذا عن التنسيق القديم، الذي كان يسمح بما يصل إلى 3 عناصر ESD في كل سجل ESD.)
- قد يحتوي سجل RLD (قاموس النقل [ 5 ] ) على عنصر واحد أو أكثر، ويمكن متابعة سجل RLD إلى سجل لاحق.
- لضمان التوافق المستقبلي، يجب تعيين الحقول المشار إليها على أنها "محجوزة" إلى الصفر الثنائي.
- لا يُحدد معيار GOFF مجموعات الأحرف المستخدمة للأسماء الخارجية، ولكن يُتيح ملفًا يُشير إلى مجموعة الأحرف المُستخدمة. (يدعم هذا أسماء الوحدات النمطية ثنائية البايت المُستندة إلى Unicode ). مع ذلك، تسمح بعض منتجات IBM باستخدام نطاق محدود من الأحرف للأسماء الخارجية والمعرّفات الأخرى، عادةً ما تكون قيمًا سداسية عشرية (EBCDIC) من X'41' إلى X'FE' بالإضافة إلى حرفي الإدخال والإخراج، X'0F' وX'0E' على التوالي.
- يدعم التنسيق الجديد أسماء الفئات، والتي يوجد منها نوعان: أسماء محجوزة وأسماء يحددها المستخدم أو أسماء غير محجوزة . ويبلغ الحد الأقصى لطول جميع أسماء الفئات 16 حرفًا.
- تتكون أسماء الفئات المحجوزة من حرف واحد، وشرطة سفلية، وطول يتراوح بين 1 و14 حرفًا. أسماء الفئات المحجوزة التي تبدأ بـ B_ مخصصة للمجلد؛ أما أسماء الفئات المحجوزة التي تبدأ بـ C_ والمُصنفة على أنها قابلة للتحميل، فهي مخصصة للبرامج المُصممة للاستخدام مع بيئة لغة IBM (LE). أما أسماء الفئات التي تبدأ بـ C_ وغير المُصنفة على أنها قابلة للتحميل، بالإضافة إلى الفئات التي تبدأ بـ X_ أو Y_ أو Z_، فهي متاحة للاستخدام العام كأسماء غير محجوزة .
- قد تكون أسماء الفئات التي يقدمها المستخدم بأحرف صغيرة.
- أسماء الفئات ليست رموزًا خارجية.
- لا تذكر كتيبات IBM صفحة الترميز المستخدمة في هذا التنسيق، ولكن لأغراض هذه المقالة سنفترض أنها 037، على الرغم من أن ذلك لا ينبغي أن يؤثر على تعليمات الجهاز والبيانات المخزنة بواسطة هذا التنسيق.
- يمكن الرجوع إلى الفئات التالية التي يستخدمها الرابط إذا لزم الأمر لأغراض التجميع:
| B_ESD | فئة قاموس الرموز الخارجية |
| B_TEXT | فئة النص |
| B_RLD | قاموس الانتقال فئة |
| B_SYM | فئة جدول الرموز الداخلية |
| B_IDRL | فئة بيانات تعريف مترجم اللغة |
| B_PRV | فئة السجل الزائف |
| B_IDRU | فئة بيانات التعريف التي يحددها المستخدم |
- أسماء الفئات التالية محجوزة من قبل الرابط ولا يمكن الوصول إليها من قبل تطبيقات المستخدم:
| B_IDRB | معلومات بيانات المجلد |
| B_IDRZ | معلومات بيانات سوبر-زاب |
| B_IMPEXP | جدول الاستيراد والتصدير |
| B_LIT | جدول معلومات التحميل |
| B_MAP | بيانات الخرائط |
- معلومات جدول الرموز لملف الكائن SYM من سجل تنسيق ملف الكائن 360 غير متوفرة لملفات كائن GOFF؛ يجب استخدام سجل ADATA (سجل فرعي لـ TXT) بدلاً من ذلك.
الحد الأقصى للحجم
وفقًا لدليل المستخدم الخاص بنظام التشغيل z/OS XL C/C++، "يبلغ الحد الأقصى لحجم كائن GOFF 1 جيجابايت." [ 6 ]
أنواع السجلات
على غرار تنسيق OS/360 القديم، يتم تقسيم سجلات ملفات الكائنات إلى 6 أنواع مختلفة من السجلات، بعضها مضاف، وبعضها محذوف، وبعضها معدل:
- يجب أن يحدث تسجيل HDR (هذا جديد) أولاً، فهو يحدد رأس ملف الكائن.
- تُعرّف سجلات ESD البرامج الرئيسية، والبرامج الفرعية، والدوال، والأقسام الوهمية، وFortran Common، والأساليب والخصائص، وأي وحدة أو إجراء يمكن استدعاؤه من وحدة أخرى. تُستخدم هذه السجلات لتعريف البرنامج (أو البرامج) أو أجزاء البرنامج التي تم تجميعها في هذه الدورة من المُجمِّع، والإجراءات الخارجية التي يستخدمها البرنامج (مثل exit() في لغة C ، وCALL EXIT في لغة Fortran ، وnew() وdispose() في لغة Pascal ). يجب أن تظهر سجلات ESD قبل أي إشارة إلى رمز ESD.
- تم توسيع سجلات TXT، وبالإضافة إلى احتوائها على تعليمات أو بيانات الجهاز التي تحتفظ بها الوحدة، فإنها تحتوي أيضًا على سجلات بيانات التعريف (IDR) (20 نوعًا أو أكثر)، وسجلات البيانات المرتبطة (ADATA)، ومعلومات إضافية متعلقة بالوحدة.
- تُستخدم سجلات RLD لإعادة توجيه العناوين. على سبيل المثال، إذا أشار برنامج إلى عنوان يقع على بُعد 500 بايت داخل الوحدة، فسيخزن العنوان داخليًا على أنه 500، ولكن عند تحميل الوحدة في الذاكرة، فمن المؤكد أنه سيُخزَّن في مكان آخر، لذا يُعلم سجل RLD مُحرِّر الربط أو المُحمِّل بالعناوين التي يجب تغييرها. كذلك، عندما تُشير وحدة إلى رمز خارجي، فإنها عادةً ما تُعيِّن قيمة الرمز إلى الصفر، ثم تُضمِّن إدخال RLD لهذا الرمز للسماح للمُحمِّل أو مُحرِّر الربط بتغيير العنوان إلى القيمة الصحيحة.
- تُعد سجلات LEN جديدة، وتوفر معلومات معينة عن الطول.
- تشير سجلات النهاية إلى نهاية وحدة نمطية، ويمكن أن تشير أيضًا إلى مكان بدء تنفيذ البرنامج. يجب أن يكون هذا السجل هو الأخير في الملف.
شكل
قد تكون سجلات GOFF ثابتة أو متغيرة الطول؛ الحد الأدنى للطول عند استخدام السجلات متغيرة الطول هو 56 حرفًا، مع أن معظم السجلات ستكون أطول من ذلك. باستثناء أسماء الوحدات والفئات، جميع الأحرف من مجموعة أحرف EBCDIC . يجب على الأنظمة المبنية على Unix استخدام سجلات ثابتة الطول (80 بايت). يجب ملء السجلات في الملفات ثابتة الطول التي تقل عن الطول الثابت بأصفار. لتمييز سجلات GOFF عن تنسيق كائنات OS/360 الأقدم (حيث يكون البايت الأول من السجل هو X'02') أو عن الأوامر التي قد تكون موجودة في الملف، يكون البايت الأول من كل سجل GOFF دائمًا هو القيمة الثنائية X'03'، بينما يجب أن تبدأ الأوامر بقيمة حرفية لا تقل عن مسافة (X'40'). يشير البايتان التاليان من سجل GOFF إلى نوع السجل، واستمراريته، وإصدار تنسيق الملف. تُعرف هذه البايتات الثلاثة الأولى بحقل PTV .
بي تي في
يمثل حقل PTV أول 3 بايتات من كل سجل GOFF.
| بايت | أجزاء | قيمة | غاية |
|---|---|---|---|
| 0 | الجميع | 03 | يشير إلى بداية سجل GOFF |
| 1 | 0-3 | 0 | سجل ESD (الرمز الخارجي) |
| 1 | سجل نصي (TXT) | ||
| 2 | سجل RLD (نقل) | ||
| 3 | سجل الطول (LEN) | ||
| 4 | نهاية (نهاية) السجل | ||
| X'5'-X'E' | محجوز | ||
| X'F' | تسجيل HDR (الرأس) | ||
| 4-5 | محجوز | ||
| 6-7 | ٠٠ | السجل الأولي الذي لا يُستكمل في السجل التالي. ينبغي أن تكون هذه القيمة الوحيدة المستخدمة لسجلات GOFF ذات الطول المتغير | |
| 01 | السجل الأولي الذي يستمر في السجل التالي | ||
| 10 | لم يتم استكمال سجل المتابعة في السجل التالي | ||
| 11 | سجل المتابعة الذي يستمر في السجل التالي | ||
| 2 | الجميع | ٠٠ | رقم إصدار تنسيق ملف الكائن. جميع القيم محجوزة باستثناء X'00' |
تقنية النطاق الديناميكي العالي (HDR)
يُشترط وجود سجل HDR، ويجب أن يكون هو السجل الأول.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية |
|---|---|---|---|---|
| 0-2 | 3 | بي تي في | X'03F000' | القيمة المسموح بها فقط؛ لا يمكن استكمال تسجيل HDR حاليًا |
| 3-47 | 45 | 0 | محجوز | |
| 48-51 | 4 | مستوى الهندسة المعمارية | النظام الثنائي 0 أو 1 | مستوى بنية GOFF؛ جميع القيم محجوزة باستثناء 0 و1 |
| 52-53 | 2 | خصائص الوحدة النمطية الحجم | ثنائي | طول حقل خصائص الوحدة |
| 54-59 | 6 | 0 | محجوز | |
| 60- | 0+ | خصائص الوحدة النمطية | قائمة خصائص الوحدة (اختياري) |
التفريغ الكهروستاتيكي
يُحدد سجل ESD الاسم العام لوحدة نمطية، أو برنامج رئيسي، أو روتين فرعي، أو إجراء، أو دالة، أو خاصية، أو طريقة في كائن، أو في لغة فورتران العامة، أو في نقطة دخول بديلة. يجب أن يكون سجل ESD للاسم العام موجودًا في الملف قبل أي إشارة إلى هذا الاسم من أي سجل آخر.
| بايت (بايتات) | مقاس | مجال | القيمة (أو البتات) | غاية | |
|---|---|---|---|---|---|
| 0-2 | 3 | بي تي في | X'030000' | سجل ESD بدون أي استمرارات | |
| X'030100' | سجل ESD الذي يستمر في السجل التالي | ||||
| 3 | 1 | نوع الرمز | ٠٠ | SD - تعريف القسم؛ يُستخدم هذا القسم لقيم SD وCM (المشتركة) وPC (الرمز الخاص، وهو SD بدون اسم). يجب أن تكون قيمة ESDID "الأصل" 0. يُستخدم هذا القسم لتعريف برنامج رئيسي أو روتين فرعي أو دالة يكون رمزها جزءًا من هذا الملف. يُستخدم أيضًا لـ Fortran Common. | |
| 01 | ED - التعريف الخارجي. يجب أن يكون ESDID "الأصلي" غير صفري، وأن يكون قيمة إدخال SD الذي يشير إلى هذا الرمز الخارجي. إذا كانت قيمة RLD تشير إلى فئة ينتمي إليها هذا الإدخال، فيجب تحديد الفئة التي يشير إليها هذا العنصر في حقل الاسم الخارجي. يُستخدم هذا لتسمية إجراء أو دالة يتم استدعاؤها. | ||||
| 02 | LD - تعريف التسمية. يجب أن يكون ESDID "الأصلي" غير صفري، وأن يكون قيمة إدخال SD الذي يُعرّف هذا الرمز ضمنه. يُمكن استخدام هذا لإنشاء اسم بديل للوحدة أو لعرض جزء منها كإجراء منفصل. على سبيل المثال، قد تحتوي مكتبة وقت التشغيل للغة برمجة معينة على ميزات مُحددة يجب استخدامها داخليًا، ولكنها مفيدة للبرامج المكتوبة بتلك اللغة، وبالتالي يُمكن إعطاء الميزة تسميةً بحيث يُمكن استدعاؤها مباشرةً. على سبيل المثال، قد تكون هناك حزمة رياضيات كاملة كوحدة واحدة، ويمكن تسمية جميع الدوال القياسية (الجيب، جيب التمام، الجذر التربيعي، إلخ) كنقاط دخول في تلك الوحدة. | ||||
| 03 | PR - مرجع الجزء أو السجل الزائف. يتم تمييزه بواسطة حقل معرف مساحة الاسم. يجب أن يكون ESDID "الأصلي" غير صفري، وأن يكون قيمة إدخال SD الذي يُعرّف هذا الرمز داخله. | ||||
| 04 | ER و WX - مرجع خارجي / مرجع خارجي ضعيف. يتم التمييز بينهما من خلال قيمة "قوة الربط" في حقل "السمات". يُستخدم WX عندما يكون الروتين الخارجي مفقودًا. على سبيل المثال، إذا كان برنامج آلة حاسبة يحتوي على حزمة رياضية سريعة وعالية الأداء اختيارية، فيمكن استدعاؤها كمرجع خارجي ضعيف، وإذا كانت مفقودة أو غير متوفرة، فيمكن للبرنامج استخدام حزمة رياضية أقل كفاءة. | ||||
| 4-7 | 4 | معرف الخدمة الإلكترونية | ثنائي | معرّف ESDID يبدأ من 1. يجب أن يكون كل معرّف ESDID جديد أعلى بمقدار 1 بالضبط من الإدخال السابق. | |
| 8-11 | 4 | معرف الجهاز الأساسي (ESID) | ثنائي | هذا هو معرّف ESDID للكائن الذي يُعرّف هذا المدخل، إذا كان جزءًا من كائن آخر. ويكون قيمته 0 إذا لم يكن له كائن أب. | |
| 12-15 | 4 | 0 | محجوز | ||
| 16-19 | 4 | إزاحة | ثنائي | عنوان هذا الرمز ضمن معرف ESDID الرئيسي الخاص به لإدخالات LD أو ED؛ صفر خلاف ذلك. | |
| 20-23 | 4 | 0 | محجوز | ||
| 24-27 | 4 | طول | ثنائي | طول هذا العنصر لأنواع ED وPR؛ صفر في غير ذلك. إذا تم تأجيل قيمة الطول الفعلية، يتم تعيين هذه القيمة إلى -1. | |
| 28-31 | 4 | السمة الموسعة ESDID | ثنائي | معرّف ESDID للعنصر الذي يحتوي على معلومات سمات موسعة لأنواع ED وLD؛ يُستخدم عادةً عندما تكون مكتبات DLL مدعومة للرموز التي يتم حلها في وقت التشغيل (مثل الطرق الافتراضية). صفر في غير ذلك. | |
| 32-35 | 4 | إزاحة السمة الموسعة | ثنائي | العنوان الذي يمكن العثور فيه على السمات الموسعة للحقل السابق، المستخدم لسجلات ED و LD التي تحتوي على سمات موسعة؛ صفر خلاف ذلك. | |
| 36-39 | 4 | 0 | محجوز | ||
| 40 | 1 | اسم المساحة | يحدد مساحة الاسم التي ينتمي إليها هذا | ||
| 0 | مخصص لمجلد إدارة البرامج | ||||
| 1 | الاسم العادي | ||||
| 2 | سجل زائف | ||||
| 3 | الأجزاء (المساحة المخصصة للإدخالات الخارجية بما في ذلك العناصر التي تحتوي على بيانات ثابتة مهيأة) | ||||
| 41 | 1 | الأعلام | |||
| املأ المضارع | البت 0 | 0 | بدون تعبئة | ||
| 1 | تعبئة البايت موجودة (صالحة فقط لأنواع ED) | ||||
| مشوه | البت 1 | 0 | الرمز غير مشوه | ||
| 1 | قد يكون الرمز مشوهًا | ||||
| قابل لإعادة التسمية | الجزء 2 | 0 | لا يمكن إعادة تسميته (نفس علامة "mapped" في XOBJ) | ||
| 1 | يمكن إعادة تسمية الرمز (يمكن المشاركة في إعادة تسمية أنواع بيئة اللغة (LE)) | ||||
| فئة قابلة للإزالة | البت 3 | 0 | (افتراضي) غير قابل للإزالة | ||
| 1 | يمكن حذف هذه الفئة اختيارياً دون التأثير على تشغيل البرنامج (صالح فقط لأنواع ED) | ||||
| الأجزاء 4-6 | محجوز | ||||
| احجز مساحة إضافية | البت 7 | 0 | لا توجد مساحة إضافية محجوزة | ||
| 1 | احجز 16 بايت من المساحة في بداية الفئة (فئة MRG من النوع ED فقط) | ||||
| 42 | 1 | قيمة التعبئة | قيمة بايت التعبئة، إذا تم تعيين علامة وجود التعبئة | ||
| 43 | 1 | 0 | محجوز | ||
| 44-47 | 4 | البيانات المرتبطة | ثنائي | يُستخدم لتحديد البيئة أو المنطقة الثابتة لعناصر LD باستخدام XLINK | |
| 48-51 | 4 | أولوية | ثنائي | ترتيب فرز عناصر العلاقات العامة | |
| 52-59 | 8 | 0 | محجوز | ||
| 60-69 | 10 | السمات السلوكية | سمات السلوك لهذا العنصر (انظر جدول سمات السلوك أدناه) | ||
| 70-71 | 2 | وقت الاسم | ثنائي | طول اسم هذا العنصر؛ لا يمكن أن يكون صفرًا | |
| 72- | اسم | نص | اسم هذا العنصر مع حذف المسافات الزائدة في نهايته. يجب أن يتكون من حرف واحد على الأقل؛ الرمز الخاص يتكون من مسافة واحدة. الاسم حساس لحالة الأحرف. | ||
| ريم | 0 | التذييل: مساحة غير مستخدمة إذا لزم الأمر للسجلات ذات الحجم الثابت؛ يجب ملؤها بالأصفار. غير مطلوبة في السجلات ذات الطول المتغير. | |||
استمرار
في حالة السجلات ذات الطول الثابت حيث يتطلب الاسم سجلات متابعة، يتم استخدام ما يلي:
| بايت (بايتات) | مقاس | مجال | قيمة | غاية | |
|---|---|---|---|---|---|
| 0-2 | 3 | بي تي في | X'030200' | سجل استمرار ESD بدون أي استمرارات أخرى | |
| X'030300' | سجل استمرار ESD الذي يتم استكماله في السجل التالي | ||||
| 3- | اسم | نص | بقية الاسم إذا لم يتم استكمال هذا السجل، أو الـ 77 بايت التالية من الاسم إذا تم استكماله. | ||
| ريم | 0 | باقي السجل ذي الطول الثابت الأطول من البيانات المُدخلة. يحتوي على البايتات الأخيرة إذا كان هذا آخر سجل لهذا الاسم وكان الاسم أقصر من حجم السجل؛ يجب أن يكون فارغًا (أصفار). هذا الحقل غير موجود في السجلات ذات الطول المتغير. | |||
السمات السلوكية
| إزاحة | الحجم (بايت) | أجزاء | مجال | قيمة | غاية | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | خصائص معالجة العناوين | نمط العنونة المرتبط بهذا الرمز الخارجي. تُستخدم هذه القيم أيضًا بواسطة حقل AMODE في سجل END . | |||||||
| ٠٠ | لم يتم تحديد وضع التشغيل (الوضع الافتراضي هو وضع التشغيل (24)) | |||||||||
| 01 | AMODE(24) | |||||||||
| 02 | AMODE(31) | |||||||||
| 03 | AMODE(ANY) (24 أو 31) | |||||||||
| 04 | AMODE(64) | |||||||||
| 10 | AMODE(MIN) (استخدم أصغر قيمة AMODE مستخدمة من قبل جميع الوحدات النمطية) | |||||||||
| 1 | 1 | العقارات السكنية | وضع الإقامة المرتبط بالرمز الخارجي | |||||||
| ٠٠ | لم يتم تحديد وضع RMODE (الوضع الافتراضي هو RMODE (24)) | |||||||||
| 01 | RMODE(24) | |||||||||
| 03 | RMODE(31) (مكافئ لـ RMODE(ANY)) | |||||||||
| 04 | RMODE(64) | |||||||||
| 2 | 1 | 0-3 (4) | نمط سجل النص | نمط النص لهذه الفئة (للفئات ED وPR فقط): يجب أن يكون نمط جميع النصوص موحدًا. | ||||||
| 0000 | موجه نحو البايت | |||||||||
| ٠٠٠١ | البيانات المنظمة (الموجهة نحو المجلدات) | |||||||||
| ٠٠١٠ | البيانات المنظمة (التي يحددها المستخدم) | |||||||||
| 4-7 (4) | خوارزمية الربط | طريقة ربط البيانات | ||||||||
| 0000 | قم بدمج جميع العناصر واحداً تلو الآخر | |||||||||
| ٠٠٠١ | دمج (ستُوضع جميع العناصر ذات الأسماء المتطابقة في نفس المساحة، باستخدام أكبر حجم مُحدد، وأكثر محاذاة تقييدًا). أما العناصر ذات الأسماء المختلفة فسيتم دمجها. هذه هي الممارسة المعتادة لأنواع CM وPR. | |||||||||
| 3 | 1 | 0-2 (3) | سلوك التكليف | مؤشر ما إذا كانت الوحدة قابلة لإعادة الدخول و/أو إعادة الاستخدام | ||||||
| ٠٠٠ | غير محدد | |||||||||
| 001 | غير قابلة لإعادة الاستخدام أو إعادة الدخول (غير قابلة لإعادة الاستخدام) | |||||||||
| 010 | قابلة لإعادة الاستخدام بشكل متسلسل (REUS) | |||||||||
| 011 | يشير مصطلح "الداخلي" (RENT) أيضاً إلى (REUS). | |||||||||
| 3 | 0 | محجوز | ||||||||
| 4 | للقراءة فقط | 0 | ليس للقراءة فقط | |||||||
| 1 | للقراءة فقط | |||||||||
| 5-7 (3) | ملف تنفيذي | ٠٠٠ | غير محدد | |||||||
| 001 | غير قابل للتنفيذ (بيانات فقط) | |||||||||
| 010 | ملف تنفيذي (كود أو كود وبيانات) | |||||||||
| 4 | 1 | 0-1 (2) | 0 | محجوز | ||||||
| 2-3 (2) | خطورة الرمز المكرر | مستوى الخطأ الذي يجب أن يسببه الرمز المكرر (سجلات من نوع PR فقط) | ||||||||
| ٠٠ | يحدد المجلد مدى شدة الحالة | |||||||||
| 01 | الحد الأدنى 4 (تحذير) | |||||||||
| 10 | الحد الأدنى 8 (خطأ) | |||||||||
| 11 | محجوز | |||||||||
| 4-7 (4) | قوة الربط | لن تبحث المراجع الضعيفة في المكتبات الأخرى؛ بينما ستبحث المراجع القوية في المكتبات الأخرى عن الرمز. يمكن حلّ التعريفات القوية إلى أي مرجع؛ وهذا هو الوضع الافتراضي. | ||||||||
| 0000 | قوي | |||||||||
| ٠٠٠١ | ضعيف | |||||||||
| 5 | 1 | 0-1 (2) | سلوك تحميل الفئات | يحدد ما إذا كان سيتم تحميل عناصر فئة ما في حالة استخدام طلب تحميل نظام التشغيل فيما يتعلق بكائن ما | ||||||
| ٠٠ | تحميل - تحميل هذه الفئة | |||||||||
| 01 | التحميل المؤجل - من المحتمل استخدام هذه الفئة ويجب تحميلها | |||||||||
| 10 | NOLOAD - لا تقم بتحميل هذه الفئة | |||||||||
| 11 | محجوز | |||||||||
| 2 | العلم المشترك | إذا كانت القيمة 1، فسيتم التعامل معها كنوع CM-type COMMON "قديم" حيث تحدد المراجع المتعددة الحجم لأكبر مساحة مستخدمة من قبل أي مرجع. سيحتفظ نوع SD الذي يحمل نفس الاسم بالحجم والنص. نوع النص الوحيد المدعوم لهذا هو B_TEXT. | ||||||||
| 3 | الإحالة المباشرة مقابل الإحالة غير المباشرة | 0 | المراجع المباشرة (لأغراض المجلد) | |||||||
| 1 | بالنسبة لنوع PR، هذا وصف للارتباط؛ أما بالنسبة لنوع ER، فهذا مرجع إلى وصف ارتباط XPLINK | |||||||||
| 4-7 (4) | نطاق الربط | 0000 | غير محدد | |||||||
| ٠٠٠١ | نطاق القسم ("محلي") | |||||||||
| ٠٠١٠ | نطاق الوحدة ("عام") | |||||||||
| 0011 | نطاق المكتبة | |||||||||
| 0100 | نطاق الاستيراد والتصدير | |||||||||
| 6 | 1 | 0-1 (2) | محجوز | |||||||
| 2 | نوع الربط | بالنسبة لأنواع ER وLD وPD وPR | ||||||||
| 0 | الربط القياسي لنظام التشغيل (الافتراضي) | |||||||||
| 1 | وصلة XPLINK | |||||||||
| 3-7 (5) | تنسيق | التوافق الضمني لهذا العنصر | ||||||||
| 00000 | بايت | |||||||||
| 00001 | نصف كلمة | |||||||||
| ٠٠٠١٠ | الكلمة الكاملة | |||||||||
| ٠٠٠١١ | كلمة مزدوجة | |||||||||
| ٠٠١٠٠ | كلمة رباعية | |||||||||
| 00101 | صفحة بحجم 4 كيلوبايت | |||||||||
| جميع المحاذاة المعروضة متاحة لنوعي ED وPR باستثناء PR، حيث لا يمكن استخدام محاذاة الصفحة. | ||||||||||
| 7-9 | 3 | محجوز | ||||||||
سجلات ADATA
تُستخدم سجلات ADATA ("البيانات المرتبطة") لتوفير معلومات إضافية عن الرموز الخاصة بالوحدة. وقد حلت محل سجلات SYM القديمة في تنسيق ملف كائن 360. لإنشاء سجل ADATA
- أنشئ سجل ESD من النوع ED لاسم الفئة التي تنتمي إليها السجلات
- قم بتعيين جميع الحقول في سجل السمات السلوكية إلى 0 باستثناء
- تحميل الفئة (البتات 0-1 من البايت 5) هو X'10'
- خوارزمية الربط هي 0
- نمط سجل النص (البتات من 0 إلى 3 من البايت 2) هو X'0010'
- يمكنك اختيارياً تعيين قيمتي "للقراءة فقط" (البت 4 من البايت 3) و "غير قابل للتنفيذ" (البتات 5-7 من البايت 3) إذا لزم الأمر.
- أنشئ سجل TXT لكل عنصر من عناصر ADATA
- يمثل العنصر ESDID قيمة سجل ADATA ED لإدخال ADATA المحدد هذا
- الإزاحة صفر
- طول البيانات هو طول سجل ADATA
- يحتوي حقل البيانات على سجل ADATA الفعلي نفسه
سيتم إلحاق سجلات ADATA بنهاية الفئة بالترتيب الذي تم الإعلان عنها به.
يتم ترجمة أسماء الفئات المخصصة لسجلات ADATA بواسطة برامج IBM عن طريق تحويل القيمة الثنائية إلى نص وإلحاقها بالاسم C_ADATA ، لذا فإن العنصر المرقم X'0033' سيصبح سلسلة النص C_ADATA0033 .
| يكتب | وصف |
| X'0000' - X'7FFF' | سجلات المترجم (لاحظ أن بعض القيم في النطاق 0-X'0130' مستخدمة بواسطة بعض منتجات مترجم لغة IBM بما في ذلك Assembler و Cobol و PL/I ). |
| X'8000' - X'8FFF' | سجلات إدارة البرامج |
| X'9000' - X'DFFF' | محجوز |
| X'E000' - X'EFFF' | مخصص للمترجمات والمجمعات التي لم تصدرها شركة IBM. |
| X'F000' - X'FFFF' | متاح لسجلات المستخدم. لن تستخدم شركة IBM هذه القيم. |
رسالة قصيرة
تُحدد سجلات TXT تعليمات لغة الآلة والبيانات التي سيتم وضعها في موقع عنوان محدد في الوحدة. لاحظ أنه أينما يجب تحديد "طول" لهذا السجل، يجب أن تشمل قيمة الطول أي امتدادات لهذا السجل.
| بايت (بايتات) | مقاس | مجال | أجزاء | قيمة | غاية | |
|---|---|---|---|---|---|---|
| 0-2 | 3 | بي تي في | X'031000' | سجل نصي بدون أي استمرارات | ||
| X'031100' | يتم استكمال التسجيل النصي في التسجيل التالي | |||||
| 3 | 1 | 0-3 (4) | محجوز | |||
| أسلوب | 4-7 (4) | جميع القيم الأخرى محجوزة | ||||
| 0000 | البيانات الموجهة بالبايت | |||||
| ٠٠٠١ | البيانات المهيكلة (حالياً، البيانات المهيكلة الوحيدة المدعومة هي حقول IDR ذات 19 بايت؛ انظر جدول بيانات IDR ) | |||||
| ٠٠١٠ | البيانات غير المهيكلة | |||||
| 4-7 | 4 | عنصر ESDID | العدد الثنائي | ESDID أن محتويات هذا السجل تخص | ||
| 8-11 | 4 | محجوز | ||||
| 12-15 | 4 | إزاحة | العنوان الثنائي | العنوان ضمن ESDID حيث سيتم وضع هذه البيانات. يجب أن يكون هذا العنوان 0 للبيانات المهيكلة وغير المهيكلة. | ||
| 16-19 | 4 | حقل نصي بطول حقيقي | القيمة الثنائية: 0 أو الحجم الكامل بعد التوسيع | إذا كانت قيمة حقل ترميز النص تساوي 0، فيجب أن تكون هذه القيمة 0 أيضًا. وإلا، فإن هذا الحقل يمثل الحجم الكامل للنص بعد فك الضغط أو فك التغليف. | ||
| 20-21 | 2 | ترميز النص | القيمة الثنائية | 0 إذا كان النص لا يتطلب نسخًا أو فك ضغط أو فك تشفير؛ قيمة غير صفرية للإشارة إلى أنه يجب فك تشفير النص أو فك ضغطه أو توسيعه؛ انظر جدول الضغط | ||
| 22-23 | 2 | طول البيانات | قيمة ثنائية أكبر من الصفر | الطول الإجمالي للبيانات في هذا السجل بالبايت كقيمة غير موقعة، ولا يمكن أن يكون صفرًا، ومع ذلك، قد يكون هذا غير صحيح جزئيًا، كما هو مذكور أدناه في قسم التحذير . | ||
| 24- | بيانات | يُراد إدخال رمز الآلة و/أو البيانات. في حال تضمين بيانات IDR، فإنها تخضع لقواعد ومتطلبات خاصة، انظر جدول بيانات IDR. | ||||
| ريم | غير موجود للسجلات ذات الطول المتغير؛ بايتات متبقية للسجلات ذات الطول الثابت الأطول من البيانات المتبقية، ويجب أن تكون أصفارًا ثنائية. | |||||
حذر
قد يكون طول البيانات بالبايتين 22-23، كونه قيمة غير مُوقّعة، غير صحيح. وفقًا للتعليقات الواردة في جزء مُولّد GOFF من مجموعة مُجمّع LLVM ،
- "الحد الأقصى لعدد البايتات التي يمكن تضمينها في سجل RLD أو TXT وتتابعاته هو عدد صحيح مُوقّع من 16 بت، بغض النظر عما تنص عليه المواصفات. وبالتالي، فإن عدد البايتات التي نسمح لأنفسنا بإرفاقها ببطاقة محدود بشكل تعسفي إلى 32 كيلوبايت - 1 بايت." [ 7 ]
استمرار
| بايت (بايتات) | مقاس | مجال | أجزاء | قيمة | غاية | |
|---|---|---|---|---|---|---|
| 0-2 | 3 | بي تي في | X'031200' | سجل استمرار بدون أي استمرارات أخرى | ||
| X'031300' | سجل المتابعة الذي يستمر في السجل التالي | |||||
| 3- | البيانات مأخوذة من السجل السابق | |||||
| ريم | إذا كان الجزء المتبقي من السجل أطول من البيانات؛ يتم ملء البيانات بالأصفار | |||||
طاولة الضغط
يُستخدم جدول ضغط إذا كانت البايتات 20-21 من سجل TXT غير صفرية. تُستخدم قيمة R لتحديد عدد مرات تكرار السلسلة، بينما تشير قيمة L إلى طول النص المراد تكراره "R" مرة. يمكن استخدام هذا الجدول لتهيئة الجداول أو المصفوفات مسبقًا بقيم فارغة أو أصفار، أو لأي غرض آخر يكون فيه من المفيد التعبير عن البيانات المتكررة كعدد مرات تكرار وقيمة.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية | |
|---|---|---|---|---|---|
| إذا كانت القيمة في البايتات 20-21 من سجل TXT هذا هي 0001 | |||||
| 0-1 | 2 | R | عدد التكرارات، وهو عدد صحيح غير مُوقّع أكبر من 0 | عدد مرات تكرار السلسلة بدءًا من البايت 4. | |
| 2-3 | 2 | L | الطول الثنائي، وهو عدد صحيح غير مُوَقَّع أكبر من 0 | طول السلسلة بدءًا من البايت 4 | |
| 4- | خيط | السلسلة، التي يبلغ طولها "L" والتي سيتم تكرارها "R" مرة. | |||
| جميع القيم الأخرى للبايتات 20-21 محجوزة | |||||
جدول بيانات IDR
يحدد جدول IDR، الموجود بدءًا من البايت 24 من سجل TXT، المترجم أو المجمع (ورقم إصداره) الذي أنشأ ملف الكائن هذا.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية | |
|---|---|---|---|---|---|
| 0 | 1 | x'00' | محجوز | ||
| 1 | 1 | يكتب | نوع حقل IDR (لاحظ أن التعريف الأساسي والتعريف الثانوي يشيران إلى حقلي التعريف الأول والثاني، على التوالي، اللذين يظهران على بطاقة النهاية في تنسيق ملف وحدة كائنات OS/360 السابق). | ||
| ٠٠ | التعريف الأساسي؛ تنسيق IDR القديم 1 | ||||
| 01 | التعريف الثانوي؛ تنسيق IDR القديم 1 | ||||
| 02 | التعريف الموسع؛ صيغة IDR 2 | ||||
| 03 | التعريف الأساسي؛ صيغة IDR 3 | ||||
| 04 | التعريف الثانوي؛ صيغة IDR 3 | ||||
| 2-3 | 2 | طول | العدد الثنائي | طول بيانات IDR كعدد صحيح غير مُوقّع أكبر من الصفر | |
| 4+ | بيانات IDR وفقًا للتنسيق المحدد في البايت 1 من هذا الحقل؛ راجع جدول تنسيق IDR المناسب لمزيد من التفاصيل | ||||
صيغة IDR 1
لاحظ أنه على عكس معظم القيم الرقمية المخزنة في ملف GOFF، فإن قيم "version" و"release" و"trans_date" هي أرقام كأحرف نصية وليست ثنائية.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية |
|---|---|---|---|---|
| 0-9 | 10 | مترجم | أي نص | هذه القيمة هي ما يُعرّف به المُجمِّع أو المُترجم نفسه؛ تُطلق IBM على هذا اسم "قيمة PID" أو "قيمة مُعرِّف البرنامج" من أرقام كتالوج IBM للبرامج المختلفة، على سبيل المثال، يُطلق على مُترجم Cobol لنظام التشغيل OS/VS1 اسم "IKFCBL00". |
| 10-11 | 2 | إصدار | رقمان | هذا هو رقم إصدار المجمع أو المترجم، من 0 إلى 99. |
| 12-13 | 2 | يطلق | رقمان | هذا هو الجزء الفرعي من رقم الإصدار المذكور أعلاه، ويتراوح أيضًا من 0 إلى 99 |
| 14-18 | 5 | تاريخ المعاملة | YYDDD | خمسة أحرف نصية تشير إلى السنة المكونة من رقمين، واليوم المكون من ثلاثة أرقام من السنة التي تم فيها تجميع هذه الوحدة؛ يُفترض أن السنوات من 01 إلى 65 تقع في القرن الحادي والعشرين، بينما يُفترض أن السنة 00 أو السنوات الأكبر من 65 تقع في القرن العشرين، على سبيل المثال 2000 أو 1966-1999. يبدأ اليوم المكون من ثلاثة أرقام من 001 ليوم 1 يناير؛ و032 ليوم 1 فبراير؛ و060 ليوم 1 مارس في السنوات العادية و29 فبراير في السنوات الكبيسة؛ ويستمر حتى 365 ليوم 31 ديسمبر في السنوات العادية و366 للسنوات الكبيسة. |
صيغة IDR 2
عادةً لا تقوم المترجمات والمجمعات بإنشاء سجل التنسيق هذا، بل يتم إنشاؤه عادةً بواسطة الرابط.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية |
|---|---|---|---|---|
| 0-3 | 4 | تاريخ | الصيغة العشرية المعبأة YYYYDDDF | تم تجميع أو تجميع وحدة التاريخ، مع السنة واليوم من السنة |
| 4-5 | 2 | طول البيانات | القيمة الثنائية | الطول الفعلي للحقل التالي، قيمة غير صفرية وغير موقعة |
| 6-85 | 80 | بيانات IDR | لم يتم الكشف عن تنسيق هذه البيانات. | |
صيغة IDR 3
جميع النصوص في هذا العنصر عبارة عن بيانات حرفية؛ ولا يتم استخدام أي معلومات ثنائية.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية |
|---|---|---|---|---|
| 0-9 | 10 | مترجم | أي قيمة نصية يرغب كاتب المترجم/المجمع في استخدامها لتعريف نفسه (انظر حقل المترجم في تنسيق IDR القديم 1 أعلاه). | |
| 10-11 | 2 | إصدار | من 00 إلى 99 | رقم إصدار المُجمِّع أو المُترجم |
| 12-13 | 2 | يطلق | من 00 إلى 99 | رقم إصدار النسخة المذكورة أعلاه |
| 14=20 | 7 | تاريخ التجميع | YYYYDDD | السنة واليوم من السنة التي تم فيها تجميع البرنامج أو تجميعه (سيكون هذا هو نفس تنسيق حقل "تاريخ المعاملة" من تنسيق IDR 1 أعلاه، باستثناء أن السنة هي سنة كاملة مكونة من 4 أرقام). |
| 21-29 | 9 | وقت الترجمة | هممم | الساعة والدقيقة والثانية وجزء من ألف من الثانية التي تم فيها تجميع البرنامج أو تأليفه |
RLD
تسمح سجلات RLD للوحدة النمطية بإظهار مكان إشارتها إلى عنوان يجب نقله، مثل الإشارات إلى مواقع محددة في نفسها، أو إلى وحدات نمطية خارجية.
| بايت (بايتات) | مقاس | مجال | قيمة | غاية |
|---|---|---|---|---|
| 0-2 | 3 | بي تي في | X'032000' | لا يتم استكمال السجل |
| X'032100' | يستمر التسجيل في التسجيل التالي | |||
| 3 | 1 | محجوز | ||
| 4-5 | 2 | طول | العدد الثنائي | حجم بيانات النقل؛ عدد غير مُوقّع ويجب أن يكون أكبر من الصفر |
| 6- | بيانات النقل | بيانات النقل؛ انظر جدول بيانات النقل | ||
| ريم | غير موجود في السجلات ذات الأطوال المتغيرة؛ يجب ملء الجزء المتبقي من السجل، حيث يكون السجل أطول من البيانات، بأصفار. | |||
بيانات النقل
| بايت (بايتات) | مقاس | مجال | قيمة | غاية |
|---|---|---|---|---|
| 0-5 | 6 | الأعلام | ملاحظات متعلقة بهذا الإدخال؛ راجع جدول الملاحظات للاطلاع على القيم | |
| 6-7 | 2 | محجوز | ||
| 8-11 | 4 | R_Pointer | معرف ESDID الخاص بالوحدة (من النوع ED أو ER) لاستخدامه كهدف لإعادة التوطين | هذا هو العنوان "البعيد"، سواء في نفس الوحدة أو في وحدة أخرى، الذي يحتاج البرنامج إلى تحديده. يتم حذف هذا الحقل إذا كانت البتة 0 من البايت 0 في حقل Flags تساوي 1. |
| 12-15 [أ] | 4 | P_Pointer | معرف ESDID للوحدة التي تتطلب نقل العنوان | هذه هي الوحدة التي تريد تغيير مرجعها إلى مُعرِّف بعيد إلى القيمة الصحيحة. يتم حذف هذا الحقل إذا كانت البتة 1 من البايت 0 لحقل Flags تساوي 1. |
| 16-19 [ب] | 4 | إزاحة | الموقع داخل الوحدة المحدد بواسطة P_Pointer حيث يوجد العنوان المراد تعديله. | هذا هو العنوان المراد نقله. يتم حذف هذا الحقل إذا كانت البتة الثانية من البايت 0 في حقل Flags تساوي 1. |
| 20-23 [ج] | 4 | محجوز | ||
| 24-27 [ج] | 4 | محجوز | ||
[أ] إذا تم حذفR_Pointer (البت 0 من البايت 0 من حقل Flags يساوي 1)، يبدأ هذا الحقل من 8 إلى 11 بايتًا. [ب] إذا تم حذف R_Pointer أو P_Pointer (البت 1 من البايت 0 من حقل Flags يساوي 1)، يبدأ هذا الحقل من 12 إلى 15 بايتًا. إذاتم حذف كلا الحقلين، يبدأ هذا الحقل من 8 بايتات، من 8 إلى 11 بايتًا. [ج] إذا تم حذف R_Pointer أو P_Pointer أو Offset (البت 2 من البايت 0 من حقل Flags يساوي 1)، يبدأ هذا الحقل من 4 بايتات. إذا تم حذف أي اثنين منها، يبدأ هذا الحقل من 8 بايتات. إذاتم حذفها جميعًا ، يبدأ هذا الحقل من 12 بايتًا.
للتوضيح، إذا استدعى برنامج مكتوب بلغة C باسم "Basura" الدالة "exit" لإنهاء نفسه، فسيكون عنوان R_Pointer هو ESDID الخاص بالدالة "exit"، بينما سيكون P_Pointer هو ESDID الخاص بالدالة "Basura". أما إذا كان العنوان ضمن نفس البرنامج (مثل البرامج الفرعية الداخلية، أو مرجعًا لبيانات داخل نفس البرنامج)، فسيكون R_Pointer وP_Pointer متطابقين.
الأعلام
| بايت (بايتات) | مقاس | مجال | أجزاء | غاية |
|---|---|---|---|---|
| 0 | 1 | Same_R_ID | 0 | 1 إذا كانت قيمة R_Pointer لهذا الإدخال هي نفسها قيمة العنصر السابق في هذا السجل؛ إذا كان الأمر كذلك، فسيتم حذف قيمة R_Pointer من هذا الإدخال. |
| Same_P_ID | 1 | 1 إذا كانت قيمة P_Pointer لهذا الإدخال هي نفسها قيمة العنصر السابق في هذا السجل؛ إذا كان الأمر كذلك، فسيتم حذف قيمة P_Pointer من هذا الإدخال. | ||
| نفس_الإزاحة | 2 | 1 إذا كانت قيمة الإزاحة لهذا الإدخال هي نفسها قيمة العنصر السابق في هذا السجل؛ إذا كان الأمر كذلك، فسيتم حذف قيمة الإزاحة من هذا الإدخال. | ||
| 3-4 | محجوز | |||
| 5 | محجوز | |||
| طول الإزاحة | 6 | 0 للإشارة إلى طول 4 بايت | ||
| معالجة حساسية الوضع | 7 | 0 لا حساسية | ||
| 1. اضبط البتات العليا للعنوان لتكون مماثلة لوضع عنونة R الخاص بعنوان R_Pointer (ينطبق فقط على عناوين النوع V) | ||||
| 1 | 1 | مؤشرات R_Pointer_Indicators | 0-3 | نوع بيانات المعامل الثاني لعنوان النقل |
| 0 - عنوان R | ||||
| 1 - الإزاحة من بداية عنوان R | ||||
| 2 - طول R (0 للعناصر LD) | ||||
| 6- فوري نسبيًا (للسماح للتعليمات بالتعامل مع الرموز الخارجية) | ||||
| 7 - ثابت R (منطقة بيانات غير مشتركة) | ||||
| عنوان إزاحة طويل من 9 إلى 20 بت | ||||
| جميع القيم الأخرى محجوزة | ||||
| 4-7 | نوع العنصر الذي يشير إلى القيمة التي يجب نقلها. | |||
| 0 - الملصق، R-ID يقتصر على LD | ||||
| 1- العنصر، R-ID يقتصر على ED | ||||
| 2- يقتصر استخدام معرف الفصل (R-ID) على التعليم الإلكتروني (ED)؛ ولا تمتلك الفصول أسماء خارجية، لذا فهي لا تمتلك معرفًا إلكترونيًا (ESDID). | ||||
| 3- الجزء، R-ID يقتصر على العلاقات العامة | ||||
| جميع القيم الأخرى محجوزة | ||||
| 2 | 1 | الإجراء أو العملية | 0-6 | نوع العملية المستخدمة مع المعامل الثاني (المعامل الأول سيكون 0)، والنتيجة هي قيمة موقعة من 32 بت تحل محل المعامل الأول. |
| 0 - أضف المعامل الثاني إلى المعامل الأول | ||||
| 1- اطرح المعامل الثاني من المعامل الأول | ||||
| جميع القيم الأخرى محجوزة | ||||
| إصلاح جلب/تخزين الهدف | 7 | يشير إلى ما إذا كان سيتم استخدام القيمة المستهدفة أو تجاهلها | ||
| 0 - استخدم حقل fixup/target كمعامل أول | ||||
| 1- تجاهل قيمة الحقل المستهدف، واستخدم قيمة التصحيح كمعامل أول؛ إذا لم تكن هناك قيمة تصحيح، فاستخدم 0 | ||||
| 3 | 1 | محجوز | ||
| 4 | 1 | طول الهدف | طول الحقل المستهدف غير المُوقّع بالبايت | |
| 5 | 1 | محجوز | ||
لين
تُستخدم سجلات LEN للإعلان عن طول الوحدة النمطية عندما لم يكن معروفًا في وقت إنشاء سجل ESD، على سبيل المثال بالنسبة للمترجمات ذات المرور الواحد.
| مجال | إزاحة | مقاس | وصف |
| بي تي في | 0-2 | 3 | نوع السجل X'033000' |
| 3-5 | 3 | محجوز | |
| طول | 6-7 | 2 | طول العناصر التي تلي هذا الحقل؛ يجب أن تكون القيمة غير صفرية. |
| عناصر | 8- | بيانات طول العنصر؛ انظر جدول العناصر أدناه | |
| ريم | يجب أن تحتوي البيانات اللاحقة حتى نهاية السجل بالنسبة للسجلات ذات الطول الثابت على أصفار ثنائية؛ وهي غير موجودة بالنسبة للسجلات ذات الطول المتغير. |
عناصر
لا يمكن استكمال أو تقسيم عنصر ذي طول مؤجل
| مجال | إزاحة | مقاس | وصف |
| معرف الخدمة الإلكترونية | 0-3 | 4 | معرف ESDID للعنصر الذي تنطبق عليه هذه القيمة |
| 4-7 | 4 | محجوز | |
| طول | 8-11 | 4 | طول العنصر المشار إليه |
نهاية
يجب أن يكون END هو السجل الأخير للوحدة. تُستخدم "نقطة الدخول" عندما يُراد استخدام عنوان غير بداية الوحدة كنقطة بدء لتنفيذها. قد يُستخدم هذا لأن البرنامج يحتوي على بيانات غير قابلة للتنفيذ تظهر قبل بداية الوحدة (وهذا شائع جدًا لدى مبرمجي لغة التجميع القدامى، حيث كانت الإصدارات القديمة من المُجمِّع أبطأ بكثير في تجميع البيانات المخزنة في البرامج بمجرد تحديد التعليمات).
| مجال | إزاحة | مقاس | أجزاء | وصف |
| بي تي في | 0-2 | 3 | X'034000' - غير مكتمل | |
| X'034100' - يتبع في السجل التالي | ||||
| 3 | 0-5 | 6 | محجوز | |
| الأعلام | 6-7 | 2 | بيانات تتعلق بوجود أو عدم وجود نقطة دخول | |
| ٠٠ - لم يتم تحديد نقطة دخول؛ جميع القيم الأخرى في هذا السجل غير صالحة | ||||
| 01 - نقطة الدخول المحددة بواسطة ESDID | ||||
| 10- نقطة الدخول المحددة بالاسم | ||||
| 11 - محجوز | ||||
| وضع | 4 | 1 | قيمة وضع المعالجة لنقطة الدخول؛ القيم كما هو محدد في الحقل 0 من جدول سمات السلوك في سجل ESD . | |
| 5-7 | 3 | محجوز | ||
| عدد السجلات | 8-11 | 4 | عدد سجلات GOFF في هذه الوحدة (هذا هو عدد السجلات "المنطقية"، أي لا يتم احتساب الاستمراريات) | |
| معرف الخدمة الإلكترونية | 12-15 | 4 | قيمة ESDID إذا تمت الإشارة إلى نقطة الدخول بواسطة ESDID؛ صفر ثنائي إذا تمت الإشارة إليها بالاسم | |
| 16-19 | 4 | محجوز | ||
| إزاحة | 20-23 | 4 | إزاحة عنوان نقطة دخول الوحدة؛ لا يمكن تحديد ذلك لنقطة دخول خارجية (ER). | |
| وقت الاسم | 24-25 | 2 | طول الاسم، يجب أن يكون هذا صفرًا إذا تم تحديد نقطة الدخول بواسطة ESDID. | |
| اسم | 26- | اسم الرمز الخارجي المستخدم كنقطة دخول لهذه الوحدة؛ وهو عبارة عن أصفار ثنائية إذا تم تحديد نقطة الدخول بواسطة ESDID؛ إذا استمر هذا السجل، فسيكون هذا هو أول 54 حرفًا من الاسم. هذه هي القيمة الوحيدة غير الثنائية في السجل؛ وستكون حقلًا نصيًا يمثل الاسم العام لنقطة الدخول. | ||
| ريم | تذييل يمتد إلى نهاية السجل؛ يجب أن يكون أصفارًا ثنائية حتى نهاية السجل للسجلات ذات الطول الثابت؛ يُحذف للسجلات ذات الطول المتغير |
استمرار
إذا كان اسم نقطة الدخول المحدد في سجل END ذي الطول الثابت أطول من 54 بايت أو (إذا استمر هذا السجل نفسه أيضًا) أطول من 77 بايت إضافية)، فسيتم استخدام سجل الاستمرار التالي.
| مجال | إزاحة | مقاس | وصف |
| بي تي في | 0-2 | 3 | X'034200' - هذا السجل التكميلي غير مستمر |
| X'034300' - يستمر هذا السجل التكميلي نفسه في السجل التالي | |||
| اسم | 3- | الجزء المتبقي من اسم نقطة الدخول، ما لم يتم استكمال هذا السجل، وفي هذه الحالة يكون الجزء المتبقي هو الأحرف الـ 77 التالية من الاسم. | |
| ريم | إذا لم يتم استكمال هذا السجل، فهذا هو الجزء الأخير من السجل بالنسبة للسجلات ذات الطول الثابت، ويجب أن يكون عبارة عن أصفار ثنائية؛ وهو غير موجود بالنسبة للسجلات ذات الطول المتغير | ||
ملحوظات
- ↑ يختلف هذا الاستخدام عن استخدام IBM، حيث قد تحتوي وحدة الكائن (وحدة التجميع) على إجراءات فرعية متعددة، وما إلى ذلك، وقد تحتوي وحدة التحميل على إجراءات فرعية، وما إلى ذلك، من وحدات كائن متعددة.
مراجع
- ↑ جون ر. إيرمان (1 مارس 2001). "كيف يعمل محرر الربط: دليل تعليمي حول وحدات Object/Load، ومحررات الربط، والمحملات، ووظائفها لك" (ملف PDF) . خادم FTP . مختبر IBM وادي السيليكون (سانتا تيريزا)، سان خوسيه . تم الاطلاع عليه في 8 سبتمبر 2019 .(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
- ↑ "الملحق ج. تنسيق ملف الكائن المعمم (GOFF)" (ملف PDF) . إدارة برنامج MVS: المرافق المتقدمة (ملف PDF) . z/OS ( الطبعة الثامنة). بوكيبسي، نيويورك: IBM . سبتمبر 2007. الصفحات 205-240 . SA22-7644-07. مؤرشف من الأصل (ملف PDF) في 19 أكتوبر 2021. تم الاطلاع عليه في 9 أغسطس 2013 .
- ↑ دليل عرض IBM High Level Assembler لأنظمة MVS وVM وVSE الإصدار 2 (ملف PDF) . ديسمبر 1995. SG24-3910-01. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 23 يناير 2016. تم الاطلاع عليه بتاريخ 13 نوفمبر 2015 .
- ↑ دليل مبرمج لغة التجميع عالية المستوى لأنظمة z/OS و z/VM و z/VSE (ملف PDF) (الطبعة السادسة ). سان خوسيه، كاليفورنيا: شركة IBM. يوليو 2008. الملحق ج. SC26-4941-05 . تاريخ الاطلاع: 8 سبتمبر 2019 .
- ↑ "RLD" . www.ibm.com . شركة IBM. 16 أغسطس 2013. تم الاطلاع عليه بتاريخ 10 يوليو 2020 .
- ↑ "Lp64 | Ilp32" . IBM .
- ↑ "llvm/BinaryFormat/GOFF.h - تعريفات GOFF" . LLVM.ORG . تم الاطلاع عليه بتاريخ 16 أغسطس 2024 .
- تنسيقات الملفات القابلة للتنفيذ
- أنظمة تشغيل الحواسيب المركزية من IBM
