# أنماط العنونة

تُعرف أنماط العنونة بأنها جانب من جوانب بنية مجموعة التعليمات أو الأوامر في معظم تصميمات وحدة المعالجة المركزية (CPU). تُحدِّد أنماط العنونة المختلفة التي عُرفت في بنية مجموعة تعليمات معينة كيفية تحديد تعليمات لغة الآلة في تلك البنية؛ المعامل الحسابي لكل التعليمات. يُحدد نمط العنونة كيفية حساب عنوان الذاكرة الفعال للمعامل الحسابي، باستخدام المعلومات المحفوظة في السجلات أو الثوابت الموجودة في تعليمات الجهاز أو في أي مكان آخر. في برمجة الحاسوب، تهتم أنماط العنونة بنحو أساسي بحاجات أولئك الذين يكتبون بلغات التجميع والمحول البرمجي (compiler). للحصول على مفهوم ذي صلة، راجع مجموعة التعليمات المتعامدة (orthogonal instruction set)، التي تتعامل مع قدرة أي تعليمات على استخدام أي نمط عنونة.

## تحذيرات

لاحظ أنه لا توجد طريقة مقبولة عمومًا لتسمية أنماط العنونة المختلفة. على وجه الخصوص، يُعطي المؤلفون والشركات المصنعة لأجهزة الحاسوب أسماء مختلفة لنمط العنونة نفسه، أو الأسماء نفسها لأنماط عنونة مختلفة. علاوة على ذلك، فإن وضع العنونة الذي يجري التعامل معه -في بنية معينة- على أنه نمط عنونة واحد، قد يمثل وظيفة مغطاة في بنية أخرى من طريق نمطي عنونة أو أكثر.
على سبيل المثال، تُعامل بعض بنيات مجموعة التعليمات المعقدة لأجهزة الحاسوب (CISC) -مثل Digital Equipment Corporation (DEC) VAX- السجلات والثوابت الحرفية على أنها مجرد نمط عنونة آخر. يقوم بعضهم الآخر، مثل IBM System / 360 وحاسوب مجموعة التعليمات المخفضة (RISC)، بترميز هذه المعلومات داخل التعليمات. ومن ثم، فإن الأجهزة الأخيرة لديها ثلاثة رموز تعليمات مميزة لنسخ سجل إلى آخر ونسخ ثابت حرفي في سجل ونسخ محتويات موقع ذاكرة إلى سجل، بينما يحتوي VAX على تعليمات MOV واحدة فقط.
يخضع مصطلح «نمط العنونة» لتفسيرات مختلفة: إما «نمط حساب عنوان الذاكرة» أو «نمط الوصول إلى المعامل الحسابي». بموجب التفسير الأول، تُعد التعليمات التي لا تُقرأ من الذاكرة أو تُكتب في الذاكرة، مثل «إضافة حرف للسجل»، دون «نمط عنونة». يسمح التفسير الثاني للآلات -مثل VAX- باستخدام بتات نمط المعامل الحسابي للسماح للسجل أو لمعامل حرفي. ينطبق التفسير الأول فقط على تعليمات، مثل «تحميل العنوان الفعال»، الذي يُحمِّل عنوان المُعامل الحسابي، وليس المُعامل نفسه.
تنقسم أنماط العنونة المدرجة أدناه إلى عنونة التعليمات البرمجية والبيانات. تحافظ معظم معماريات الحاسوب على هذا التمييز، ولكن هناك (أو كانت) بعض البنى التي تسمح (تقريبًا) باستخدام جميع أنماط العنونة في أي سياق. الإرشادات الموضحة أدناه تمثيلية تمامًا لتوضيح أنماط العنونة، ولا تعكس بالضرورة فن الاستذكار المستخدم بوساطة أي جهاز حاسوب معين.

## عدد أنماط العنونة

تختلف معماريات الحاسوب اختلافًا كبيرًا فيما يتعلق بعدد أنماط العنونة التي توفرها في أجهزتها. توجد بعض الفوائد للتخلص من أنماط العنونة المعقدة واستخدام واحد أو عدة أنماط عنونة أبسط، على الرغم من أنها تتطلب بعض الإرشادات الإضافية، وربما سجلًا إضافيًا. أُثبت أنه من الأسهل بكثير تصميم خط أنابيب تعليمات (Instruction pipeline) لوحدات المعالجة المركزية (CPU) إذا كانت أنماط العنونة الوحيدة المتاحة هي تلك البسيطة.
تحتوي معظم معماريات (RISC) على نحو خمسة أنماط عنونة بسيطة فقط، بينما تشمل معماريات CISC -مثل DEC VAX- أكثر من اثني عشر نمطًا للعنونة، بعضها معقد جدًا. تحتوي بنية IBM System / 360 على ثلاثة أنماط عنونة فقط؛ وأضيف عدد قليل لنظام 390.
عندما لا يوجد سوى عدد قليل من أنماط العنونة، فإن نمط العنونة المحدد المطلوب عادةً ما يجري ترميزه ضمن كود التعليمات (مثل IBM System / 360، وRISC). ولكن عندما توجد العديد من أنماط العنونة، غالبًا ما يوضع حقل معين جانبًا في التعليمات لتحديد نمط العنونة. سَمح DEC VAX بالعديد من المعاملات الحسابية لجميع التعليمات تقريبًا، ومن ثم احتفظ بالبتات القليلة الأولى من كل محدد معامل للإشارة إلى نمط العنونة لهذا المعامل. ينتج عن إبقاء بتات محدد نمط العنونة منفصلة عن بتات تشغيل (opcode operation) مجموعة تعليمات متعامدة.
حتى على جهاز حاسوب فيه العديد من أنماط العنونة، تشير قياسات البرامج الفعلية إلى أن أنماط العنونة البسيطة المدرجة أدناه تمثل نحو 90٪ أو أكثر من جميع أنماط العنونة المستخدمة. لأن معظم هذه القياسات تستند إلى التعليمات البرمجية التي أنشِئت من لغات عالية المستوى بوساطة المحول البرمجي (compiler)، يعكس هذا إلى حد ما قيود المحول البرمجي قيد الاستخدام.

## الآثار الجانبية المفيدة

تحتوي بعض هياكل مجموعة التعليمات، مثل Intel x86 وIBM / 360، على تعليمات العنوان الفعال للتحميل. يقوم هذا بحساب عنوان المعامل الحسابي، ولكن بدلًا من العمل على مواقع الذاكرة، فإنه يُحمِّل العنوان إلى السجل. يمكن أن يكون هذا مفيدًا عند تمرير عنوان عنصر مصفوفة إلى روتين فرعي. قد تكون أيضًا طريقة ذكية لإجراء عمليات حسابية أكثر من المعتاد في تعليمة واحدة. على سبيل المثال، يسمح استخدام مثل هذه التعليمات مع وضع العنونة "base + index + offset" بإضافة سجلين وثابت معًا في تعليمة واحدة.

## أنماط العنونة المتقادمة

استُخدمت أوضاع العنونة المدرجة هنا في الفترة 1950-1980، ولكنها لم تعد متوفرة في معظم أجهزة الكمبيوتر الحالية. هذه القائمة ليست كاملة؛ وُجدت العديد من طرق العنونة الغريبة والمثيرة للاهتمام المستخدمة من وقت لآخر، على سبيل المثال: مطلق - ناقص - منطقي - OR لاثنين أو ثلاثة من سجلات الفهرس.