مجموعة التعليمات المضغوطة
مجموعة التعليمات المضغوطة ، أو ببساطة التعليمات المضغوطة ، هي شكلٌ مُعدَّل من بنية مجموعة تعليمات المعالج الدقيق (ISA)، يسمح بتمثيل التعليمات بصيغة أكثر إحكامًا. في معظم التطبيقات العملية، يبلغ طول التعليمات المضغوطة 16 بتًا في معالج يستخدم عادةً تعليمات 32 بتًا. تُعدّ بنية مجموعة التعليمات ذات 16 بتًا مجموعةً فرعيةً من بنية مجموعة التعليمات الكاملة ذات 32 بتًا، وليست مجموعة تعليمات منفصلة. تتطلب الصيغة الأصغر بعض التنازلات: عمومًا، يتوفر عدد أقل من التعليمات، ومعاملان لكل تعليمة بدلًا من ثلاثة، ويمكن استخدام عدد أقل من سجلات المعالج .
طُرح هذا المفهوم في الأصل من قِبل شركة هيتاشي كوسيلة لتحسين كثافة التعليمات البرمجية في تصميم معالج SuperH RISC الخاص بها ، وذلك عند الانتقال من تعليمات 16 بت إلى 32 بت في إصدار SH-5. احتوى التصميم الجديد على مجموعتين من التعليمات، إحداهما تتيح الوصول إلى كامل بنية مجموعة التعليمات (ISA) للتصميم الجديد، ومجموعة أصغر حجمًا من 16 بت تُعرف باسم SHcompact، والتي سمحت بتشغيل البرامج في مساحات أقل من الذاكرة الرئيسية . وبما أن ذاكرة حتى أصغر الأنظمة أصبحت الآن أكبر بكثير من ذاكرة الأنظمة التي ظهر فيها هذا المفهوم، لم يعد الحجم هو الشاغل الرئيسي. تكمن الميزة اليوم في تقليل عدد عمليات الوصول إلى الذاكرة الرئيسية، وبالتالي تقليل استهلاك الطاقة في الأجهزة المحمولة .
حصلت شركة Arm Ltd. على ترخيص براءات اختراع هيتاشي لمعالجاتها، حيث عُرفت باسم "Thumb". وتوجد أنظمة مشابهة في معالجات MIPS16e و PowerPC VLE. انتهت صلاحية براءات الاختراع الأصلية، ويمكن إيجاد هذا المفهوم في عدد من التصاميم الحديثة، بما في ذلك RISC-V ، الذي صُمم منذ البداية لاستخدامه. أدى ظهور الحوسبة 64 بت إلى انخفاض استخدام هذا المصطلح؛ إذ تستخدم هذه المعالجات عمومًا تعليمات 32 بت، وهي تقنيًا شكل من أشكال بنية مجموعة التعليمات المضغوطة، ولكن نظرًا لأنها في الغالب نسخ مُعدلة من بنية مجموعة تعليمات أقدم من إصدار 32 بت من نفس عائلة المعالجات، فلا يوجد ضغط حقيقي.
مفهوم
تُشفّر المعالجات الدقيقة تعليماتها كسلسلة من البتات ، تُقسّم عادةً إلى عدد من البايتات ، كل منها 8 بت . على سبيل المثال، في معالج MOS 6502 ، ADCتُجري التعليمة عملية جمع ثنائية بين قيمة مُعامل والقيمة المُخزّنة مُسبقًا في المُراكم . يُمكن للمعالج العثور على المُعامل في مواقع مُتعددة؛ فقد يكون موجودًا في الذاكرة الرئيسية ، أو في صفحة الصفر الخاصة ، أو قد يكون ثابتًا صريحًا مثل "10". يستخدم كل من هذه الاختلافات تعليمة مُختلفة من 8 بت، أو رمز عملية (opcode )؛ فإذا أردنا إضافة الثابت 10 إلى المُراكم، تُشفّر التعليمة في الذاكرة على النحو التالي: $69 $0A$0A، حيث يُمثل $0A القيمة الست عشرية للقيمة العشرية 10. أما إذا كانت تُضيف القيمة المُخزّنة في الذاكرة الرئيسية في الموقع $4400، فستكون التعليمة على النحو التالي: $0A $6D $00 $44، مع عنوان ذي ترتيب البايتات الصغير (little-endian ). [ 1 ]
لاحظ أن التعليمة الثانية تتطلب ثلاثة بايتات لأن عنوان الذاكرة يبلغ طوله 16 بتًا. وبحسب التعليمة، قد تستخدم بايتًا واحدًا أو اثنين أو ثلاثة. [ 1 ] يُعرف هذا الآن باسم مجموعة التعليمات ذات الطول المتغير ، مع أن هذا المصطلح لم يكن شائعًا في ذلك الوقت، إذ كانت معظم المعالجات، بما فيها الحواسيب المركزية والحواسيب الصغيرة ، تستخدم عادةً شكلًا من أشكال هذا المفهوم، ولم يكن بحاجة إلى اسم. حتى في أواخر سبعينيات القرن الماضي، عندما بدأت المعالجات الدقيقة بالانتقال من تنسيقات 8 بت إلى 16 بتًا، ظل هذا المفهوم شائعًا؛ فقد استمر معالج إنتل 8086 في استخدام رموز العمليات ذات 8 بتات، والتي يمكن أن يتبعها من صفر إلى خمسة بايتات إضافية، وذلك بحسب نمط العنونة . [ 2 ]
خلال الانتقال إلى أنظمة 32 بت، وخاصةً مع بدء هيمنة مفهوم RISC على تصميم المعالجات، بدأت التعليمات ذات الطول المتغير بالاختفاء. ففي بنية MIPS ، على سبيل المثال، تتكون جميع التعليمات من قيمة واحدة 32 بت، مع رمز عملية 6 بت في البتات الأكثر أهمية ، بينما تُستخدم البتات الـ 26 المتبقية بطرق مختلفة لتمثيل مجموعة محدودة من أنماط العنونة. وتتشابه معظم تصميمات RISC في هذا الصدد. كان الانتقال إلى تنسيق تعليمات ثابت الطول أحد المفاهيم التصميمية الرئيسية وراء أداء تصميمات RISC المبكرة؛ ففي الأنظمة ذات الطول المتغير، قد تستغرق قراءة التعليمات من دورة ذاكرة واحدة إلى ست دورات، مما يتطلب توصيلات بين أجزاء مختلفة من المنطق لضمان عدم محاولة المعالج تنفيذ التعليمات قبل جاهزية البيانات. أما في تصميمات RISC، فتستغرق العمليات عادةً دورة واحدة، مما يُبسط عملية فك التشفير بشكل كبير. ويتم توجيه التوفير الناتج عن هذه الدوائر المتشابكة إلى منطق إضافي أو إضافة سجلات للمعالج ، مما يؤثر بشكل مباشر على الأداء. [ 3 ]
كثافة الكود
من عيوب تصميم RISC أن العديد من التعليمات لا تتطلب أربعة بايتات. على سبيل المثال، تقوم تعليمة الإزاحة المنطقية لليسار بإزاحة البتات في المسجل إلى اليسار. في معالج 6502، الذي يحتوي على مسجل حسابي واحد فقط A، يمكن تمثيل هذه التعليمة بالكامل برمز العملية (opcode) المكون من 8 بتات $06. [ 1 ] أما في المعالجات ذات المسجلات الأكثر، فكل ما يلزم هو رمز العملية ورقم المسجل، أي 4 أو 5 بتات إضافية. في معالج MIPS، على سبيل المثال، تحتاج التعليمة إلى رمز عملية مكون من 6 بتات ورقم مسجل مكون من 5 بتات، ليصبح المجموع 11 بتًا. ولكن، كما هو الحال في معظم تصميمات RISC، لا تزال التعليمة تشغل 32 بتًا كاملة. ولأن هذا النوع من التعليمات شائع نسبيًا، فإن برامج RISC تشغل عمومًا ذاكرة أكبر من البرنامج نفسه على معالج ذي طول متغير. [ 4 ] [ أ ]
في ثمانينيات القرن الماضي، عندما بدأ مفهوم RISC بالظهور، كان ازدياد حجم البرنامج مصدر شكوى شائع. فمع ازدياد حجم التعليمات، كان النظام يضطر إلى قضاء وقت أطول في قراءة التعليمات من الذاكرة. وقد أشير إلى أن عمليات الوصول الإضافية هذه قد تُبطئ البرنامج. إلا أن اختبارات الأداء المكثفة أثبتت في النهاية أن RISC أسرع في جميع الحالات تقريبًا، فتلاشى هذا الجدل. ومع ذلك، لا تزال هناك حالات يُمثل فيها استخدام الذاكرة مصدر قلق بغض النظر عن الأداء، وذلك في الأنظمة الصغيرة والتطبيقات المدمجة. حتى في أوائل العقد الأول من القرن الحادي والعشرين، كان سعر ذاكرة الوصول العشوائي الديناميكية (DRAM) مرتفعًا لدرجة أن الأجهزة الحساسة للتكلفة كانت ذات ذاكرة محدودة. ولهذا السوق تحديدًا، طورت شركة هيتاشي تصميم SuperH . [ 6 ]
في تصميمات SuperH السابقة، من SH-1 إلى SH-4، كانت التعليمات تشغل دائمًا 16 بتًا. ونتيجةً لذلك، كانت مجموعة التعليمات محدودة عمليًا؛ فعلى سبيل المثال، لا يمكنها إجراء عمليات حسابية إلا بمعاملين من الشكل A = A + B، بينما كانت معظم المعالجات في ذلك الوقت تستخدم صيغة ثلاثة معاملات A = B + C. وبإزالة معامل واحد، تُزال أربعة بتات من التعليمات (حيث يوجد 16 مسجلًا، تحتاج إلى 4 بتات)، مع أن ذلك يزيد من تعقيد كتابة التعليمات الرياضية نوعًا ما. بالنسبة للأسواق المستهدفة من SuperH، كان هذا حلًا وسطًا مقبولًا. ومن المزايا المهمة لصيغة 16 بت أن ذاكرة التخزين المؤقت للتعليمات تستوعب الآن ضعف عدد التعليمات لأي مقدار معين من ذاكرة SRAM . وهذا يسمح للنظام بالعمل بسرعات أعلى، مع أن بعض هذا التعقيد قد يُخفف باستخدام تعليمات إضافية لإجراء عمليات يمكن تنفيذها بتعليمات واحدة بثلاثة معاملات. [ 7 ]
بالنسبة لمعالج SH-5، انتقلت هيتاشي إلى تنسيق تعليمات 32 بت. ولتوفير التوافق مع التصاميم السابقة، أضافت مجموعة تعليمات ثانية، SHcompact. قامت SHcompact بربط تعليمات 16 بت الأصلية باتجاه واحد مع تعليمات 32 بت الداخلية؛ ولم تكن تُنفذ تعليمات متعددة كما هو الحال في المعالجات المُبرمجة مسبقًا ، بل كانت ببساطة تنسيقًا أصغر لنفس التعليمات. سمح هذا بنقل البرامج الأصلية ذات التنسيق الصغير بسهولة إلى معالج SH-5 الجديد، مع إضافة القليل من التعقيد إلى وحدة فك تشفير التعليمات . [ 8 ]
حصلت ARM على ترخيص لعدد من براءات اختراع هيتاشي المتعلقة بجوانب تصميم التعليمات، واستخدمتها لتنفيذ تعليمات Thumb الخاصة بها. تضمنت معالجات ARM التي تحمل حرف "T" في اسمها مجموعة التعليمات هذه بالإضافة إلى إصداراتها الأصلية ذات 32 بت، وكان من الممكن التبديل بين وضع 32 بت ووضع 16 بت أثناء التشغيل باستخدام BXالأمر. في وضع Thumb، لا تظهر سوى السجلات الثمانية العليا من أصل ستة عشر سجلًا عاديًا في معالج ARM، وهي نفس السجلات الموجودة في وضع 32 بت، وبالتالي يمكن تمرير البيانات بين Thumb والتعليمات العادية باستخدام هذه السجلات. كانت كل تعليمة Thumb نظيرة لإصدار 32 بت، لذا كانت Thumb مجموعة فرعية دقيقة من مجموعة تعليمات المعالج الأصلية (ISA). [ 9 ] أحد الاختلافات الرئيسية بين نموذج ARM وSuperH هو أن Thumb يحتفظ ببعض التعليمات ذات الثلاثة معاملات بتنسيق 16 بت، وقد حقق ذلك عن طريق تقليل ملف السجلات المرئي إلى ثمانية، بحيث لا يلزم سوى 3 بتات لاختيار سجل. [ 10 ]
أضافت بنية MIPS أيضًا مجموعة مضغوطة مماثلة في معالج MIPS16e، وهي مشابهة جدًا لبنية Thumb. تسمح هذه البنية أيضًا باستخدام ثمانية سجلات فقط، مع العلم أنها ليست السجلات الثمانية الأولى فقط؛ إذ يستخدم تصميم MIPS السجل 0 كسجل الصفر ، وبالتالي يتم تعيين السجلين 0 و1 في وضع 16 بت إلى السجلين 16 و17 في معالج MIPS32. معظم تفاصيل النظام الأخرى مشابهة لبنية Thumb. [ 11 ] وبالمثل، يتضمن أحدث إصدار من بنية Power ISA ، المعروفة سابقًا باسم PowerPC ، تعليمات "VLE" المتطابقة تقريبًا. أُضيفت هذه التعليمات بناءً على طلب شركة Freescale Semiconductor ، التي يتركز اهتمامها بمعالجات Power بشكل أساسي على سوق الأنظمة المدمجة. [ 12 ]
الاستخدام الحديث
ابتداءً من عام 2015 تقريبًا، انتقلت العديد من المعالجات إلى تنسيق 64 بت. احتفظت هذه المعالجات عمومًا بتنسيق تعليمات 32 بت، مع توسيع السجلات الداخلية إلى تنسيق 64 بت. وفقًا للتعريف الأصلي، تُعتبر هذه تعليمات مضغوطة، لأنها أصغر من حجم كلمة البيانات الأساسية. مع ذلك، لا يُستخدم هذا المصطلح في هذا السياق؛ إذ تشير الإشارات إلى التعليمات المضغوطة دائمًا إلى إصدارات 16 بت. [ 13 ]
ملحوظات
- ↑ يُعدّ تصميم IBM 801 استثناءً بارزًا بين تصاميم RISC، إذ يحتفظ بخمسة أنماط للتعليمات: اثنان منها بطول 16 بت، وثلاثة بطول 32 بت. أما بالنسبة للتعليمات التي تتطلب مساحة أقل، مثل تعليمات الإزاحة التي تستخدم معاملات السجلات فقط، فتُستخدم أنماط التعليمات الأقصر ذات الـ 16 بت. [ 5 ]
مراجع
الاقتباسات
- 1 2 3 فيرتس 2004 .
- ↑ "فهم معماريات ARM" . informIT . 23 أغسطس 2010.
- ↑ بيكون، جيسون. "صيغ تعليمات MIPS البرمجية" . ملاحظات محاضرات علوم الحاسوب 315. مؤرشف من الأصل بتاريخ 17 يوليو 2019. تم الاطلاع عليه بتاريخ 9 أبريل 2021 .
- ↑ ويفر وماكي 2009 .
- ↑ مبادئ تشغيل النظام 801 (ملف PDF) . شركة آي بي إم. 16 يناير 1976. الصفحات 10، 51-58 . تاريخ الاسترجاع: 11 نوفمبر 2024 .
- ↑ "تأثيرات التعليمات ذات 16 بت" . رينيساس .
- ↑ سوبر إتش 1996 .
- ↑ نواة المعالج SH-5، المجلد 1: البنية (PDF) . ص 8.
- ↑ ليميو 2004 .
- ↑ "ملخص تعليمات الإبهام" . دليل المرجع الفني لمعالج ARM7TDMI .
- ↑ دليل مرجعي تقني خاص بتطبيقات MIPS16e2 . MIPS. 26 أبريل 2016.
- ↑ Power ISA V2.07 . IBM.
- ↑ دليل ألفا للهندسة المعمارية (ملف PDF) . ديسمبر. أكتوبر 1996. ص 1.4.
فهرس
- ويفر، فينسنت؛ ماكي، سالي (2009). اعتبارات كثافة الكود للهياكل الجديدة (ملف PDF) . المؤتمر الدولي للتصميم والبرمجة 2009.
- فيرتس، ويليام (30 يناير 2004). "معالج 6502" (ملف PDF) . جامعة ماساتشوستس .
- ليميو، جو (24 سبتمبر 2004). "مقدمة إلى ARM thumb" . مضمن .
- محرك SuperH RISC SH-1/SH-2 (ملف PDF) . هيتاشي أمريكا. 3 سبتمبر 1996.
- بنى مجموعات التعليمات
- هيتاشي
