# مجموعة تعليمات

مجموعة التعليمات أو الاوامر (بالإنجليزية: Instruction set)‏ هي قائمة بجميع الأوامر المتاحة بمختلف أشكالها التي يمكن لمعالج ما (وحدة معالجة مركزية) أن ينفذها.
تتضمن هذه التعليمات:
* تعليمات حسابية: مثل تعليمات الجمع والطرح
* تعليمات منطقية: كتعليمات الضرب المنطقي AND والجمع المنطقي OR والنفي المنطقي NOT
* تعليمات نقل المعطيات: التي تقوم بنقل البيانات بين السـّـِـجــِـلاّت الداخلية للمعالج والذاكرة أو المكدس أو أجهزة الدخل والخرج
* تعليمات التحكم بسير البرنامج: كتعليمات القفز الغير المشروط والقفز المشروط وتعليمات استدعاء البرامج الفرعية والعودة منها
إن بنية مجموعة التعليمات (instruction set architecture) هي القسم من بنية الحاسب المرتبط بالبرمجة باستخدام هذه التعليمات ويشمل ذلك أنماط المعطيات المدعومة بشكل مباشر، التعليمات، السـّـِـجــِـلاّت، أنماط العنونة، تنظيم الذاكرة، المقاطعات ومعالجة الاستثناءات والدخل/الخرج مع الوسط الخارجي. وبنية مجموعة التعليمات تتضمن تفصيل لمجموعة من شيفرات التعليمات (Op-codes) وهي الأوامر الأصلية المنفذة من قبل تصميم معالجات محدد.
إن بنية مجموعة التعليمات تختلف عن البنية الميكروية (microarchitecture) والتي هي عبارة عن مجموعة من تقنيات تصميم المعالجات والمستخدمة لإنجاز وتحقيق مجموعة التعليمات. فحواسب ببنى ميكروية مختلفة يمكن أن تتشارك بمجموعة تعليمات مشتركة. على سبيل المثال معالج بنتيوم (Pentium) من إنتاج شركة إنتل (Intel) ومعالج AMD Athlon ينفذان نسختين متشابهتين إلى حد كبير من مجموعة التعليمات المسماة x86 ولكن يملكان بنية ميكروية مختلفة بشكل كبير.

## تصميم مجموعة التعليمات

عند تصميم البنى الميكروية، يستخدم المهندسون لغة مستوى نقل السجلات RTL لتعريف عمل كل تعليمة من بنية مجموعة التعليمات. تاريخياً كان هناك أربع طرق لتخزين ذلك التوصيف داخل المعالج، منها:
* جميع الحواسب الأولى وبعض حواسب مجموعة التعليمات المختزلة RISC استخدمت التوصيل المباشر لمجموعة التعليمات ضمن الكيان الصلب للمعالج وبشكل مباشر.
* العديد من مصممي المعالجات قاموا بترجمة مجموعة التعليمات إلى شيفرة صغرية (microcode) مخزن في ذاكرة للقراءة فقط ROM داخل المعالج.
* بعض مصممي المعالجات قاموا بترجمة مجموعة التعليمات وتخزينها في ذاكرة وصول عشوائي RAM أو ذاكرة وميضية Flash داخل المعالج أو داخل مصفوفة البوابات المنطقية القابلة للبرمجة FPGA (دارات منطقية قابلة لإعادة البرمجة)
مجموعة التعليمات يمكن أيضاً أن تحاكى بواسطة البرمجيات باستخدام برنامج يدعى بالمفسر. ونظراً للترجمة الإضافية المطلوبة للمحاكاة فهذه العملية تكون عادة أبطأ من تنفيذ البرامج بشكل مباشر على العتاد الذي يحقق مجموعة التعليمات تلك. في الوقت الراهن من الشائع لمصنعي بنى مجموعة تعليمات جديدة أو بنى ميكروية جديدة أن ينتجوا برامج محاكاة واتاحتها لمطوري البرمجيات قبل أن يجهز التحقيق المادي لهذه البنية.

### كثافة الشيفرة وتصنيف مجموعات التعليمات

في الحواسب الأولى ذاكرة تخزين البرنامج كانت باهظة ومحدودة، وتصغير حجم ذاكرة البرنامج كان أمراً مهماً، أي إن كثافة الشيفرة (الحجم الكلي للتعليمات المطلوبة من أجل تنفيذ مهمة محددة) كانت صفة هامة لمجموعة التعليمات. مجموعات التعليمات التي تملك كثافة شيفرة مرتفعة توظف تعليمات قوية التي تقوم ضمنياً بالعديد من العلميات دفعة واحدة. إن بنى حواسب مجموعة التعليمات المعقدة CISC تملك تعليمات تجمع عملية بسيطة أو اثنتين (مثل الجمع والضرب واستدعاء التوابع الفرعية) مع تعليمات ضمنية للوصول إلى الذاكرة أو زيادة قيم السجلات بعد الاستخدام، تتبع المواقع المؤشر إليها والمخزنة في المجسلات أو الذاكرة (الوصول غير المباشر للمعاملات). في المقابل فإن بنى حواسب مجموعة التعليمات المختزلة RISC فقد استخدمت مجموعة تعليمات أبسط وأسرع على حساب الخفض من كثافة الشيفرة (بمعنى استخدام مساحة ذاكرة أكبر للبرنامج الذي ينفذ مهمة ما). حواسب مجموعة التعليمات الأقل MISC هي شكل من آلات المكدس، والتي يوجد فيها عدد قليل من التعليمات المستقلة وبالتالي يمكن لكلمة واحدة من كلمات الآلة أن تتسع عدة تعليمات معاً. وهذه الأنماط من النوى تستهلك القليل من السيليكون لتنفيذها لذا يمكن بسهولة وضعها في مصفوفة بوابات منطقية قابلة للبرمجة FPGA أو بشكل متعدد النوى. وهنا تكون كثافة الشيفرة مشابهة لحالة حواسب التعليمات المختزلة RISC.
يمكن تصنيف مجموعة التعليمات وفق عدد المعاملات الموجودة في أعقد تعليماتها، وللتوضيح نقدم هنا بعض الأمثلة، في الأمثلة التالية نعتبر a وb وc عناوين ذاكرة، وreg1 وreg2 وreg3 تشير إلى ســِـجــِـلاّت داخل المعالج.
* مجموعة تعليمات ذات صفر معاملاً (الآلات عديمة العناوين): والتي تدعى أيضاً آلات المكدس، وفيها كل العمليات تنفذ باستخدام القيمة أو القيمتين الموجودتين في أعلى المكدس. فجمع عددين يتم بالشكل:
push a، push b، add، pop c
* مجموعة التعليمات وحيدة المعامل: هذا النموذج كان شائعا في الحواسب الأولى، وكل تعليمة تنفذ عملها باستخدام معامل واحد وتضع الناتج في ســِـجــِـل ّ يسمى المراكم.
فلجمع عددين نستخدم التعليمات: load a، add b، store c
* مجموعة التعليمات بمعاملين: معظم حواسب مجموعة التعليمات المختزلة RISC والعديد من حواسب مجموعة التعليمات المعقدة CISC تنتمي إلى هذه الفئة، وفي حاسب مجموعة التعليمات المختزلة RISC تتم عملية الجمع بالشكل:
load a, reg1، load b, reg2، add reg1, reg2، store reg2, b
* مجموعة التعليمات ذات ثلاثة معاملات: بعض حواسب مجموعة التعليمات المعقدة CISC والقليل من حواسب مجموعة التعليمات المختزلة RISC تنتمي لهذه الفئة، والمثال السابق قد ينجز باستخدام تعليمة وحيدة في بعض الحواسب التي تتيح كون جميع المعاملات حجرات ذاكرة وذلك بالشكل add a, b, c، ولكن المعتاد أكثر أن معظم الحواسب تسمح بمعاملين ذاكريين كحد أقصى فتصاغ التعليمات بالشكل:
move a, reg1، add reg1, b, c وفي حواسب مجموعة التعليمات المختزلة RISC فالمعاملات الثلاثة تكون عادة ســِـجــِـلاّت لذا نحتاج إلى تعليمات تحميل/تخزين صريحة إن تشفير ثلاثة ســِـجــِـلاّت في مجموعة تعليمة تحوي 32 ســِـجــِـلاّ ً يحتاج إلى 15 خانة ثنائية لذا فإن هذا النظام عادة يكون محدودا لمجموعات التعليمات ذات طول 32 خانة ثنائية أو أكثر.
* مجموعة تعليمات ذات عدد أكبر من المعاملات: بعض حواسب مجموعة التعليمات المعقدة CISC تسمح بأنماط عنونة متنوعة تسمح بأكثر بأكثر من ثلاثة معاملات تعتمد على السـّـِـجــِـلاّت لوصول للذاكرة.

### لغة الآلة

إن لغة الآلة مبنية من تعليمات أو عبارات منفصلة، وبحسب بنية المعالجة فإن مجموعة تعليمات معينة يمكن أن تحدد:
* ســِـجــِـلاّت معينة للحساب أو العنونة أو وظائف التحكم
* مواقع أو إزاحات ذاكرة معينة
* أنماط عنونة معينة تستخدم لتفسير المعاملات
الأعمال الأكثر تعقيداً تبنى بدمج هذه التعليمات البسيطة والتي تنفذ بشكل متسلسل (في بنية فان نيومان) أو تقاد بتعليمات التحكم بسير البرنامج.
بعض العمليات المتاحة في معظم مجموعات التعليمات تتضمن:
* النقل
** تغيير قيمة ســِـجــِـل ّ (موقع مؤقت (مسودة) في المعالج نفسه) إلى قيمة ثابتة محددة.
** نقل المعطيات من موقع في الذاكرة إلى ســِـجــِـل ّ، أو بالعكس. وتنجز هذه العملية لجلب المعطيات التي سيجرى عليها عمليات حسابية بعد قليل أو لتخزين نتائج عملية حساب.
** قراءة المعطيات من وكتابتها إلى الأجهزة المحيطية
* الحساب (المعالجة)
** جمع، طرح، ضرب أو قسمة قيمتي ســِـجــِـلـّين ووضع النتيجة في ســِـجــِـل ّ
** إجراء عمليات على مستوى البتات (bitwise operations)، أخذ الاتحاد/التقاطع (AND/OR) للخانات الثنائية الموافقة في زوج من السـّـِـجــِـلاّت، أو النفي (NOT) جميع الخانات الثنائية في ســِـجــِـل ّ
** مقارنة قيم ســِـجــِـلـّين (على سبيل المثال لاختبار فيما إذا كانتا متساويتين أو إحداهما أصغر من الأخرى)
** القفز إلى موقع آخر في البرنامج وتنفيذ التعليمات الموجودة هناك (القفز اللامشروط)
** القفز إلى موقع آخر إذا كان شرط ما محققا (القفز المشروط)
** القفز إلى موقع آخر، ولكن مع المحافظة على موقع التعليمة التالية كنقطة للعودة إليها فيما بعد (استدعاء برنامج فرعي)
بعض الحواسب تتضمن تعليمات معقدة في مجموعة تعليماتها. وتعليمة معقدة واحدة تنجز شيئاً يمكن أن يحتاج عدة تعليمات في الحواسب الأخرى. هذه التعليمات تتجسد بالتعليمات التي تأخذ خطوات عدبدة أو تتحكم بعدة وحدات وظيفية أو تبدو أوسع من معظم التعليمات البسيطة لمعالج معين، بعض الأمثلة على هذه العمليات المعقدة يتضمن:
* تخزين قيم عدة ســِـجــِـلاّت في المكدس دفعة واحدة
* نقل كتل كبيرة من الذاكرة
* عمليات حسابية معقدة بالفاصلة العائمة (الجيب، التجيب،الجذر التربيعي،.. إلخ)
* إنجاز تعليمات عمليات ذرية للاختبار والتوضيع (عمليات تنفذ ككتلة واحدة)
* تعليمات تجمع بين وحدة الحسابيات و المنطق مع معامل من الذاكرة بدلاً من ســِـجــِـل ّ
نمط من أنماط التعليمات المعقدة والذي أصبح منتشراً بشكل كبير مؤخراً هو عمليات التعليمات وحيدة والمعطيات المتعددة SIMD أو العمليات الشعاعية، وهي عملية تنجز نفس العملية الحسابية على عدة قيم من المعطيات في نفس الوقت. وهي تملك القدرة على معالجة أشعة كبيرة ومصفوفات في وقت أصغري وتسمح بالمعالجة التفرعية للخوارزميات المتضمنة في معالجة الصوت والصور والفيديو. العديد من التحقيقات لتقنية العمليات وحيدة التعليمات متعددة المعطيات قد ظهرت في الأسواق تحت أسماء تجارية مثل MMX و3DNow! وAltiVec
إن تصميم مجموعات التعليمة قضية معقدة. وقد كانت هناك مرحلتين في تاريخ المعالجات. إحداها تستخدم بنية حواسب مجموعة التعليمات المعقدة CISC حيث تم تحقيق العديد من التعليمات. في السبعينات من القرن الماضي تم إجراء العديد من الأبحاث والوصول إلى أن العديد من التعليمات المستخدمة يمكن الاستغناء عنها. والنتيجة كانت بنية حواسب مجموعة التعليمات المختزلة RISC، بنية تستخدم مجموعة أصغر من التعليمات. إن مجموعة التعليمات الأبسط يمكن أن تساهم في تغطية الحاجة الملحة لسرعات متزايدة وحجم معالجات أصغر واستهلاك طاقة أقل. في حين أن مجموعة تعليمات الأعقد قد تحسن أداء العمليات الشائعة وتحسن أداء الذاكرة والذاكرة المخبئية أو تبسط البرمجة.

## لائحة ببنى مجموعات تعليمات
### بنى مجموعات التعليمات التي تحقق في العتاد

* DEC Alpha
* ARM
* Burroughs Large Systems
* IA-64 Itanium
* MIPS
* Motorolla 68k
* PA-RISC
* IBM 700/7000
* IBM POWER
* PDP-11
* PowerPC
* SPARC
* SuperH
* System/360
* Tricore
* Transputer
* UNIVAC 1100/2200
* VAX
* x86 يعرف أيضاً بـ IA-32
* x86-64 يعرف أيضاً بـ AMD64
* EISC

### بنى مجموعات التعليمات التي تحقق في البرمجيات مع بعض التحقيقات في العتاد

* الآلة الافتراضية للغة الجافا
* FORTH

## انظر أيضاً
### تصنيفات بنى مجموعات التعليمات

* بنية حواسب مجموعة التعليمات المعقدة CISC
* تصنيف فلين للحواسب التفرعية

### التطبيقات التي تحتاج مجموعات تعليمات مخصصة

* وحدات معالجة الرسوميات

### أنواع الأجهزة التي تحقق مجموعة تعليمات

* وحدة المعالجة المركزية
* المتحكم الصغري
* المعالج الصغري