نمط العنونة
تُعدّ أنماط العنونة أحد جوانب بنية مجموعة التعليمات في معظم تصميمات وحدات المعالجة المركزية (CPU). تُحدد أنماط العنونة كيفية تحديد تعليمات لغة الآلة في تلك البنية للمعامل ( أو المعاملات) لكل تعليمة. ويُحدد نمط العنونة كيفية حساب عنوان الذاكرة الفعلي للمعامل باستخدام المعلومات المخزنة في المسجلات و/أو الثوابت الموجودة داخل تعليمة الآلة أو في أي مكان آخر.
في برمجة الحاسوب ، تُعدّ أنماط العنونة ذات أهمية بالغة لمبرمجي لغات التجميع ومطوري المترجمات . وللاطلاع على مفهوم ذي صلة، انظر مجموعة التعليمات المتعامدة التي تتناول قدرة أي تعليمة على استخدام أي نمط عنونة.
محاذير
لا توجد أسماء متفق عليها عمومًا لأنماط العنونة: فقد يُطلق مؤلفون ومصنّعو حواسيب مختلفون أسماءً مختلفة على نمط العنونة نفسه، أو يُطلقون الأسماء نفسها على أنماط عنونة مختلفة. علاوة على ذلك، قد يُمثّل نمط العنونة الذي يُعامل في بنية معينة كنمط عنونة واحد وظيفةً تُغطّى في بنية أخرى بنمطَي عنونة أو أكثر. على سبيل المثال، تُعامل بعض بنى الحواسيب ذات مجموعة التعليمات المعقدة (CISC)، مثل حاسوب Digital Equipment Corporation (DEC) VAX ، السجلات والثوابت الحرفية أو المباشرة كنمط عنونة واحد. بينما تُضمّن بنى أخرى، مثل IBM System/360 وخلفائها، ومعظم تصميمات الحواسيب ذات مجموعة التعليمات المختصرة (RISC)، هذه المعلومات ضمن التعليمات. وبالتالي، تحتوي هذه الحواسيب الأخيرة على ثلاثة رموز تعليمات متميزة لنسخ سجل إلى آخر، ونسخ ثابت حرفي إلى سجل، ونسخ محتويات موقع ذاكرة إلى سجل، بينما يحتوي حاسوب VAX على تعليمة "MOV" واحدة فقط. ومما يزيد الأمور تعقيداً: أن بعض المعالجات مثل وحدات التحكم الدقيقة PIC من شركة Microchip Technology لا تميز بين السجلات والذاكرة.
يخضع مصطلح "نمط العنونة" لتفسيرين مختلفين: إما "نمط حساب عنوان الذاكرة" أو "نمط الوصول إلى المعامل". وفقًا للتفسير الأول، تُعتبر التعليمات التي لا تقرأ من الذاكرة أو تكتب إليها (مثل "إضافة قيمة حرفية إلى سجل") غير مُعنونة. أما التفسير الثاني فيسمح لأجهزة مثل VAX باستخدام بتات نمط المعامل للسماح بسجل أو بمعامل حرفي. ينطبق التفسير الأول فقط على تعليمات مثل "تحميل العنوان الفعلي"، التي تُحمّل عنوان المعامل، وليس المعامل نفسه.
تنقسم أنماط العنونة المذكورة أدناه إلى عنونة التعليمات البرمجية وعنونة البيانات. تحافظ معظم بنى الحاسوب على هذا التمييز، ولكن توجد (أو كانت توجد) بعض البنى التي تسمح باستخدام (تقريبًا) جميع أنماط العنونة في أي سياق.
التعليمات الموضحة أدناه هي تعليمات تمثيلية بحتة لتوضيح أنماط العنونة، ولا تعكس بالضرورة الرموز المستخدمة من قبل أي جهاز كمبيوتر معين.
بعض أجهزة الكمبيوتر، على سبيل المثال، IBM 709 و RCA 3301، [ 1 ] لا تحتوي على حقل وضع عنوان واحد ولكن بدلاً من ذلك تحتوي على حقول منفصلة للعنونة غير المباشرة والفهرسة.
عدد أنماط العنونة
تختلف بنى الحواسيب اختلافًا كبيرًا فيما يتعلق بعدد أنماط العنونة التي توفرها في مكوناتها المادية. ثمة بعض الفوائد في الاستغناء عن أنماط العنونة المعقدة واستخدام نمط عنونة واحد أو بضعة أنماط أبسط، على الرغم من أن ذلك يتطلب بضع تعليمات إضافية، وربما مسجلًا إضافيًا. [ 2 ] [ 3 ] وقد ثبت [ 4 ] [ 5 ] [ 6 ] أنه من الأسهل بكثير تصميم وحدات المعالجة المركزية ذات البنية الأنبوبية إذا كانت أنماط العنونة المتاحة بسيطة.
تحتوي معظم معمارية RISC على خمسة أنماط عنونة بسيطة فقط، بينما تحتوي معمارية CISC، مثل DEC VAX، على أكثر من اثني عشر نمط عنونة، بعضها معقد للغاية. أما معمارية IBM System/360 فتحتوي على أربعة أنماط عنونة فقط؛ وقد أُضيفت بضعة أنماط أخرى لمعمارية ESA/390 .
عندما يكون عدد أنماط العنونة محدودًا، يُشفّر نمط العنونة المطلوب عادةً ضمن رمز التعليمات (مثل IBM System/360 وما تلاه، ومعظم معالجات RISC). أما عند وجود أنماط عنونة متعددة، فيُخصص حقلٌ محددٌ في التعليمات لتحديد نمط العنونة. سمح معالج DEC VAX بمعاملات ذاكرة متعددة لجميع التعليمات تقريبًا، ولذلك خصص البتات القليلة الأولى من مُحدد المعامل للإشارة إلى نمط العنونة الخاص بذلك المعامل. يُنتج فصل بتات مُحدد نمط العنونة عن بتات رمز العملية مجموعة تعليمات متعامدة .
حتى في الحواسيب التي تدعم أنماط عنونة متعددة، تشير قياسات البرامج الفعلية [ 7 ] إلى أن أنماط العنونة البسيطة المذكورة أدناه تمثل حوالي 90% أو أكثر من جميع أنماط العنونة المستخدمة. وبما أن معظم هذه القياسات تعتمد على شفرة مُولَّدة من لغات برمجة عالية المستوى بواسطة مُجمِّعات، فإن هذا يعكس إلى حد ما قيود المُجمِّعات المستخدمة. [ 8 ] [ 7 ] [ 9 ]
تحميل العنوان الفعال
تتضمن بعض بنى مجموعات التعليمات، مثل IBM System/360 وخلفائها [ 10 ] ، و Intel x86 [ 11 ] ، وسلسلة Motorola 68000 [ 12 ] ، تعليمة تحميل العنوان الفعال . تحسب هذه التعليمة عنوان المعامل الفعال وتحمّله في مسجل، دون الوصول إلى الذاكرة التي يشير إليها. قد يكون هذا مفيدًا عند تمرير عنوان عنصر مصفوفة إلى روتين فرعي. كما قد يكون طريقة ذكية لإجراء عمليات حسابية أكثر من المعتاد في تعليمة واحدة؛ على سبيل المثال، يسمح استخدام هذه التعليمة مع نمط العنونة "الأساس + الفهرس + الإزاحة" (الموضح أدناه) بتعليمة واحدة بجمع مسجلين وثابت معًا وتخزين النتيجة في مسجل ثالث. [ 13 ]
تتضمن بعض بنى مجموعات التعليمات، مثل سلسلة موتورولا 68000، تعليمة دفع العنوان الفعال . تحسب هذه التعليمة عنوان المعامل الفعال وتدفعه إلى المكدس بدلاً من تخزينه في سجل. ويمكن استخدام هذه التعليمة لتمرير المؤشرات كوسائط إلى دالة.
أنماط عنونة بسيطة للرمز
تُعرض أدناه بعض أنماط العنونة البسيطة للتعليمات البرمجية. قد تختلف المصطلحات باختلاف النظام الأساسي.
مطلق أو مباشر
+----+------------------------------+ |قفز| عنوان | +----+------------------------------+ (عنوان الكمبيوتر الفعال = العنوان)
العنوان الفعلي لعنوان التعليمات المطلق هو معلمة العنوان نفسها دون أي تعديلات.
نسبةً إلى الحاسوب الشخصي
+----+------------------------------+ |قفزة| إزاحة | قفزة نسبية +----+------------------------------+ (عنوان عداد البرنامج الفعال = عنوان التعليمات التالية + الإزاحة، وقد تكون الإزاحة سالبة)
العنوان الفعلي لتعليمات البرنامج بالنسبة لعداد البرنامج هو معامل الإزاحة المضاف إلى عنوان التعليمات التالية. عادةً ما تكون هذه الإزاحة مُوقّعة للسماح بالرجوع إلى التعليمات البرمجية قبل وبعد التعليمات. [ 14 ]
يُعدّ هذا مفيدًا بشكل خاص فيما يتعلق بتعليمات القفز ، لأن القفزات النموذجية تكون إلى تعليمات قريبة (في لغات البرمجة عالية المستوى، تكون معظم عبارات if أو while قصيرة نسبيًا). تشير قياسات البرامج الفعلية إلى أن إزاحة 8 أو 10 بتات كافية لحوالي 90% من القفزات الشرطية (ما يقارب ±128 أو ±512 بايت). [ 15 ] أما بالنسبة للقفزات إلى تعليمات غير قريبة، فتُستخدم أنماط عنونة أخرى.
ومن المزايا الأخرى للعنونة النسبية لعداد البرنامج أن الكود قد يكون مستقلاً عن الموقع ، أي أنه يمكن تحميله في أي مكان في الذاكرة دون الحاجة إلى تعديل أي عناوين.
التسجيل غير المباشر
+-------+-----+ |jumpVia| reg | +-------+-----+ (عنوان الكمبيوتر الفعال = محتويات السجل 'reg')
العنوان الفعلي لتعليمات الوصول غير المباشر إلى السجل هو العنوان الموجود في السجل المحدد. على سبيل المثال، (A7) للوصول إلى محتوى سجل العنوان A7.
والنتيجة هي نقل التحكم إلى التعليمات التي يقع عنوانها في السجل المحدد.
تحتوي العديد من أجهزة RISC، بالإضافة إلى أجهزة CISC IBM System/360 وما خلفها، على تعليمات استدعاء روتينية فرعية تضع عنوان العودة في سجل عنوان - يتم استخدام وضع العنونة غير المباشرة للسجل للعودة من استدعاء الروتين الفرعي هذا.
أنماط العنونة التسلسلية للتعليمات البرمجية
التنفيذ التسلسلي
+------+ | لا تفعل | نفّذ التعليمات التالية +------+ (عنوان عداد البرنامج الفعال = عنوان التعليمات التالية)
يقوم المعالج المركزي، بعد تنفيذ تعليمة متسلسلة، بتنفيذ التعليمة التالية على الفور.
لا يُعتبر التنفيذ التسلسلي نمطًا للعنونة في بعض أجهزة الكمبيوتر.
معظم التعليمات في معظم معالجات الحاسوب هي تعليمات متسلسلة. ولأن معظم التعليمات متسلسلة، فإن مصممي المعالجات غالباً ما يضيفون ميزات تُضحي عمداً بأداء التعليمات الأخرى - تعليمات التفرع - من أجل تسريع تنفيذ هذه التعليمات المتسلسلة.
تقوم الفروع الشرطية بتحميل عداد البرنامج بواحدة من نتيجتين محتملتين، اعتمادًا على الشرط - تستخدم معظم بنى وحدة المعالجة المركزية وضع عنونة آخر للفرع "المأخوذ"، والتنفيذ التسلسلي للفرع "غير المأخوذ".
العديد من الميزات في وحدات المعالجة المركزية الحديثة - جلب التعليمات المسبق والتسلسل المعقد ، والتنفيذ خارج الترتيب ، وما إلى ذلك - تحافظ على وهم أن كل تعليمة تنتهي قبل أن تبدأ التعليمة التالية، مما يعطي نفس النتائج النهائية، على الرغم من أن هذا ليس بالضبط ما يحدث داخليًا.
كل " كتلة أساسية " من هذه التعليمات المتسلسلة تُظهر كلاً من الموضع الزمني والمكاني للمرجعية .
وحدات المعالجة المركزية التي لا تستخدم التنفيذ التسلسلي
تُعدّ وحدات المعالجة المركزية التي لا تستخدم التنفيذ التسلسلي مع عداد البرنامج نادرة للغاية. في بعض وحدات المعالجة المركزية، تُحدد كل تعليمة عنوان التعليمة التالية. تحتوي هذه الوحدات على مؤشر تعليمة يحتفظ بهذا العنوان المُحدد؛ وهو ليس عداد برنامج لعدم وجود آلية لزيادته. تشمل هذه الوحدات بعض أجهزة الكمبيوتر ذات ذاكرة الأسطوانة مثل IBM 650 ، و SECD machine ، و Librascope RPC 4000 ، وRTX 32P. [ 16 ]
في المعالجات المنفذة باستخدام التعليمات البرمجية الدقيقة الأفقية ، قد تحتوي التعليمات الدقيقة على البتات ذات الترتيب الأعلى لعنوان التعليمات التالية.
وتذهب بنى الحوسبة الأخرى إلى أبعد من ذلك بكثير، حيث تحاول تجاوز عنق الزجاجة فون نيومان باستخدام مجموعة متنوعة من البدائل لعداد البرنامج .
التنفيذ المشروط
تتضمن بعض بنى الحواسيب تعليمات مشروطة (مثل ARM ، ولكن ليس لجميع التعليمات في وضع 64 بت) أو تعليمات تحميل مشروطة (مثل x86)، مما قد يُغني في بعض الحالات عن التفرعات المشروطة ويتجنب تفريغ خط أنابيب التعليمات . تُستخدم تعليمة مثل "compare" لتعيين رمز شرطي ، وتتضمن التعليمات اللاحقة اختبارًا لهذا الرمز الشرطي لمعرفة ما إذا كان مُطبقًا أم مُتجاهلًا.
يتخطى
+------+-----+-----+ |skipEQ| reg1| reg2| تخطَّ التعليمات التالية إذا كان reg1=reg2 +------+-----+-----+ (عنوان عداد البرنامج الفعال = عنوان التعليمات التالية + 1)
يمكن اعتبار العنونة التخطي نوعًا خاصًا من أنماط العنونة النسبية لعداد البرنامج (PC) ذات الإزاحات الثابتة. [ أ ] وكما هو الحال في العنونة النسبية لعداد البرنامج، تحتوي بعض وحدات المعالجة المركزية على إصدارات من نمط العنونة هذا تشير إلى سجل واحد فقط ("تخطي إذا كان reg1=0") أو لا تشير إلى أي سجلات، مع الإشارة ضمنيًا إلى بت مُعيّن مسبقًا في سجل الحالة . بينما تحتوي وحدات معالجة مركزية أخرى على إصدار يختار بتًا محددًا في بايت محدد لاختباره ("تخطي إذا كان البت 7 من reg12 يساوي 0").
على عكس جميع الفروع الشرطية الأخرى، فإن تعليمة "التخطي" لا تحتاج أبدًا إلى مسح خط أنابيب التعليمات ، على الرغم من أنها قد تحتاج إلى التسبب في تجاهل التعليمة التالية.
أنماط عنونة بسيطة للبيانات
تُعرض أدناه بعض طرق عنونة البيانات البسيطة. قد تختلف التسمية باختلاف النظام الأساسي.
سجل (أو سجل مباشرة)
+------+-----+-----+-----+ | مول | ريج1| ريج2| ريج3| reg1 := reg2 * reg3; +------+-----+-----+-----+
لا يحتوي "نمط العنونة" هذا على عنوان فعال ولا يعتبر نمط عنونة على بعض أجهزة الكمبيوتر.
في هذا المثال، جميع المعاملات موجودة في سجلات، ويتم وضع النتيجة في سجل.
القاعدة بالإضافة إلى الإزاحة، والاختلافات
ويشار إلى هذا أحيانًا باسم "القاعدة بالإضافة إلى الإزاحة" أو "المقتطع".
+------+-----+-----+----------------+ | تحميل | سجل | قاعدة | إزاحة | سجل := ذاكرة الوصول العشوائي[قاعدة + إزاحة] +------+-----+-----+----------------+ (العنوان الفعلي = الإزاحة + محتويات سجل القاعدة المحدد)
إذا كانت الإزاحة صفرًا، يصبح هذا مثالًا على العنونة غير المباشرة للسجل ؛ العنوان الفعلي هو ببساطة القيمة الموجودة في سجل الأساس.
في العديد من أجهزة RISC، تكون قيمة المسجل 0 ثابتة عند الصفر. إذا استُخدم المسجل 0 كمسجل أساسي، يصبح هذا مثالاً على العنونة المطلقة . مع ذلك، لا يمكن الوصول إلا إلى جزء صغير من الذاكرة.
غالباً ما يكون الإزاحة صغيرة مقارنةً بحجم ذاكرة الحاسوب الحالية. ومع ذلك، ينطبق مبدأ موضعية المرجع : فخلال فترة زمنية قصيرة، تكون معظم عناصر البيانات التي يرغب البرنامج في الوصول إليها قريبة نسبياً من بعضها البعض.
يرتبط نمط العنونة هذا ارتباطًا وثيقًا بنمط العنونة المطلقة المفهرسة.
مثال 1 : ضمن روتين فرعي، يهتم المبرمج بشكل أساسي بالمعاملات والمتغيرات المحلية، والتي عادةً ما يكفي لها سجل أساسي واحد ( مؤشر الإطار ). إذا كان هذا الروتين عبارة عن دالة فئة في لغة برمجة كائنية التوجه، فسيلزم سجل أساسي ثانٍ يشير إلى خصائص الكائن الحالي ( this أو self في بعض لغات البرمجة عالية المستوى).
المثال 2 : إذا كان سجل القاعدة يحتوي على عنوان نوع مركب (سجل أو بنية)، فيمكن عادةً استخدام الإزاحة لتحديد حقل من ذلك السجل.
مباشر/حرفي
+------+-----+-----+----------------+ | أضف | reg1| reg2| ثابت | reg1 := reg2 + ثابت؛ +------+-----+-----+----------------+
لا يحتوي "نمط العنونة" هذا على عنوان فعال، ولا يعتبر نمط عنونة على بعض أجهزة الكمبيوتر.
قد يكون الثابت موجب الإشارة أو سالب الإشارة. على سبيل المثال، move.l #$FEEDABBA, D0لنقل القيمة السداسية العشرية المباشرة لـ "FEEDABBA" إلى المسجل D0.
بدلاً من استخدام مُعامل من الذاكرة، تُخزَّن قيمة المُعامل داخل التعليمة نفسها. في جهاز DEC VAX، يمكن أن يكون طول المُعامل الحرفي 6 أو 8 أو 16 أو 32 بت.
أظهر أندرو تانينباوم أن 98٪ من جميع الثوابت في البرنامج يمكن أن تتناسب مع 13 بت (انظر فلسفة تصميم RISC ).
ضمني
+-----------------+ | لقمة حمل واضحة | +-----------------+ +-------------------+ | مسح المُجمِّع | +-------------------+
لا يحدد وضع العنونة الضمني، والذي يسمى أيضًا وضع العنونة الضمني ( لغة التجميع x86 )، عنوانًا فعالًا بشكل صريح لكل من المصدر أو الوجهة (أو كليهما في بعض الأحيان).
يتم تضمين عنوان المصدر (إن وجد) أو عنوان الوجهة الفعلي (أو كليهما أحيانًا) ضمنيًا بواسطة رمز العملية.
كان استخدام العنونة الضمنية شائعًا جدًا في الحواسيب القديمة (حتى منتصف سبعينيات القرن العشرين). عادةً ما كانت هذه الحواسيب تحتوي على سجل واحد فقط لإجراء العمليات الحسابية، وهو المُراكم. تشير هذه الحواسيب المُراكمة ضمنيًا إلى هذا المُراكم في كل تعليمة تقريبًا. على سبيل المثال، يمكن تنفيذ العملية < a := b + c; > باستخدام التسلسل < load b; add c; store a; >، حيث يُشار إلى المُراكم (الوجهة) ضمنيًا في كل تعليمة "تحميل" و"جمع"، بينما يُشار إلى المُراكم (المصدر) ضمنيًا في كل تعليمة "تخزين".
بشكل عام، كانت أجهزة الكمبيوتر اللاحقة تحتوي على أكثر من سجل للأغراض العامة أو موقع ذاكرة الوصول العشوائي (RAM) والذي يمكن أن يكون المصدر أو الوجهة أو كليهما للعمليات الحسابية - وبالتالي تحتاج أجهزة الكمبيوتر اللاحقة إلى وضع عنونة آخر لتحديد مصدر ووجهة العمليات الحسابية.
من بين تعليمات x86، يستخدم بعضها سجلات ضمنية لأحد المعاملات أو النتائج (الضرب، القسمة، عد القفزة الشرطية).
تحتوي بعض مجموعات التعليمات (مثل x86 و AVR) على سجل خاص يسمى مؤشر المكدس والذي يتم زيادته أو إنقاصه ضمنيًا عند دفع البيانات أو سحبها من المكدس، ويكون عنوان المصدر أو الوجهة الفعلي (ضمنيًا) هو العنوان المخزن في مؤشر المكدس هذا.
تحتوي بعض مجموعات التعليمات الأخرى (مثل m68k و ARM و PowerPC) على أكثر من سجل واحد يمكن استخدامه كمؤشر للمكدس - وبالتالي تستخدم وضع العنونة "الزيادة التلقائية غير المباشرة للسجل" لتحديد أي من هذه السجلات يجب استخدامه عند دفع البيانات أو سحبها من المكدس.
تحتوي بعض مجموعات تعليمات الكمبيوتر الحالية (مثل z/Architecture و IA-32 / x86-64 ) على بعض التعليمات ذات المعاملات الضمنية من أجل الحفاظ على التوافق مع التصميمات السابقة.
في بعض مجموعات التعليمات، تُحدد التعليمات التي تُغير بت وضع المستخدم/النظام، وبت تمكين المقاطعة، وما إلى ذلك، ضمنيًا السجل الخاص الذي يحتوي على هذه البتات. يُبسط هذا الأمر المكونات المادية اللازمة لاعتراض هذه التعليمات لتلبية متطلبات المحاكاة الافتراضية لـ Popek و Goldberg؛ ففي مثل هذا النظام، لا تحتاج منطق الاعتراض إلى النظر إلى أي مُعامل (أو إلى العنوان الفعلي النهائي)، بل إلى رمز العملية فقط.
تم تصميم بعض مجموعات التعليمات بحيث يتم تحديد كل معامل ضمنيًا في كل تعليمة - وحدات المعالجة المركزية ذات المعاملات الصفرية .
أنماط عنونة أخرى للرموز أو البيانات
مطلق/مباشر
+------+-----+--------------------------------------+ | تحميل | تسجيل | عنوان | +------+-----+--------------------------------------+ (العنوان الفعلي = العنوان كما هو مذكور في التعليمات)
يتطلب هذا مساحة في التعليمات لعنوان كبير نسبيًا. وهو متوفر غالبًا في أجهزة CISC التي تحتوي على تعليمات متغيرة الطول، مثل x86 .
تحتوي بعض أجهزة RISC على تعليمة خاصة لتحميل قيمة حرفية عليا، حيث يتم وضع قيمة ثابتة من 16 أو 20 بت في النصف العلوي من سجل. ويمكن استخدام هذه القيمة كسجل أساسي في نمط عنونة الأساس والإزاحة، والذي يوفر البتات الـ 16 أو 12 ذات الترتيب الأدنى. يتيح هذا التركيب عنوانًا كاملاً من 32 بت.
القيمة المطلقة المفهرسة
+------+-----+-----+--------------------------------+ | تحميل | سجل | فهرس | عنوان | +------+-----+-----+--------------------------------+ (العنوان الفعال = العنوان + محتويات سجل الفهرس المحدد)
يتطلب هذا أيضًا مساحة في التعليمات لعنوان كبير نسبيًا. قد يكون العنوان بداية مصفوفة أو متجه، ويمكن للفهرس تحديد عنصر المصفوفة المطلوب. قد يقوم المعالج بتوسيع سجل الفهرس ليتناسب مع حجم كل عنصر من عناصر المصفوفة .
لاحظ أن هذا يشبه إلى حد كبير وضع العنونة الأساسي بالإضافة إلى الإزاحة، باستثناء أن الإزاحة في هذه الحالة كبيرة بما يكفي لمعالجة أي موقع في الذاكرة.
مثال 1 : ضمن روتين فرعي، يمكن للمبرمج تعريف سلسلة نصية كثابت محلي أو متغير ثابت . يُخزَّن عنوان السلسلة في العنوان الحرفي في التعليمة. أما الإزاحة - أي الحرف الذي سيتم استخدامه في هذه الدورة من الحلقة - فتُخزَّن في سجل الفهرس.
مثال ٢ : قد يُعرّف المبرمج عدة مصفوفات كبيرة كمتغيرات عامة أو كمتغيرات فئة . تُخزّن بداية المصفوفة في العنوان الحرفي (الذي قد يُعدّل عند تحميل البرنامج بواسطة مُحمّل مُعاد توجيهه ) للتعليمات التي تُشير إليها. أما الإزاحة - أي العنصر الذي سيُستخدم من المصفوفة في هذه الدورة من الحلقة - فتُخزّن في سجل الفهرس. غالبًا ما تُعيد التعليمات في الحلقة استخدام السجل نفسه لعداد الحلقة وإزاحات عدة مصفوفات.
الأساس بالإضافة إلى الفهرس
+------+-----+-----+-----+ | تحميل | سجل | قاعدة | فهرس | +------+-----+-----+-----+ (العنوان الفعال = محتويات سجل القاعدة المحدد + محتويات سجل الفهرس المحدد)
قد يحتوي سجل الأساس على عنوان بداية مصفوفة أو متجه، ويمكن للفهرس تحديد عنصر المصفوفة المطلوب. قد يقوم المعالج بتوسيع سجل الفهرس ليتناسب مع حجم كل عنصر من عناصر المصفوفة . ويمكن استخدام ذلك للوصول إلى عناصر مصفوفة مُمرَّرة كمعامل.
الأساس بالإضافة إلى الفهرس بالإضافة إلى الإزاحة
+------+-----+-----+-----+----------------+ | تحميل | سجل | أساس|فهرس| إزاحة | +------+-----+-----+-----+----------------+ (العنوان الفعلي = الإزاحة + محتويات سجل القاعدة المحدد + محتويات سجل الفهرس المحدد)
قد يحتوي سجل الأساس على عنوان بداية مصفوفة أو متجه من السجلات، ويمكن للفهرس تحديد السجل المطلوب، ويمكن للإزاحة تحديد حقل داخل ذلك السجل. وقد يقوم المعالج بتوسيع سجل الفهرس ليتناسب مع حجم كل عنصر من عناصر المصفوفة .
مقياس
+------+-----+-----+-----+ | تحميل | سجل | قاعدة | فهرس | +------+-----+-----+-----+ (العنوان الفعلي = محتويات سجل القاعدة المحدد + المحتويات المُقاسة لسجل الفهرس المحدد)
يمكن أن يحتوي سجل القاعدة على عنوان البداية لهيكل بيانات المصفوفة أو المتجه ، ويمكن أن يحتوي الفهرس على إزاحة عنصر المصفوفة المحدد المطلوب.
يُغيّر نمط العنونة هذا قيمة سجل الفهرس ديناميكيًا لتتناسب مع حجم كل عنصر من عناصر المصفوفة، فمثلاً إذا كانت عناصر المصفوفة أعدادًا عشرية مزدوجة الدقة تشغل 8 بايتات لكل منها، تُضرب قيمة سجل الفهرس في 8 قبل استخدامها في حساب العنوان الفعلي. عادةً ما يكون عامل التوسيع مُقيدًا بأن يكون قوةً للعدد 2 ، بحيث يُمكن استخدام الإزاحة بدلًا من الضرب.
التسجيل غير المباشر
+------+------+-----+ | تحميل | سجل 1 | قاعدة | +------+------+-----+ (العنوان الفعلي = محتويات السجل الأساسي)
تستخدم بعض الحواسيب هذا كنمط عنونة مميز. بينما تستخدم العديد من الحواسيب ببساطة العنوان الأساسي مضافًا إليه الإزاحة بقيمة إزاحة تساوي صفرًا. على سبيل المثال، (A7)
تسجيل الترقيم التلقائي غير المباشر
+------+-----+-------+ | تحميل | تسجيل | قاعدة | +------+-----+-------+ (العنوان الفعلي = محتويات السجل الأساسي)
بعد تحديد العنوان الفعلي، تُزاد قيمة السجل الأساسي بمقدار حجم عنصر البيانات المراد الوصول إليه. على سبيل المثال، سيؤدي (A7)+ إلى الوصول إلى محتوى سجل العنوان A7، ثم زيادة مؤشر العنوان A7 بمقدار 1 (عادةً كلمة واحدة). ضمن حلقة تكرارية، يمكن استخدام نمط العنونة هذا للتنقل بين جميع عناصر مصفوفة أو متجه.
في لغات البرمجة عالية المستوى، يُعتقد عمومًا أن من الأفضل ألا تُحدث الدوال التي تُرجع نتيجةً آثارًا جانبية (فغياب الآثار الجانبية يُسهّل فهم البرنامج والتحقق من صحته). يُحدث نمط العنونة هذا أثرًا جانبيًا يتمثل في تغيير قيمة السجل الأساسي. إذا تسبب الوصول اللاحق إلى الذاكرة في حدوث خطأ (مثل خطأ في الصفحة، أو خطأ في ناقل البيانات، أو خطأ في العنوان) مما يؤدي إلى مقاطعة، فإن إعادة تشغيل التعليمة تصبح أكثر تعقيدًا، إذ قد يلزم إعادة ضبط سجل واحد أو أكثر إلى حالته قبل بدء تنفيذ التعليمة.
هناك ثلاث بنى حاسوبية على الأقل واجهت مشاكل في التنفيذ فيما يتعلق بالتعافي من الأعطال عند استخدام نمط العنونة هذا:
- معالج DEC PDP-11 . قد يحتوي على مُعامل واحد أو اثنين من مُعاملات التسجيل ذات الزيادة التلقائية. [ 17 ] بعض الطرازات، مثل PDP-11/45 وPDP-11/70، كانت تحتوي على مُسجل يُسجل التعديلات التي تُجرى على المُسجلات، مما يسمح لمعالج الأخطاء بإلغاء تعديلات المُسجلات وإعادة تنفيذ التعليمات. [ 18 ]
- سلسلة معالجات موتورولا 68000. قد تحتوي على مُعامل واحد أو اثنين من مُعاملات التسجيل ذات الزيادة التلقائية. [ 19 ] حلت معالجات 68010 وما بعدها المشكلة عن طريق حفظ الحالة الداخلية للمعالج عند حدوث أخطاء في ناقل البيانات أو العنوان، واستعادتها عند العودة من الخطأ. [ 20 ] [ 21 ] [ 22 ] [ 23 ]
- DEC VAX . يمكن أن يحتوي على ما يصل إلى 6 معاملات مسجلة للزيادة التلقائية. يتم ضبط بت "تم الجزء الأول" في الكلمة الطويلة لحالة المعالج المحفوظة في إطار مكدس الخطأ إذا كان يجب عدم إعادة تشغيل التعليمات المعيبة من البداية، مما يحل المشكلة. [ 24 ]
سجل التناقص التلقائي غير المباشر
+------+-----+-----+ | تحميل | تسجيل | قاعدة | +------+-----+-----+ (العنوان الفعلي = المحتويات الجديدة لسجل القاعدة)
قبل تحديد العنوان الفعلي، يتم إنقاص القيمة الموجودة في سجل الأساس بمقدار حجم عنصر البيانات الذي سيتم الوصول إليه.
في حلقة تكرارية، يمكن استخدام نمط العنونة هذا للتنقل عكسيًا بين جميع عناصر المصفوفة أو المتجه. ويمكن تنفيذ مكدس باستخدام هذا النمط بالتزامن مع نمط العنونة السابق (الزيادة التلقائية).
انظر مناقشة الآثار الجانبية في وضع العنونة بالزيادة التلقائية .
الذاكرة غير المباشرة أو المؤجلة
قد تحتوي أي من أنماط العنونة المذكورة في هذه المقالة على بت إضافي للإشارة إلى العنونة غير المباشرة، أي أن العنوان المحسوب باستخدام نمط معين هو في الواقع عنوان موقع (عادةً كلمة كاملة ) يحتوي على العنوان الفعلي. في بعض الأجهزة، قد تشير كلمة "غير مباشر" إلى الفهرسة، أو التوجيه غير المباشر، أو التجميع ، أو مزيج من هذه العناصر .
يمكن استخدام العنونة غير المباشرة للتعليمات البرمجية أو البيانات. فهي تُسهّل تنفيذ المؤشرات والمراجع والمقابض ، كما تُسهّل استدعاء الإجراءات الفرعية التي لا يمكن الوصول إليها بطرق أخرى. مع ذلك، تُؤثر العنونة غير المباشرة سلبًا على الأداء نظرًا لزيادة الوصول إلى الذاكرة .
كانت بعض الحواسيب الصغيرة المبكرة (مثل DEC PDP-8 و Data General Nova ) تحتوي على عدد قليل من المسجلات ونطاق عنونة مباشر محدود (8 بتات). ولذلك، كان استخدام العنونة غير المباشرة للذاكرة هو الطريقة الوحيدة تقريبًا للوصول إلى أي مساحة كبيرة من الذاكرة.
نصف أنماط العنونة الثمانية في معالج DEC PDP-11 مؤجلة. نمط العنونة المؤجلة للسجل @Rn هو نفسه نمط العنونة غير المباشرة للسجل كما هو موضح أعلاه. تشير أنماط العنونة المؤجلة للتناقص المسبق @-(Rn)، والعنونة المؤجلة للزيادة اللاحقة @(Rn)+، والعنونة المؤجلة المفهرسة @nn(Rn) إلى عناوين في الذاكرة تُقرأ للعثور على عنوان المعامل. يوفر نمط العنونة المؤجلة في PDP-11، عند دمجه مع عداد البرنامج، نمط العنونة المطلق.
نسبةً إلى الحاسوب الشخصي
+------+------+---------+----------------+ | تحميل | سجل1 | الأساس=PC | إزاحة | +------+------+---------+----------------+ reg1 := RAM[PC + offset] (العنوان الفعلي = عداد البرنامج + الإزاحة)
يمكن استخدام نمط العنونة النسبي لعداد البرنامج (PC) لتحميل سجل بقيمة مخزنة في ذاكرة البرنامج على مسافة قصيرة من التعليمات الحالية. ويمكن اعتباره حالة خاصة من نمط العنونة "الأساس بالإضافة إلى الإزاحة"، حيث يتم اختيار عداد البرنامج (PC) كسجل أساسي.
توجد بعض وحدات المعالجة المركزية التي تدعم مراجع البيانات النسبية إلى عداد البرنامج. ومن هذه الوحدات:
تتميز بنية x86-64 وبنية ARMv8-A ذات 64 بت [ 25 ] بأنماط عنونة نسبية إلى عداد البرنامج، تُسمى "RIP-relative" في x86-64 و"literal" في ARMv8-A. كما يدعم معالج موتورولا 6809 نمط عنونة نسبية إلى عداد البرنامج.
تدعم بنية PDP -11 وبنية VAX وبنية ARM ذات 32 بت العنونة النسبية لعداد البرنامج (PC) من خلال وجود عداد البرنامج في ملف التسجيل.
تتضمن بنية IBM z/Architecture تعليمات محددة، على سبيل المثال، تحميل طويل نسبي، مع عنونة نسبية لعداد البرنامج إذا كانت خاصية تمديد التعليمات العامة نشطة.
عند استخدام وضع العنونة هذا، يقوم المترجم عادةً بوضع الثوابت في مجموعة حرفية مباشرة قبل أو مباشرة بعد الروتين الفرعي الذي يستخدمها، لمنع تنفيذ تلك الثوابت كتعليمات عن طريق الخطأ.
يجب عدم الخلط بين وضع العنونة هذا، الذي يجلب البيانات دائمًا من الذاكرة أو يخزن البيانات في الذاكرة ثم ينتقل بالتسلسل لتنفيذ التعليمات التالية (يشير العنوان الفعلي إلى البيانات)، وبين "التفرع النسبي لعداد البرنامج" الذي لا يجلب البيانات من الذاكرة أو يخزنها فيها، ولكنه بدلاً من ذلك يتفرع إلى بعض التعليمات الأخرى عند الإزاحة المحددة (يشير العنوان الفعلي إلى تعليمات قابلة للتنفيذ).
أنماط العنونة القديمة
استُخدمت أنماط العنونة المذكورة هنا في الفترة ما بين عامي 1950 و1980، ولكنها لم تعد متوفرة في معظم أجهزة الكمبيوتر الحديثة. هذه القائمة ليست شاملة بأي حال من الأحوال؛ فقد استُخدمت العديد من أنماط العنونة الأخرى المثيرة للاهتمام والغريبة من حين لآخر، مثل الطرح المطلق-أو المنطقي لسجلين أو ثلاثة سجلات فهرسة. [ 26 ] [ 27 ]
ذاكرة متعددة المستويات غير مباشرة
إذا كان حجم الكلمة أكبر من العنوان، فقد تحتوي الكلمة المُشار إليها في التوجيه غير المباشر للذاكرة على علامة توجيه غير مباشر تُشير إلى دورة توجيه غير مباشر أخرى. تُسمى هذه العلامة بت التوجيه غير المباشر ، ويُسمى المؤشر الناتج مؤشرًا مُوسومًا ، حيث يُحدد بت التوجيه غير المباشر ما إذا كان مؤشرًا مباشرًا أم غير مباشر. يجب توخي الحذر لضمان عدم إشارة سلسلة العناوين غير المباشرة إلى نفسها؛ فإذا حدث ذلك، فقد تحدث حلقة لا نهائية أثناء محاولة حل عنوان.
تتميز أجهزة IBM 1620 و Data General Nova و HP 2100 بذاكرة غير مباشرة متعددة المستويات، مما يسمح لها بالدخول في حلقة حساب عناوين لا نهائية. وقد أثر نمط عنونة الذاكرة غير المباشرة في جهاز Nova على ابتكار التعليمات البرمجية غير المباشرة متعددة الخيوط .
كان حاسوب DEC PDP-10، ذو العناوين 18 بت والكلمات 36 بت، يسمح بالعنونة غير المباشرة متعددة المستويات، مع إمكانية استخدام سجل فهرسة في كل مرحلة. وكان يتم الاستعلام عن نظام المقاطعة ذي الأولوية قبل فك تشفير كل كلمة عنوان. [ 28 ] لذا، فإن حلقة العنونة غير المباشرة لا تمنع تنفيذ إجراءات خدمة الجهاز، بما في ذلك أي معالج انتهاء صلاحية شريحة زمنية لمجدول المهام المتعددة الاستباقي . وتُعامل التعليمات المتكررة كأي مهمة أخرى مُقيدة بالحساب.
سجلات الذاكرة المُرتبطة
في بعض الحواسيب، كانت هناك عناوين تشير إلى المسجلات بدلاً من الذاكرة الرئيسية، أو إلى الذاكرة الرئيسية المستخدمة لتنفيذ تلك المسجلات. مع أن بعض الحواسيب القديمة كانت تحتوي على عناوين مسجلات في الجزء العلوي من نطاق العناوين، مثل IBM 650 [ 29 ] [ c ] و IBM 7070 [ 30 ] [ e ]، إلا أن الاتجاه السائد كان استخدام عناوين المسجلات في الجزء السفلي فقط ، واستخدام أول 8 أو 16 كلمة من الذاكرة فقط (مثل ICL 1900 وDEC PDP-6/PDP-10). هذا يعني عدم الحاجة إلى تعليمة "إضافة مسجل إلى مسجل" منفصلة، إذ يمكن استخدام تعليمة "إضافة ذاكرة إلى مسجل" مباشرةً.
في حالة النماذج المبكرة من PDP-10، التي لم يكن بها أي ذاكرة تخزين مؤقت، إذا تم تثبيت خيار "المسجلات السريعة"، الذي يوفر دوائر أسرع لتخزين السجلات ولكنه لا يزال يسمح بمعالجتها كما لو كانت في الذاكرة، فإن حلقة داخلية ضيقة محملة في الكلمات القليلة الأولى من الذاكرة تعمل بشكل أسرع بكثير مما كانت عليه في ذاكرة النواة المغناطيسية.
قامت الطرازات اللاحقة من سلسلة DEC PDP-11 بربط السجلات بعناوين في منطقة الإدخال/الإخراج، ولكن كان الهدف الأساسي من ذلك هو السماح بالتشخيص عن بُعد. ومن المثير للارتباك أن السجلات ذات 16 بت كانت مرتبطة بعناوين بايت متتالية ذات 8 بت.
الذاكرة غير المباشرة والتزايد التلقائي
كان للحاسوب المصغر DEC PDP-8 ثمانية مواقع خاصة (في العناوين من 8 إلى 15). عند الوصول إليها عبر العنونة غير المباشرة للذاكرة، كانت هذه المواقع تزيد تلقائيًا قبل استخدامها. [ 31 ] سهّل هذا الأمر التنقل عبر الذاكرة في حلقة تكرارية دون الحاجة إلى استخدام المُراكم لزيادة العنوان.
كان لدى جهاز الكمبيوتر المصغر Data General Nova 16 موقع ذاكرة خاص في العناوين من 16 إلى 31. [ 32 ] عند الوصول إليها عبر عنونة الذاكرة غير المباشرة، يتم زيادة العناوين من 16 إلى 23 تلقائيًا قبل الاستخدام، ويتم إنقاص العناوين من 24 إلى 31 تلقائيًا قبل الاستخدام.
الصفحة الصفرية
كانت معالجات Data General Nova و Motorola 6800 و MOS Technology 6502 تحتوي على عدد قليل جدًا من المسجلات الداخلية. وكانت التعليمات الحسابية والمنطقية تُنفذ في الغالب على قيم في الذاكرة بدلاً من المسجلات الداخلية. ونتيجة لذلك، تطلبت العديد من التعليمات موقعًا في الذاكرة بحجم بايتين (16 بت). ونظرًا لأن رموز العمليات في هذه المعالجات كانت بطول بايت واحد فقط (8 بت)، فقد شكلت عناوين الذاكرة جزءًا كبيرًا من حجم التعليمات البرمجية.
أدرج مصممو هذه المعالجات حلاً جزئياً يُعرف باسم عنونة "الصفحة الصفرية". إذ يُمكن الوصول إلى أول 256 بايت من الذاكرة (من $0000 إلى $00FF؛ أي الصفحة "0") باستخدام عنوان ذاكرة مطلق أو مُفهرس بطول بايت واحد. وقد أدى ذلك إلى تقليل زمن تنفيذ التعليمات بمقدار دورة ساعة واحدة، وتقليل طول التعليمات بمقدار بايت واحد. ومن خلال تخزين البيانات المُستخدمة بكثرة في هذه المنطقة، أمكن تصغير حجم البرامج وتسريعها.
ونتيجة لذلك، استُخدمت الصفحة الصفرية بشكل مشابه لملف التسجيل. إلا أن هذا الأمر أدى في العديد من الأنظمة إلى استهلاك كبير لمساحة ذاكرة الصفحة الصفرية من قِبل نظام التشغيل وبرامج المستخدم، مما حدّ من استخدامها نظرًا لمحدودية المساحة الحرة.
الصفحة المباشرة
تم تحسين وضع عنوان الصفحة الصفرية في العديد من معالجات 8 بت الحديثة، بما في ذلك WDC 65816 و CSG 65CE02 و Motorola 6809. أضاف الوضع الجديد، المعروف باسم "عنونة الصفحة المباشرة"، إمكانية نقل نافذة ذاكرة الصفحة الصفرية التي يبلغ حجمها 256 بايت من بداية الذاكرة (عنوان الإزاحة $0000) إلى موقع جديد ضمن أول 64 كيلوبايت من الذاكرة.
سمح معالج CSG 65CE02 بنقل الصفحة المباشرة إلى أي حدٍّ بحجم 256 بايت ضمن أول 64 كيلوبايت من الذاكرة، وذلك بتخزين قيمة إزاحة 8 بت في سجل الصفحة الأساسية الجديد (B). ويمكن لمعالج Motorola 6809 القيام بالأمر نفسه باستخدام سجل الصفحة المباشرة (DP). أما معالج WDC 65816 فقد ذهب أبعد من ذلك، إذ سمح بنقل الصفحة المباشرة إلى أي موقع ضمن أول 64 كيلوبايت من الذاكرة، وذلك بتخزين قيمة إزاحة 16 بت في سجل الصفحة المباشرة الجديد (D).
ونتيجة لذلك، تمكن عدد أكبر من البرامج من استخدام وضع عنونة الصفحات المباشر المحسن مقارنة بالمعالجات القديمة التي كانت تتضمن فقط وضع عنونة الصفحات الصفرية.
فهرس مُقاس مع فحص الحدود
يشبه هذا عنونة الفهرس المقياس، باستثناء أن التعليمات تحتوي على معاملين إضافيين (عادةً ما تكون ثوابت)، ويتحقق الجهاز من أن قيمة الفهرس تقع بين هذه الحدود.
يستخدم شكل آخر من أشكال التباين واصفات المتجهات للاحتفاظ بالحدود؛ وهذا يجعل من السهل تنفيذ المصفوفات المخصصة ديناميكيًا مع الحفاظ على فحص الحدود الكامل.
غير مباشر إلى حقل بت داخل الكلمة
كانت بعض أجهزة الكمبيوتر تحتوي على أنماط عنونة غير مباشرة خاصة للحقول الفرعية داخل الكلمات.
تحدد الكلمة غير المباشرة لمعالجة الأحرف في سلسلة GE /Honeywell 600 إما حقول أحرف 6 بت أو 9 بت ضمن كلمتها المكونة من 36 بت .
كان جهاز DEC PDP-10 ، وهو أيضاً ذو 36 بت، يحتوي على تعليمات خاصة تسمح بالتعامل مع الذاكرة كسلسلة من حقول البت ذات الحجم الثابت أو البايتات بأي حجم من 1 بت إلى 36 بت. وكان واصف تسلسل مكون من كلمة واحدة في الذاكرة، يُسمى "مؤشر البايت"، يحتوي على عنوان الكلمة الحالية داخل التسلسل، وموقع البت داخل الكلمة، وحجم كل بايت.
كانت هناك تعليمات لتحميل وتخزين البايتات عبر هذا المُعرِّف، ولزيادة قيمة المُعرِّف للإشارة إلى البايت التالي (لم تكن البايتات تُقسَّم عبر حدود الكلمات). استخدمت معظم برامج DEC خمسة بايتات من 7 بت لكل كلمة (أحرف ASCII عادية)، مع ترك بت واحد غير مُستخدَم لكل كلمة. كان على تطبيقات لغة C استخدام أربعة بايتات من 9 بت لكل كلمة، لأن دالة 'malloc' في لغة C تفترض أن حجم int هو مُضاعف لحجم char ؛ [ 33 ] ويتم تحديد المُضاعف الفعلي بواسطة عامل sizeof المُعتمد على النظام والذي يُترجم في وقت الترجمة .
فهرس التعليمات التالية
استخدمت أجهزة إليوت 503 [ 34 ] وإليوت 803 [ 34 ] [ 35 ] وحاسوب توجيه أبولو العنونة المطلقة فقط، ولم تحتوي على أي سجلات فهرسة. لذا، لم تكن القفزات غير المباشرة، أو القفزات عبر السجلات، مدعومة في مجموعة التعليمات. بدلاً من ذلك، كان من الممكن توجيه الجهاز لإضافة محتويات كلمة الذاكرة الحالية إلى التعليمات التالية . على سبيل المثال، يمكن أن تؤدي إضافة قيمة صغيرة إلى التعليمات التالية المراد تنفيذها إلى تغيير قيمة a إلى a ، مما يُحدث تأثير قفزة مفهرسة. تجدر الإشارة إلى أن التعليمات تُعدّل أثناء التنفيذ وتبقى دون تغيير في الذاكرة، أي أنها ليست شيفرة ذاتية التعديل . إذا كانت القيمة المضافة إلى التعليمات التالية كبيرة بما يكفي، فقد تُعدّل رمز العملية لتلك التعليمات بالإضافة إلى العنوان أو بدلاً منه.JUMP 0JUMP 20
مسرد المصطلحات
- غير مباشر
- البيانات المشار إليها من خلال مؤشر أو عنوان .
- مباشر
- البيانات مضمنة مباشرة في قائمة التعليمات أو الأوامر.
- فِهرِس
- إزاحة ديناميكية، يتم الاحتفاظ بها عادةً في سجل فهرس ، وربما يتم تغيير حجمها حسب حجم الكائن.
- إزاحة
- قيمة فورية مضافة إلى عنوان؛ على سبيل المثال، ما يتوافق مع الوصول إلى حقل البنية في لغة البرمجة C.
- نسبي
- عنوان مُشكّل بالنسبة إلى عنوان آخر.
- زيادة بعد الزيادة
- تُستخدم عملية نقل البيانات عبر العنوان، على غرار ما هو مستخدم
*p++في لغة البرمجة C ، لعمليات سحب البيانات من المكدس . - التناقص المسبق
- إنقاص عنوان قبل استخدامه، على غرار ما يحدث
*--pفي لغة البرمجة C ، ويستخدم لعمليات دفع المكدس .
انظر أيضاً
ملحوظات
- ↑ في أغلب الأحيان يكون NSI+1 فقط على الأجهزة الموجهة نحو الكلمات، ولكن على سبيل المثال، يمكن لـ Compare Accumulator and Skip (CAS) على IBM 7090 أن يتخطى إلى NSI+1 أو NSI+2.
- ↑ إما زيادة أو إنقاص.
- ↑ وحدات تخزين المكثف لـ 650:
- 8000 مفتاح تحكم
- 8001 موزع
- 8002 المُجمِّع السفلي
- 8003 المُجمِّع العلوي
- 1 2 صالح فقط من وحدة التحكم
- ↑ لـ 5K أو 10K 7070
مراجع
- ↑ دليل مرجعي للنظام - RCA 3301 REALCOM EDP (PDF) . RCA . سبتمبر 1967. 94-16-000-1 . تم الاطلاع عليه في 21 ديسمبر 2023 .
- ↑ ف. تشاو؛ س. كوريل؛ م. هيميلستين؛ إ. كيليان؛ ل. ويبر (1987). "كم عدد أنماط العنونة الكافية؟" . أخبار هندسة الحاسوب من ACM SIGARCH . 15 (5): 117-121 . doi : 10.1145/36177.36193 .
- ↑ جون ل. هينيسي ؛ مارك أ. هورويتز (1986). "نظرة عامة على مشروع MIPS-X-MP" (ملف PDF) .
... يستخدم MIPS-X نمط عنونة واحدًا: سجل الأساس بالإضافة إلى الإزاحة. يسمح نمط العنونة البسيط هذا ببدء حساب العنوان الفعلي في وقت مبكر جدًا ...
- ↑ د. جون سكواير. "المحاضرة 19، توجيه البيانات عبر خطوط الأنابيب" . ملاحظات مختارة من محاضرات CS411 .
- ↑ "الحوسبة عالية الأداء، ملاحظات المحاضرة 11 (15 و20 سبتمبر 2000) - تقنية خطوط الأنابيب" . مؤرشف من الأصل بتاريخ 27 ديسمبر 2013. تم الاطلاع عليه بتاريخ 8 فبراير 2014 .
- ^ جون بول شين، ميكو هـ. ليباستي (2004). تصميم المعالج الحديث . ماكجرو هيل بروفيشنال . رقم ISBN 9780070570641.
- 1 2 جون ل. هينيسي؛ ديفيد أ. باترسون (29-05-2002). هندسة الحاسوب: منهج كمي . إلسيفير. ص 104. ISBN 9780080502526يحتوي معالج C54x على 17 نمطًا لمعالجة البيانات ،
باستثناء الوصول إلى السجلات، إلا أن الأنماط الأربعة الموجودة في معمارية MIPS تمثل 70% من إجمالي الأنماط. أما نمطا الزيادة والنقصان التلقائيان، الموجودان في بعض معمارية RISC، فيمثلان 25% أخرى من الاستخدام. وقد جُمعت هذه البيانات من قياس التعليمات الثابتة لمكتبة C-callable التي تضم 54 روتينًا لمعالجة الإشارات الرقمية (DSP) مكتوبة بلغة التجميع.
- ↑ د. سفيان طاهر. "مبادئ مجموعة التعليمات: استخدام أنماط العنونة (ملخص)" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 30-09-2011.
تم قياس 3 برامج على جهاز بجميع أنماط العنونة (VAX) ... إزاحة بنسبة 75% وفورية
- ↑ علي رضا عدل طباطبائي؛ جيف لانغديل؛ ستيفن لوكو؛ روبرت وهبة (1995). "برامج جوالة فعالة ومستقلة عن اللغة" . وقائع مؤتمر ACM SIGPLAN 1996 حول تصميم لغات البرمجة وتنفيذها - PLDI '96 . الصفحات 127-136 . doi : 10.1145/231379.231402 . ISBN 0897917952. S2CID 2534344 .
يمكن استبدال 79% من جميع التعليمات المنفذة بتعليمات RISC أو توليفها إلى تعليمات RISC باستخدام مجموعة تعليمات الكتلة الأساسية فقط.
- ↑ "تحميل العنوان" (ملف PDF) . z/Architecture - مبادئ التشغيل (ملف PDF) ( الطبعة الرابعة عشرة). IBM . مايو 2022. ص 7-269. SA22-7832-13 . تم الاطلاع عليه في 30 مايو 2025 .
- ↑ "7.3.16.1 تعليمات حساب العنوان" (ملف PDF) . دليل مطوري برامج معمارية Intel® 64 و IA-32 (مجلدات مجمعة: 1، 2A، 2B، 2C، 2D، 3A، 3B، 3C، 3D و4) ( ملف PDF) . المجلد 1. شركة Intel . يوليو 2017. الصفحات 7-23 . تاريخ الاسترجاع: 23 يونيو 2025.
تقوم تعليمة LEA (تحميل العنوان الفعال) بحساب العنوان الفعال في الذاكرة (الإزاحة داخل مقطع) لمعامل المصدر وتضعه في سجل للأغراض العامة. يمكن لهذه التعليمة تفسير أي من أنماط عنونة المعالج، ويمكنها إجراء أي فهرسة أو تحجيم قد يكون مطلوبًا. وهي مفيدة بشكل خاص لتهيئة سجلات ESI أو EDI قبل تنفيذ تعليمات السلسلة، أو لتهيئة سجل EBX قبل تعليمة XLAT.
- ↑ "القسم 4: تعليمات الأعداد الصحيحة" (ملف PDF) . عائلة M68000 - دليل مرجعي للمبرمج - (يتضمن تعليمات CPU32) (ملف PDF) . موتورولا . 1992. ص 4-110 . تم الاطلاع عليه بتاريخ 23 يونيو 2025 .
- ↑ "أمثلة استخدام التعليمات" (ملف PDF) . مبادئ تشغيل نظام IBM System/360 (ملف PDF) . شركة IBM. سبتمبر 1968. صفحة 135. A22-6821-7 . تاريخ الاسترجاع: 12 يوليو 2019 .
- ↑ ماكس ماكسفيلد. "بناء حاسوب 4 بت: لغة التجميع والمجمع" . قسم "أنماط العنونة". 2019.
- ↑ كونغ، شينغ؛ باترسون، ديفيد (1995). "تصميم مجموعة التعليمات" . الشريحة 27.
- ↑ كوبمان، فيليب (1989). "هندسة RTX 32P" . مجلة ستاك كمبيوترز .
- ↑ دليل بنية PDP-11 (ملف PDF) . شركة المعدات الرقمية . 1973.
- ↑ دليل معالج PDP-11/45 (ملف PDF) . شركة المعدات الرقمية . 1973. الصفحات 150-153 .
- ↑ دليل مرجعي لمبرمج عائلة M68000 (ملف PDF) . موتورولا . 1992.
- ↑ معالجات MC68010/MC68012 ذات الذاكرة الافتراضية 16/32 بت (ملف PDF) . موتورولا . مايو 1985. الصفحات 5-12 – 5-15 .
- ↑ دليل مستخدم المعالج الدقيق MC68020 ذو 32 بت (ملف PDF) . برنتيس هول . 1984. الصفحات 6-9 - 6-10 . رقم ISBN 0-13-541418-0.
- ↑ دليل مستخدم المعالج الدقيق MC68030 المحسن ذو 32 بت (ملف PDF) (الطبعة الثالثة ). برنتيس هول . 1990. الصفحات 8-7 – 8-8 . ISBN 0-13-566423-3.
- ↑ دليل مستخدم المعالج الدقيق MC68040 ذو 32 بت (ملف PDF) (الطبعة الثالثة ). موتورولا . 1989. الصفحات 9-8 – 9-9 .
- ↑ دليل مرجعي لهندسة VAX (ملف PDF) . شركة ديجيتال إكويبمنت . 1987. ص 21. ISBN 0-932376-86-X.
- ↑ "مقدمة إلى بنية ARMv8 ذات 64 بت" . أكاديمية جامعة إلينوي في شيكاغو. quequero.org. 9 أبريل 2014.
- ↑ 704 دليل تشغيل آلة معالجة البيانات الإلكترونية (PDF) . شركة IBM . 1955. الصفحات 10-11 .
- ↑ دليل مرجعي لنظام معالجة البيانات IBM 7090 (PDF) . IBM. 1962. الصفحات 9-10 .
- ↑ DEC-10-HMAA-D: دليل صيانة المعالج المركزي PDP-10 KA10 (ملف PDF) (الطبعة الأولى ). ماينارد، ماساتشوستس : شركة ديجيتال إكويبمنت . ديسمبر 1968. الصفحات 2-11 . تاريخ الاسترجاع: 15 مايو 2021.
الشكل 2-9: حساب العنوان الفعال: اختبار "PI RQ
؟"
- ↑ "التخزين" (ملف PDF) . آلة معالجة البيانات ذات الأسطوانة المغناطيسية 650 - دليل التشغيل (ملف PDF) . يونيو 1955. صفحة 9. 22-6060-2 . تم الاطلاع عليه في 14 مارس 2022 .
- ↑ "تخزين الذاكرة الأساسية وعناوين السجلات" (ملف PDF) . دليل مرجعي - نظام معالجة البيانات IBM 7070 (ملف PDF) . يناير 1960. صفحة 252. A22-7003-0 . تاريخ الاسترجاع: 14 مارس 2022 .
- ↑ جونز، دوغلاس، تعليمات مرجعية حول جهاز PDP-8 ، تم الاطلاع عليها في 1 يوليو 2013
- ↑ فريند، كارل، ملخص مجموعة تعليمات داتا جنرال نوفا ، تم استرجاعه في 1 يوليو 2013
- ↑ "مرجع لغة C: الدالة malloc()"
- 1 2 ديف بروكس. "بعض أجهزة الكمبيوتر القديمة" .
- ↑ بيل بورفيس. "بعض تفاصيل جهاز إليوت 803B"
روابط خارجية
- هندسة الحاسوب
- لغة الآلة
- لغات التجميع
