بررسی ریزپردازنده ها ، اجزای سازنده آن ها و وظایف اجزا (قسمت دوم)

بازدید: 2570 بازدید
بررسی ریزپردازنده ها

در قسمت قبلی بررسی ریزپردازنده ها و میکروکنترلرها، قسمت های تشکیل دهنده ریزپردازنده ها و انواع حافظه توضیح داده شد و در این بخش به انواع رجیسترهای CPU در زبان اسمبلی پرداخته شده است.

معرفی انواع رجیستر در ریزپردازنده ها

رجیستر ها با عبارت ثبات نیز شناخته می شوند. رجیسترهای CPU حافظه های ۸، ۱۶، ۳۲ و ۶۴ بیتی هستند که در پردازنده مرکزی قرار گرفته اند و برای افزایش سرعت حلقه های تکرار، عملیات محاسباتی و دستورات تصمیم گیری در داخل حلقه از رجیسترهای CPU استفاده می کنیم.

رجیسترها وظیفه حفظ داده‌هایی که CPU درحال پردازش آن‌هاست را دارد. رجیسترها را می توان در دسته بندی های کاملا مستقل قرار داد. در زیر به این دسته بندی ها اشاره شده است.

  1. رجیسترهای سگمنت
  2. رجیسترهای عمومی (همه منظوره)
  3. رجیسترهای اَندیس (اشاره گر)
  4. رجیسترهای کنترلی (فلگ)
  5. رجیسترهای ایندکس

در جدول زیر تعداد بیت های قابل دسترس در رجیسترها با سایز های متفاوت و اطلاعات جزیی دیگر آورده شده است.

اندازه رجیستر مشخصه تعداد بیت ها در دسترس مثال
۸ بیت B ۰-۷ MOV R9B, R10B
۱۶ بیت W ۰-۱۵ MOV R10W, AX
۳۲ بیت D ۰-۳۱ MOV R14D, R15D
۶۴ بیت ۰-۶۳ MOV R13, R12

در ادامه به معرفی هر یک از ۵ دسته از رجیسترهای عنوان شده می پردازیم.

رجیستر سگمنت

سگمنت ناحیه ای از حافظه است و طول هر سگمنت با limit مشخص می گردد و برای آدرس دهی به هر یک از سگمنت های برنامه یک رجیستر وجود دارد که تعیین می کند کدام بخش از حافظه برای قسمت های مختلف برنامه به کار رفته است.

رجیسترهای سگمنت انواع متفاوتی دارند که به طور مختصر در زیر به آن ها اشاره شده است.

  1. Code segment: به اختصار CS خوانده می شود. آدرس سگمنت در این بخش نگهداری می شود. شامل آدرس شروع سگمنت کد است که به CPU می فهماند دستورالعمل های برنامه در کجا قرار دارند در واقع در این بخش دستورات زبان ماشین قرار می گیرند.
  2. Data segment: به اختصار DS خوانده می شود. این بخش شامل آدرس شروع سگمنت داده است و به CPU می فهماند که محل داده ها و فضای کاری در کجا قرار دارد. به طور کلی در این بخش داده ها و ناحیه کاری قرار داده می شود. طول این سگمنت در پردازنده های ۸۰۸۶-۸۰۲۸۶ برابر با ۶۴k است و ۴G در پردازنده های ۸۰۳۸۶ و پردازنده های بعد از این پردازنده می باشد.
  3. Extra segment: به اختصار ES خوانده می شود. آدرس سگمنت اضافی در این بخش قرار می گیرد. این سگمنت برای انجام عملیات بر روی رشته ها مورد استفاده قرار می گیرد. قابل ذکر است که در این بخش آدرس سگمنت اضافی اول قرار می گیرد.
  4. Stack segment: به اختصار SS خوانده می شود. آدرس سگمنت پشته در این قسمت نگهداری می شود. در این بخش آدرس های بازگشت از زیربرنامه ها قرار می گیرد.
  5. F segment و G segment: این دو سگمنت وظیفه نگهداری آدرس سگمنت اضافی دوم و سوم را به ترتیب دارند.

رجیستر عمومی

رجیسترهای عمومی به صورت های ۸، ۱۶، ۳۲ و ۶۴ بیتی قابل استفاده می باشند.

این رجیسترها در حالت ۱۶ بیتی با نام های CX ،BX ،AXو DX شناخته می شوند. 

در حالت ۳۲ بیتی به ابتدای آن ها E اضافه می شود و به صورت EDX ،ECX ،EBX ،EAX شناخته می شوند.

در حالت ۶۴ بیتی در ابتدای آن ها R قرار داده می شود و به صورت RCX ،RBX ،RAX و RDX نام گذاری می شوند.

در حالت ۸ بیتی رجیسترهای ۱۶ بیتی به دو بایت تقسیم شده و دو رجیستر ۸ بیتی را ایجاد می کنند. بایت سمت راست را با ارزش پایین تر Low و بایت سمت چپ با ارزش بالاتر را High می نامند و در این حالت رجیسترهای ۸ بیتی به صورت AL, BL, CL, DL, AH, BH, CH, DH شناخته می شوند.

هر کدام از رجیستر های ذکر شده وظیفه مشخصی را دنبال می کنند. در واقع این نوع رجیسترها به ۴ دسته قابل تقسیم می باشند.

  1. Accumulator: این رجیستر در عملیات ورودی-خروجی و محاسبات زیاد مورد استفاده قرار می گیرد. این رجیستر نزدیک رجیستر به ALU است و به همین دلیل سرعت محاسباتی بالایی دارد.
  2. Base: این رجیستر که رجیستر پایه گفته می شود در آدرس دهی مورد استفاده قرار می گیرد. این رجیستر علاوه بر همه منظوره بودن، در برخی روش های آدرس دهی نقش رجیستر پایه را دارد.
  3. Counter: در لغت به معنی شمارنده است. به عنوان یک شمارنده در دستورالعمل های حلقه و یا پردازش رشته و همچنین دستورالعمل های دستکاری بیت ها استفاده می شود. به عنوان مثال از این رجیستر برای کنترل حلقه های تکرار استفاده کرد. هم چنین در عملیات شیفت می توان تعداد شیفت ها را توسط این قسمت کنترل کرد.
  4. Data: از این رجیستر برای گسترش رجیستر Accumulator استفاده می شود. این رجیستر در اعمال ورودی-خروجی و هنگام انجام عملیات ضرب و تقسیم مورد استفاده قرار می گیرند.

رجیستر اَندیس

رجیسترهای اَندیس به عنوان بخشی برای نگه داری بخش offset در آدرس دهی است (در بخش های بعدی به این موضوع پرداخته خواهد شد.) (آفست با گسترش یافته سگمنت جمع شده و آدرس نهایی را در اختیار ما قرار می دهند که از مدهای آدرس دهی است) طبق پیش فرض رجیسترهای عمومی و اشاره گر همراه با DS و رجیسترهای پشته همراه با SS و IP همراه با CS استفاده می شود.

  1. Instruction Pointer: که در حالت های ۱۶، ۳۲ و ۶۴ بیتی به ترتیب به صورت IP,EIP, RIP مشخص می شوند. این رجیستر شمارنده برنامه آدرس دستورالعمل بعدی که باید توسط پردازنده اجرا شود را نگه می دارند.
  2. Stack pointer: این  رجیستر در حالت های ۱۶ بیتی، ۳۲ بیتی و ۶۴ بیتی به ترتیب به صورت SP, ESP, RSP مشخص می شوند. این رجیستر آفست بالای پشته را در خود نگه می دارد.
  3. Base pointer: از این رجیستر در فراخوانی زیربرنامه مورد استفاده قرار می گیرد. برای دسترسی به متغیرهای محلی که در پشته قرار دارند استفاده می شود. این رجیستر آدرس پشته جاری را نگه می دارد. این رجیستر در حالت های ۱۶، ۳۲ و ۶۴ بیتی با عبارات BP, EBP, RBP مشخص می گردند.

رجیستر کنترلی

رجیستر کنترلی

رجیسترهای کنترلی یا رجسیترهای وضعیت یا رجیسترهای flag یا همان پرچم نتایج اجرای دستورالعمل قبلی و وضعیت پردازنده را ذخیره می کند. این نتایج به صورت مستقل در رجیسترهای ۱۶ بیتی FLAG و در ۳۲ بیتی EFLAGS و در ۶۴ بیتی RFLAGS ذخیره می شوند. هر یک از این بیت ها FLAG نامیده می شود که می توانند دارای مقادیر صفر و یا یک باشند. قابل ذکر است که همه دستورات بر روی بیت های فلگ تاثیر گذار نبوده و فقط برخی از دستورالعمل ها مقادیر این بیت ها را دچار تغییر می کنند.

هر پرچم یک بیت است که به طور گسترده در دستورات پرش شرطی مورد استفاده قرار می گیرد.

  1. Carry: این بیت را بیت اضافی نیز می نامند. این بیت برای نگه داری عدد اضافی ایجاد شده در عملیات است. هنگام انجام عملیات محاسباتی یا شیفت در صورتی که رقم نقلی اتفاق بیفتد این بیت آن را که با ارزش ترین بیت می باشد در خود نگه می دارد.
  2. Parity: به این بیت بیت توازن هم گفته می شود و برای کنترل صحت داده ها به کار می رود. بیت توازن بیتی است که برای تعیین زوج و یا فرد بودن تعداد بیت هایی است که مقدار آن ها یک است. بیت توازن در ساده ترین شکل برای مشخص کردن خطای کد به کار می رود. هنگامی که از توازن زوج استفاده می شود، اگر تعداد یک های ورودی زوج باشد، بیت توازن صفر است و بالعکس و هنگامی که از توازن فرد استفاده شود اگر تعداد یک های ورودی فرد باشد بیت توازن صفر می شود و بالعکس. برای محاسبه بیت توازن زوج باید حاصل XOR بیت های ورودی را محاسبه کرد و برای محاسبه بیت های توازن فرد باید حاصل XNOR بیت های ورودی را محاسبه کرد.
  3. Auxiliary carry: این بیت رقم نقلی ایجاد شده از بیت سوم به بیت چهارم در محاسبات ۸ بیتی را در خود نگه می دارد. این بیت را می توان بیت اضافی کمکی نیز هم نامید.
  4. Zero: همان بیت صفر است. هنگامی که در محاسبات یا مقایسه ها حاصل برابر با صفر شود مقدار این بیت برابر با یک خواهد شد.
  5. Sign: در صورت منفی بودن نتیجه عملیات محاسباتی مقدار این بیت برابر با یک می شود و در غیر این حالت مقداری برابر با صفر خواهد داشت.
  6. Trap: به معنی گام به گام می باشد و برای اینکه دستورالعمل های یک برنامه به صورت قدم به قدم اجرا گردند نیازمندیم که مقدار این بیت برابر با یک باشد.
  7. Interrupt: در صورتی که مقدار این بیت برابر با یک باشد سیستم به وقفه پاسخ می دهد و وقفه فعال است و در صورتی که مقدار آن برابر با صفر باشد سیستم رخداد وقفه را نادیده می گیرد.
  8. Direction: در هنگام پردازش رشته ها در صورتی که مقدار آن یک باشد از سمت راست و در صورتی که مقدار آن صفر باشد عملیات از سمت چپ انجام می شود.
  9. overflow: بهآن بیت سرریز هم می گویند. هنگامی که در محاسبات آخرین بیت به دلیل سرریز شدن از بین برود این بیت مقدارش برابر با یک خواهد شد.
  10. I/O privilege level: این بیت در حالت protected mode که در قسمت های بعدی درباره آن ورود خواهیم کرد مورد استفاده قرار می گیرد و برای انتخاب سطح اولویت در I/O ها مورد استفاده قرار می گیرد. اگر سطح اولویت فعلی بیشتر از IOPL  باشد، I / O بدون مانع اجرا می شود. اگر IOPL پایین تر از سطح اولویت فعلی باشد، وقفه رخ می دهد، و سبب معلق شدن اجرای I/O می گردد. توجه داشته باشید که IOPL 00 دارای بالاترین میزان اعتماد است و IOPL 11 دارای کمترین میزان اعتماد است.
  11. nested task: وظیفه کنترل سلسله وقفه ها را دارد. در صورتی که مقدار آن برابر با یک باشد، فرآیند جاری به فرآیند بعدی لینک می شود.
  12. resume: وظیفه پاسخ گویی به موارد خاص و استثنا را بر عهده دارد. از مقدار این بیت برای کنترل اجرای برنامه و انجام فرآیند اشکال زدایی بهره گرفته می شود.
  13. virtual mode: این بیت این اجازه را صادر می کند که برنامه سیستم چندین برنامه DOS را اجرا کند.
  14. alignment check: در صورتی که مقدار این بیت برابر با یک باشد بررسی alignment در ارجاعات حافظه انجام می پذیرد.
  15. virtual interrupt: این بیت نسخه ای کپی از بیت فلگ وقفه در میکروپروسسورهای پنتیوم ۴ است.
  16. virtual interrupt pending: اگر وقفه ای وجود داشته باشد اما به دلیل وجود عواملی مانند اولویت وقفه آن وقفه معلق باشد مقدار این بیت برابر با یک خواهد شد.
  17. identification: این بیان گر این موضوع است که ریزپردازنده های pentium4  از دستورالعمل های CPUID پشتیبانی می کنند. دستورالعمل های CPUID اطلاعاتی مرتبط با ریزپردازنده های پنتیوم را فراهم می کند.

رجیستر ایندکس

دو رجیستر ایندکس وجود دارد که به عنوان اشاره گر برای دسترسی به داده های موجود در سگمنت داده به کار می روند. این رجیسترها در اندازه های ۱۶، ۳۲ و ۶۴ بیتی می توانند با اهداف دیگر، مانند رجیسترهای عمومی استفاده شوند.

  1. Source index: این رجیستر که در حالت ۱۶ بیتی به صورت SI شناخته می شود مانند موارد قبلی در حالت ۳۲ بیتی با عبارت ESI و در حالت ۶۴ بیتی با عبارت RSI شناخته می شود. این رجیستر در عملیات رشته ای آدرس رشته منبع را در خود نگه می دارد.
  2. Destination index: از این رجیستر در عملیات رشته ای برای نگهداری آدرس رشته مقصد بهره برده می شود. این رجیستر در حالات ۱۶، ۳۲ و ۶۴ بیتی به ترتیب به صورت RDI, EDI, DI نمایش داده می شوند.

منبع : نواندیشان

ادامه مطلب