نماذج ذاكرة x86

في مجال الحوسبة ، تعد نماذج ذاكرة x86 مجموعة من ستة نماذج ذاكرة مختلفة لوحدة المعالجة المركزية x86 التي تعمل في الوضع الحقيقي والتي تتحكم في كيفية استخدام سجلات القطاعات والحجم الافتراضي للمؤشرات.

تجزئة الذاكرة

تُستخدم أربعة سجلات للإشارة إلى أربعة قطاعات في بنية الذاكرة المجزأة x86 ذات 16 بت. وهي: DS ( قطاع البيانات )، و CS ( قطاع التعليمات البرمجية )، و SS ( قطاع المكدس )، و ES (القطاع الإضافي). يمكن لسجل آخر ذي 16 بت أن يعمل كإزاحة داخل قطاع معين، ولذلك يُكتب العنوان المنطقي على هذه المنصة كالتالي : قطاع : إزاحة ، عادةً بالصيغة الست عشرية . في الوضع الحقيقي، لحساب العنوان الفيزيائي لبايت من الذاكرة، يقوم الجهاز بإزاحة محتويات سجل القطاع المناسب بمقدار 4  بتات إلى اليسار (أي الضرب في 16)، ثم يضيف الإزاحة.

على سبيل المثال، ينتج عن العنوان المنطقي 7522:F139 العنوان الفعلي المكون من 20 بت:

 75220
+F139
 84359

تجدر الإشارة إلى أن هذه العملية تؤدي إلى تداخل عناوين الذاكرة، بحيث يكون لكل عنوان فعلي ما يصل إلى 4096 عنوانًا منطقيًا مقابلًا. وهذا يُعقّد مقارنة المؤشرات إلى قطاعات مختلفة.

أحجام المؤشرات

تُعرف تنسيقات المؤشرات باسم قريب ، أو بعيد ، أو ضخم . تقوم كل من هذه الأمثلة بتحميل عددين صحيحين متجاورين في AX و DX من عنوان مخزن في [reg].

  • المؤشرات القريبة هي إزاحات 16 بت داخل مقطع المرجع، أي DS للبيانات وCS للتعليمات البرمجية. وهي أسرع المؤشرات، لكنها محدودة بالإشارة إلى 64  كيلوبايت من الذاكرة (إلى المقطع المرتبط بنوع البيانات). يمكن تخزين المؤشرات القريبة في سجلات (عادةً BX وSI وDI).
mov bx , word [ reg ] mov ax , word [ bx ] mov dx , word [ bx + 2 ]
  • المؤشرات البعيدة هي مؤشرات 32 بت تحتوي على مقطع وإزاحة. لاستخدامها، يُستخدم سجل المقطع ES باستخدام التعليمة [ 1 ]LES Reg, dword ptr [mem] .يمكنها الإشارة إلى ما يصل إلى 1024 كيلوبايت من الذاكرة. تجدر الإشارة إلى أن العمليات الحسابية على المؤشرات (الجمع والطرح) لا تُعدّل جزء المقطع من المؤشر، بل تُعدّل إزاحته فقط. العمليات التي تتجاوز حدود الصفر أو 65535 (0xFFFF) ستخضعلعملية باقي القسمة على 64 كيلوبايت تمامًا مثل أي عملية عادية 16 بت. على سبيل المثال، إذا تم ضبط سجل المقطع على 0x5000 وتمت زيادة الإزاحة، فعندما تصبح إزاحة العداد هذه (0x10000)، سيعود العنوان المطلق الناتج إلى 0x5000:0000.  
les bx , dword [ reg ] mov ax , word [ es : bx ] mov dx , word [ es : bx + 2 ]
  • المؤشرات الضخمة هي في الأساس مؤشرات بعيدة، ولكن يتم تطبيعها (غالباً) في كل مرة يتم تعديلها بحيث يكون لها أعلى مقطع ممكن لهذا العنوان. هذه العملية بطيئة للغاية، لكنها تسمح للمؤشر بالإشارة إلى مقاطع متعددة (أي أن يمتد على أكثر من 64  كيلوبايت)، وتتيح إجراء مقارنات دقيقة للمؤشرات، كما لو كانت المنصة نموذج ذاكرة مسطح : فهي تمنع التداخل في الذاكرة كما هو موضح أعلاه، لذا فإن مؤشرين ضخمين يشيران إلى نفس موقع الذاكرة يكونان متساويين دائمًا.
les bx , dword [ reg ] mov ax , word [ es : bx ] add bx , 2 test bx , 0xfff0 jz lbl sub bx , 0x10 mov dx , es inc dx mov es , dx lbl: mov dx , word [ es : bx ]

في الواقع، قد يُحسّن المُصرّف شيفرة المؤشر الضخم المذكورة أعلاه دون استخدام أي تفرعات. يُنقص هذا الإصدار قيمة المقطع بشكل غير مشروط، وللتعويض عن ذلك، تُضاف قيمة طول المقطع (0x10) إلى BX. على عكس مثال المؤشر الضخم السابق ، لا يتطلب هذا الإصدار تطبيع إزاحة المقطع.

les bx , dword [ reg ] mov ax , word [ es : bx ] mov dx , es dec dx mov es , dx mov dx , word [ es : bx + ( 2 + 0x10 )]

نماذج الذاكرة

نماذج الذاكرة هي:

نموذجبياناتشفرةتعريف
صغير الحجمقريبCS=DS=SS=ES
صغيرقريبقريبDS=SS
واسطةقريببعيدDS=SS، مقاطع رمزية متعددة
صغير الحجمبعيدقريبمقطع رمز واحد، مقاطع بيانات متعددة
كبيربعيدبعيدأجزاء متعددة من التعليمات البرمجية والبيانات
ضخمضخمبعيدأجزاء متعددة من التعليمات البرمجية والبيانات؛ قد يتجاوز حجم المصفوفة الواحدة 64  كيلوبايت
يقتصر حجم المكدس دائمًا على 64  كيلوبايت كحد أقصى.

منصات أخرى

في الوضع المحمي، لا يمكن أن يكون المقطع قابلاً للكتابة والتنفيذ في آنٍ واحد. [ 2 ] [ 3 ] لذلك، عند تطبيق نموذج الذاكرة المصغرة، يجب أن يشير سجل مقطع التعليمات البرمجية إلى نفس العنوان الفيزيائي وأن يكون له نفس الحد الأقصى لسجل مقطع البيانات. وقد أدى ذلك إلى تعطيل إحدى ميزات معالج 80286 ، التي تضمن عدم إمكانية تنفيذ مقاطع البيانات وعدم إمكانية كتابة مقاطع التعليمات البرمجية (مما يعني عدم السماح بتعديل التعليمات البرمجية ذاتيًا ). مع ذلك، في معالج 80386 ، بفضل وحدة إدارة الذاكرة المُصفحة، يُمكن حماية صفحات الذاكرة الفردية من الكتابة. [ 4 ] [ 5 ]

لا تقتصر نماذج الذاكرة على البرامج ذات 16 بت. من الممكن استخدام التجزئة في الوضع المحمي ذي 32 بت أيضًا (مما ينتج عنه مؤشرات 48 بت)، وتوجد مترجمات للغة C تدعم ذلك. [ 6 ] مع ذلك، لا تسمح التجزئة في الوضع ذي 32 بت بالوصول إلى مساحة عناوين أكبر مما يغطيه مقطع واحد، إلا إذا لم تكن بعض المقاطع موجودة دائمًا في الذاكرة، وتُستخدم مساحة العناوين الخطية كذاكرة تخزين مؤقتة فوق مساحة افتراضية مجزأة أكبر.

x86-64

في منصة x86-64 ، يوجد سبعة نماذج ذاكرة، [ 7 ] حيث أن معظم مراجع الرموز لا تتجاوز 32 بت، وذلك إذا كانت العناوين معروفة وقت الربط (على عكس التعليمات البرمجية المستقلة عن الموقع ). لا يؤثر هذا على المؤشرات المستخدمة، والتي تكون دائمًا مؤشرات مسطحة 64 بت، بل يؤثر فقط على كيفية وضع القيم التي يجب الوصول إليها عبر الرموز.

انظر أيضاً

فهرس

  • دليل مستخدم Turbo C++ الإصدار 3.0 . شركة بورلاند الدولية، حقوق الطبع والنشر 1992.

مراجع

  1. ^ "مجموعة تعليمات Intel - LES" . صفحات مجموعة تعليمات Intel . جامعة اسطنبول تكنيك / إنتل . تم الاسترجاع 19 أكتوبر، 2015 .
  2. "دليل مطوري معمارية Intel 64 و IA-32: المجلد 3A" . Intel. الصفحات 3-17 . تم الاطلاع عليه بتاريخ 13 سبتمبر 2011 . 
  3. "دليل مبرمج معمارية AMD64، المجلد 2: برمجة النظام" ( ملف PDF) . AMD. الصفحات 82-84 . تم الاطلاع عليه بتاريخ 13 سبتمبر 2011 . 
  4. "دليل مطوري معمارية Intel 64 و IA-32: المجلد 3A" . Intel. الصفحات 4-41 . تم الاطلاع عليه بتاريخ 13 سبتمبر 2011 . 
  5. "دليل مبرمج معمارية AMD64، المجلد 2: برمجة النظام" (ملف PDF) . AMD. صفحة 139. تم الاطلاع عليه بتاريخ 13 سبتمبر 2011 . 
  6. "مرجع لغة C لـ Open Watcom، الإصدار 2" (ملف PDF) . github.com/open-watcom . Open Watcom . تم الاطلاع عليه بتاريخ 10 يناير 2018 .
  7. "واجهة التطبيق الثنائية لنظام التشغيل V، ملحق معالج بنية AMD64، مسودة الإصدار 0.99.7" (PDF) . الصفحات 33-35 .