الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في العنونة

مغلقمُجاب
بدأه مصطفى 36a2 في 14 ديسمبر 2013 · 2 رد · 1,151 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

باستخدام العنونة بمسجلات المقاطع , وكما تقول  ويكيبيديا

 

اقتباس
if DS contains the hexadecimal number 0xDEAD and DX contains the number 0xCAFE they would together point to the memory address 0xDEAD * 0x10 + 0xCAFE = 0xEB5CE. Therefore, the CPU can address up to 1,048,576 bytes (1 MB) in real mode. By combining segment and offset values we find a 20-bit address.

 

 

يتم إزاحة قيمة مسجل المقطع بمقدار 4 بت ثم جمع مسجل آخر .. المهم

السؤال هو : لماذا الحد هو 1Mb أليس من الممكن أن يكون DS=0xFFFF  و DX=0xFFFF وعندها يمكننا عنونة 1114095 بايت ؟

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 14 ديسمبر 2013 في 09:27

#2 أفضل إجابة

كما تعلم المعالج داخل نمط 16بت يستطيع التعامل مع قيمه أقصاها 20بت و بالتالي إذا وضعنا فى المسجلين FFFF ستكون النتيجه

FFFFh * 10h + FFFFh = 10FFEF

و عدد البت بها 24 بت و بالتالي هي غير صحيحه، و هذا يجعل أكبر قيمه يمكن إستخدامها كـ base address هى F000  لتصبح النتيجه:

F000 * 10 + FFFF = FFFFF

و هى 1MB المسموح بها داخل الـ real mode.

 

 

ملحوظة الفصل الأول من كتاب ++Memory Management Algorithms and Implementation in C/C يشرح الـ real/protected mode بإختصار، و يوجد كتاب يسمي Protected Mode Software Architecture يشرح من وجهة نظر برمجية نمط protected mode و يعطيك خلفية سريعه عن real mode.

 

 

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 14 ديسمبر 2013 في 17:18

3

مدونتي: C++ Tips and Tricks

#3

شكراً لك , أظن أن هذه المعلومة بحاجة إلى إضافة في ويكيبيديا .. ( لا زلت أقراً من هناك :p )

بارك الله فيك

هذا الموضوع مغلق.

مواضيع مشابهة