/into the Low Level: Registers (0x03)

into the Low Level: Registers (0x03)

ان لم تكن قد تطرقت الى المقالات السابقه برجاء مراجعتها قبل البدء بقراءة تلك المقاله
1- Into the Low Level : Memory Addressing 0x01
فى المقال الاولي تحدثنا عن الريجسترات مثل ريجسترات الاقسام، ولكن ماهى تلك الريجسترات؟
الريجسترات هى عباره عن اسرع انواع الذاكره وتوجد فى المعالج لنقل البيانات من الذاكره للمعالج، او العكس او تساعد فى تقسيم الذاكره وعنونتها والكثير من الاغراض الاخري بأختلاف انواع الريجسترات. فلنستعيد ماقرأناه فى اول مقال ” تستخدم ريجسترات الاقسام لتقسيم الذاكره فى ال Real Mode Segmented model” .
عدد ريجسترات الاقسام كان اربعه قديما ( فى 8088 و8086). كل منهم يحمل عنوان قسم فى الذاكره اثناء تنفيذ اي برنامج. ولك زِيدت تلك الريجسترات اثنان فى 80386 ويمكن ايضا استخدامها فى ال Real Mode Segmented Model.
 هل تذكر؟ فى المقاله الاولي “فى الريل مود كانت ريجسترات الاقسام تسع 16 بيت” وكانت تحمل اي عنوان بداخلها لذاكره حجمها 64 كيلوبايت. فكان المعالج دائما يلجأ الى ريجسترات الاقسام عند عنونه اي قطعه من الذاكره.
الريجسترات تحمل اسماء تستخدم فى لغه التجميع ( الاسمبلي)  وريجسترات الاقسام تحمل الاسماء التاليه :-
  • CS – Code Segment
  • DS – Data Segment
  • SS – Stack Segment
  • ES – Extra Segment
  • FS
  • GS
اول اربع ريجسترات كان يتم استخدامهم فى 8088 , 8068 اما اخر اثنان هما الذان تم اضافتهما فى 80386 و سميا كذلك ليتبعا ES (E-F-G). تبعا للابجديه الانجليزيه.
ولكن فى بدايه اقلاع (boot) اي نظام تشغيل يكون حجم جميع ريجسترات الاقسام 16 بيت حتي يتم الانتقال من ال Real Mode الى Protected Mode. هنا يكون حجم جميع ريجسترات الاقسام 32 بيت. ولكن لنعود الى انواع ريجسترات الاقسام.. ماهى اقسام الكود والداتا والستاك؟؟
تحدثنا فى اول مقال عن ال ldt/gdt  وانه يتم فيهم تعريف اقسام الكود والداتا…الخ. ولكن لم نوضح ماهى تلك الاقسام..فى ال Real Mode كان يتم تعريف الاقسام عن طريق ريجسترات التقسيم كما تعرف فكان ال CS يحمل عنوان الكود…وهو الجزء الذي يحمل الثنائيات (Binaries) الخاصه بالكود والذي سيتم تنفيذه لذلك فهو قابل للتنفيذ. اما ال DS فهو يحمل عنوان عنوان القسم الذي يحوي ال داتا ( غالبا ماتكون تلك الثنائيات متغيرات جلوبال). وهو قسم غير قابل للتنفيذ ولكن يساعد الكود فى التنفيذ ويحمل بعض البيانات التى اثناء التنفيذ. SS يحمل عنوان قسم الستاك ( او المخرن ) والستاك غير قابله للتنفيذ ايضا. ولكن تحمل بعض المعلومات والتى تساعد الكود على التنفيذ فهي تحمل المتغيرات اللوكال(Local) وتحمل عناوين بالذاكره ولها اغراض اخري. وتتغير محتويات تلك الريجسترات عند تنفيذ اي ملف ثنائي اخر.
General Purpose Registers :-
ريجسترات الاغراض العامه.. ﻷن ريجسترات الاقسام لايمكن استخدامها الا فى تقسيم وعنونه الذاكره ( دا المفروض) . يأتي دور الريجسترات ذات الاغراض العامه فهى تستخدم فى حمل قيمه الازاحه لعنونه مكان معين بالذاكره ( تذكر الازاحه والقسم من المقاله الاولي) . وايضا تستخدم فى حمل قيم ليتم عليها العمليات الحسابيه. واغراض اخري عديده
بدايهً، كما كانت سعة ريجسترات الاقسام قديما 16 بيت كانت ايضا سعة ريجسترات الاغراض العامه 16 بيت فى 8068 و 80286 وماقبل ذلك ولكن زادت تلك السعه لتكون 32 فى 80386 ومابعد ذلك وزادت ايضا مؤخرا لتكون 64 فى ال x86-64 و AMD64 ( ايضا ريجسترات الاقسام). ولكننا على مسافه من تحول العالم من 32 الى 64 بيت لذا سنناقش على اساس وجود 16 و 32 بيت.
لنعود الى موضوعنا، الريجسترات ذات الاغراض العامه تنقسم الى ثلاث :-
  • الريجسترات ذات الاغراض العامه 16 بيت
  • الريجسترات الممدوده ذات الاغراض العامه 32 بيت
  • انصاف ريجسترات ذات اغراض عامه 8 بيت
تلك الثلاث تقسيمات ليست انواع للريجسترات ولكنا انواع لاستخدام الريجسترات ذات الاغراض العامه. وتختلف فى الاسماء فإن الريجسترات صاحبه المساحه 16 و 8 ماهى الا اجزاء داخل الريجستر الممدد ذو المساحه 32 بيت. فعندما تم تحويل الريجسترات من 16 الى 32 بيت لم تستبدل المساحه ولكن استبدلت الاسماء ليكون الريجستر العادي 16 بيت والممدد 32 بيت وبذلك يمكنك استخدام الريجستر بأكثر من طريقة.
اسماء الريجسترات ذات الاغراض العامه كالتالي ( وهى عددها ثمانيه)  AX, BX, CX, DX, BP, SI, DI, SP كل هذه الريجسترات حجمها 16 بيت وهى التى كانت موجوده ب 8086 و 8088 و 80286.
وعند زياده حجم الريجسترات الى 32 بيت تم تغيير اسماء الريجسترات الحديثه وتم بقاء الاسماء القديمه كما هى تشير الى الريجسترات ذات الحجم 16 بيت. اما  الريجسترات ذات الحجم 32 بيت فأسماءها كالتالى : EAX, EBX, ECX, EDX,EBP, ESI, EDI, ESP
ذلك الشكل يوضح كيفيه تقسيم الريجسترت الى انصاف وريجسترات عاديه وممدده
 كما تري بالشكل فأءن من البيت 0 الى 7 تشير اليها انصاف الريجسترات اليمني او المنخفضه اما من 8 الى 15 فتشير اليها انصاف الريجسترات اليسري او العليا. وتشير الريجسترات العاديه من البيت 0 الى 15 اما من 0 الى 31 فتشير اليها الريجسترات الممدده.
سأناقش العدد القادم بعض الامثله واستكمل الحديث عن ال ريجسترات بأذن الله