تُعرف **أنماط العنونة** بأنها جانب من جوانب بنية مجموعة التعليمات أو الأوامر في معظم تصميمات وحدة المعالجة المركزية (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 لاثنين أو ثلاثة من سجلات الفهرس.

المراجع
-------

1. ↑  F. Chow؛ S. Correll؛ M. Himelstein؛ E. Killian؛ L. Weber (1987). "How many addressing modes are enough?". *ACM Sigarch Computer Architecture News*. ج. 15 ع. 5: 117–121. DOI:10.1145/36177.36193. مؤرشف من الأصل في 2023-02-18.
2. ↑  John L. Hennessy؛ Mark A. Horowitz (1986). "An Overview of the MIPS-X-MP Project" (PDF). مؤرشف من الأصل (PDF) في 2022-03-28. ... MIPS-X uses a single addressing mode: base register plus offset. This simple addressing mode allows the computation of the effective address to begin very early ...
3. ↑  Dr. Jon Squire. "Lecture 19, Pipelining Data Forwarding". *CS411 Selected Lecture Notes*. مؤرشف من الأصل في 2021-02-25.
4. ↑  "High Performance Computing, Notes of Class 11 (Sept. 15 and 20, 2000) - Pipelining". مؤرشف من الأصل في 2013-12-27. اطلع عليه بتاريخ 2014-02-08.
5. ↑  John Paul Shen, Mikko H. Lipasti (2004). *Modern Processor Design*. ماكجرو هيل التعليم. ISBN:9780070570641. مؤرشف من الأصل في 2023-01-18.
6. 1 2  John L. Hennessy؛ David A. Patterson (29 مايو 2002). *Computer Architecture: A Quantitative Approach*. ص. 104. ISBN:9780080502526. مؤرشف من الأصل في 2022-10-30. The C54x has 17 data addressing modes, not counting register access, but the four found in MIPS account for 70% of the modes. Autoincrement and autodecrement, found in some RISC architectures, account for another 25% of the usage. This data was collected form a measurement of static instructions for the C-callable library of 54 DSP routines coded in assembly language.
7. ↑  Dr. Sofiène Tahar. "Instruction Set Principles: Addressing Mode Usage (Summary)" (PDF). مؤرشف من الأصل (PDF) في 2011-09-30. 3 programs measured on machine with all address modes (VAX) ... 75% displacement and immediate
8. ↑  Ali-Reza Adl-Tabatabai؛ Geoff Langdale؛ Steven Lucco؛ Robert Wahbe (1995). "Efficient and Language-Independent Mobile Programs". *Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation - PLDI '96*. ص. 127–136. DOI:10.1145/231379.231402. ISBN:0897917952. S2CID:2534344. 79% of all instructions executed could be replaced by RISC instructions or synthesized into RISC instructions using only basic block instruction combination.
9. ↑  *IBM System/360 Principles of Operation* (PDF). IBM. سبتمبر 1968. ص. 135. A22-6821-7. اطلع عليه بتاريخ 2019-07-12.
10. ↑  *z/Architecture Principles of Operation* (PDF). IBM. سبتمبر 2017. ص. 7–266. SA22-7832-11. اطلع عليه بتاريخ 2019-07-12.
11. ↑  *704 Electronic Data-Processing Machine Manual of Operation* (PDF). آي بي إم. 1955. ص. 10–11. مؤرشف من الأصل (PDF) في 2023-02-12.
12. ↑  *Reference Manual IBM 7090 Data Processing System* (PDF). IBM. 1962. ص. 9–10. مؤرشف من الأصل (PDF) في 2022-08-04.

* أيقونة بوابةبوابة إلكترونيات
* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة برمجيات
* أيقونة بوابةبوابة تقانة
* أيقونة بوابةبوابة علم الحاسوب