Web Programming C++ SQL Server پایگاه داده ساختمان داده   صفحه اصلی
  زبان اسمبلى > پردازنده  
 
 

پردازنده


نوشتن یک برنامه اسمبلی به درک خوبی از معماری ریزپردازنده نیاز دارد ازین رو در این بخش روی معماری کامپیوتر تمرکز می کنیم. با مطالعه این بخش دانش بيشتری نسبت به مفاهيم سخت افزار مثل ثبات ها پيدا می کنید که در برنامه نویسی موردنیاز است.

خانواده 80x86
گذرگاه های سیستم
ساعت سیستم
مجموعه دستورالعمل ها
مجموعه ثبات ها


یک سیستم کامپیوتری از سه قسمت اصلی تشکیل شده است؛ واحد پردازشگر مرکزی، حافظه و دستگاه های ورودی/خروجی (I/O). پردازنده یا واحد پردازش مرکزی (Central Processing Unit) یا CPU جایی است که کلیه عملیات در آن انجام می شود. داده ها و دستورات در حافظه قرار می گیرند تا زمانیکه در CPU به آنها نیاز باشد. خواندن و نوشتن محتویات حافظه، انتقال داده بین حافظه و ثبات های داخلی، رمزبرداری و اجرای دستورالعمل های ذخیره شده در حافظه اصلی از کارهای پردازنده است. دستگاه های I/O برای پردازنده مشابه حافظه هستند زیرا می تواند داده را در یک دستگاه خروجی بنویسد و یا داده ای را از یک دستگاه ورودی بخواند.

CPU Buses

خانواده 80x86

کامپیوترهای شخصی پردازنده ای از خانواده x86 یا سازگار با آن دارند. خانواده x86 بر اساس معماری اولیه پردازنده 8086 شرکت اینتل (Intel) هستند که در سال 1978 معرفی شد. اصطلاح x86 به این دلیل است که خانواده اینتل دارای چندین پردازنده است که بعد از 8086 آمدند و شماره آنها به 86 ختم می شود نظیر 80286، 80386، 80486. پردازنده های این خانواده همگی دارای ویژگی های مشترکی ازجمله زبان ماشین پایه یکسان هستند. البته اعضای جدید در حین سازگاری با پیشینیان قابلیت های خود را نیز افزایش داده اند.

اکثریت کامپیوترهای شخصی و لپ تاپ ها بر اساس معماری x86 هستند. پردازنده های Cyrix، AMD، VIA و بسیاری شرکتهای دیگر نیز از همین معماری تبعیت کردند.

تعدادی از پردازنده های این خانواده x86 بدین شرح می باشند:

(1979)8088,(1978)8086
این CPU ها، که از دیدگاه برنامه نویسی برابر هستند روی اولین کامپیوترهای شخصی به کار رفته اند. دارای ثبات های 16 بیتی AX، BX، CX، DX، SI، DI، BP، SP، CS، DS، SS، ES، IP و FLAGS هستند و تنها در مد حقیقی عمل می کردند. 8086 دارای گذرگاه داده 16 بیتی و گذرگاه آدرس 20 بیتی بود و می توانست با داده های 8 یا 16 بیتی همزمان کار کند. 8088 با گذرگاه داده 8 بیتی به طراحان اجازه پیچیدگی کمتر و ارزانتر سیستم های کامپیوتری را می داد.
(1983)80286
این پردازنده، که در کامپیوترهای شخصی کلاس AT استفاده شد، دستورالعمل های جدیدی را به زبان ماشین 8086 اضافه کرد. اما ویژگی اصلی آن مد محافظت شده 16 بیتی بود که در این حالت می توانست تا 16 مگابایت حافظه را دسترسی پیدا کند. البته برنامه ها همچنان به سگمنت هائی تقسیم بندی می شدند که نمی توانستند بیشتر از 64کیلوبایت باشند.
(1986)80386
اولین پردازنده 32 بیتی که توسط اینتل معرفی شد 80386dx بود که علاوه بر حفظ سازگاری با پردازنده های قبلی اجرای عالی داشت. این پردازنده تعدادی از ثبات ها را به 32 بیتی گسترش داد EAX, EBX, ECX, EDX, ESI, EDI, EBP,ESP EIP) و دو ثبات سگمنت جدید FS و GS را اضافه کرد. دارای گذرگاه های آدرس 32 بیتی بود و در مد محافظت شده 32 بیتی می توانست تا 4 گیگابایت حافظه فیزیکی را آدرس دهی کند. برنامه ها دوباره به سگمنت ها تقسیم می شدند اما اندازه هر سگمنت می توانست تا 4 گیگا بایت باشد. نسخه 16 بیتی آن 80386sx با گذرگاه آدرس 24 و داده 16 بیتی در 1988 بیرون آمد که تنها تا 16 مگابایت را دسترسی داشت.
(1989)80486
80486dx دارای حافظه نهان و کمک پردازنده ریاضی در یک تراشه بود که باعث سریع تر شدن آن نسبت به پردازنده 80386 شد. 80486sx هم معرفی شد که پیوند آن با میکروپروسسور ریاضی وجود نداشت.
(1993)Pentium/Pentium Pro
پنتیوم اولین پردازنده 64 بیتی بود. چند دستورالعمل را در یک زمان اجرا می کند و سرعت اجرای دستورالعمل ها را بالاتر برد. این پردازنده ها دارای گذرگاه داده 64بیتی و گذرگاه آدرس 32 بیتی هستند. پنتیوم درعین حال که کاملا با قبلی ها سازگاری دارد از نظر کارائی دوبار سریع تر از 80486 است و عملیات ممیزشناور را سریع تر انجام می دهد.
Pentium MMX
این پردازنده دستورات MMX (MultiMedia eXtensions) را به پنتیوم اضافه کرد. این دستورالعمل ها می توانند عملیات گرافیکی معمول را سرعت ببخشند.
(1997)Pentium II
این پردازنده توسعه یافته پنتیوم است که قادر است 4 پردازنده را همزمان پشتیبانی کند و به 64 گیگابایت حافظه دسترسی دارد. درواقع یک پردازنده پنتیوم پرو همراه با دستورالعمل های MMX است.
(1999)Pentium III/(2002)Pentium IV
این پردازنده ها تنها سرعت اجرای دستورالعمل ها را بالا بردند.

گذرگاه های سیستم

گذرگاه (Bus) در واقع مجموعه ای از سیمهاست که سیگنالهای الکتریکی را بین اجزای سیستم عبور می دهند و اجزای مختلف ماشین را بهم متصل می کنند. گذرگاه ها ممکن است روی پردازنده های مختلف متفاوت باشند ولی اطلاعاتی که حمل می کنند روی همه یکسان است. مثلا گذرگاه داده روی همه پردازنده ها داده را منتقل می کند. پردازنده های خانواده x86 دارای سه گذرگاه اصلی هستند: گذرگاه آدرس (Address Bus)، گذرگاه داده (Data Bus) و گذرگاه کنترل (Control Bus).

گذرگاه داده. گذرگاه داده برای انتقال داده بین اجزای مختلف است. اندازه این گذرگاه در خانواده اینتل متغیر است می تواند 16، 32 یا 64 خط داشته باشد. در واقع این گذرگاه اندازه پردازنده را مشخص می کند. وقتی به اصلاح می گویند پردازنده ای 32 بیتی است درواقع تعداد خطوط داده را بیان می کنند. اندازه گذرگاه داده روی سرعت اجرای سیستم تاثیر دارد پردازنده با گذرگاه داده بزرگتر سریعتر است. معمولا اندازه داده های برنامه هم مطابق با گذرگاه داده 16، 32 یا 64 بیتی هستند.

گذرگاه آدرس.گذرگاه آدرس محل حافظه ای که باید دسترسی شود را مشخص می کند. وقتی برنامه ای می خواهد به محل خاصی از حافظه دسترسی پیدا کند آدرس آن محل را روی گذرگاه آدرس قرار می دهد. حافظه آدرس را تشخیص می دهد و داده این آدرس را خوانده و روی گذرگاه داده قرار می دهد. با n خط آدرس پردازنده می تواند 2n آدرس مجزا را تولید کند. بنابراین تعداد بیت های گذرگاه آدرس درواقع بیشترین میزان فضای حافظه که قابل آدرس دهی هستند را مشخص می کند. برای مثال پردازنده 8086 دارای گذرگاه 20 بیتی است بنابراین می تواند به 220=1,048,576 محل حافظه دسترسی پیدا کند. گذرگاه های بزرگتر به حافظه بیشتری دسترسی دارند.

گذرگاه کنترل.گذرگاه کنترل مجموعه ای از سیگنالهاست که ارتباط پردازنده با سایر اجزای سیستم را کنترل می کند. برای نمونه دو خط read و write در گذرگاه کنترل جهت انتقال داده روی گذرگاه داده را مشخص می کنند. وقتی هردو یک هستند پردازنده و حافظه-I/O با یکدیگر در ارتباط نیستند. وقتی خط read صفر شود پردازنده درحال خواندن از حافظه است. اگر خط write صفر باشد داده از پردازنده به حافظه در جریان است یعنی درحال نوشتن در حافظه است.

اندازه گذرگاه های آدرس و داده در خانواده x86

پردازنده گذرگاه آدرس (بیت) بیشترین حافظه قابل دسترس معادل گذرگاه داده(بیت)
8088201,048,576One Megabyte8
8086201,048,576One Megabyte16
80186201,048,576One Megabyte16
802862416,777,216Sixteen Megabyte16
80386sx2416,777,216Sixteen Megabyte16
80386dx324,294,976,296Four Gigabytes32
80486324,294,976,296Four Gigabytes32
80586 / Pentium (Pro)324,294,976,296Four Gigabytes64

ساعت سیستم

روی پردازنده های x86 کلیه عملیات باید به صورت ترتیبی (Serialized) اجرا شوند. یعنی کامپیوتر دستورات را طبق یک ترتیب از قبل تعیین شده اجرا می کند. عملیات پردازنده باید کاملا هماهنگ باشد تا نتیجه اشتباهی پیش نیاید. برای اطمینان از اینکه هر کاری در لحظه مناسب اتفاق می افتد پردازنده از یک سیگنال بنام ساعت سیستم (Clock) بهره می برد. ساعت سیستم مدیریت همگام کردن عملیات درون کامپیوتر را برعهده دارد. ساعت در واقع یک سیگنال مربعی روی گذرگاه کنترل است که در یک پریود ثابت بین صفر و یک نوسان دارد. مدارهای الکترونیکی کامپیوتر از این ضربان ها برای انجام صحیح عملیات خود استفاده می کنند.

System Clock

تعداد ضربه ها یا اصطلاحا سیکل های مورد نیاز یک دستورالعمل بستگی به نسل و مدل CPU دارد.

زمانی که طول می کشد ساعت از صفر به یک برود و دوباره صفر شود را یک پریود می نامند. یک پریود کامل یک سیکل ساعت نامیده می شود. در یک سیستم جدید ساعت بیشتر از چندین میلیون بار در ثانیه بین صفر و یک نوسان دارد. فرکانس ساعت تعداد سیکل های ساعت در ثانیه است.

مثال. در تراشه 80486 سرعت ساعت 66 میلیون سیکل در ثانیه است یا به عبارتی 66 مگاهرتز است.

مثال. یک کامپیوتر با سرعت 1.5GHz درواقع ساعتی با فرکانس 1.5 GHz دارد. یعنی در هر ثانیه 1.5 میلیارد پالس می زند (گیگاهرتز GHz یا یک میلیارد سیکل در ثانیه است).

مجموعه دستورالعمل ها

مجموعه ای از تمام دستورالعمل هائی که یک نوع پردازنده می تواند اجرا می کند مجموعه دستورالعمل (Instruction Set) نامیده می شود که درواقع زبان ماشین آن نوع پردازنده را شکل می دهد. دستورالعمل های زبان ماشین به صورت اعداد رمز می شوند و عموما ساده هستند زیرا زبان ماشین با این هدف طراحی می شود که پردازنده قادر باشد مقصود دستورالعمل را سریع کشف کند تا بتواند به طور موثر آن را اجرا کند.

هر پردازنده زبان ماشین منحصر بفرد خود را دارد بنابراین مجموعه دستورالعمل از ماشینی به ماشین دیگر متفاوت است. به همین دلیل مثلا برنامه های نوشته شده برای Mac نمی توانند روی یک IBM-PC اجرا شوند. برنامه های نوشته شده در زبان های دیگر باید توسط کامپایلر به زبان ماشین پردازنده ای که روی آن اجرا می شود تبدیل شود. معمولا عملکرد کامپایلرها بر روی ماشین با دستورالعمل کمتر آسان تر است.

مجموعه ثبات ها

دستورالعمل ها اغلب نیاز به داده ای دارند تا روی آن عمل کند. هر پردازنده دارای تعداد محدودی سلول حافظه است که داده های دستورالعمل را در آنها ذخیره می کند. این سلول ها ثبات (register) نامیده می شوند و در خود تراشه پردازنده جا میگیرند. چون ثبات ها درون CPU هستند دسترسی به آنها به مراتب از حافظه سریعتر است. دسترسی به داده درون ثبات هیچ سیکل ساعتی نیاز ندارد در حالیکه برای دسترسی به محل های حافظه به یک یا چند سیکل ساعت نیاز است. بعنوان برنامه نویس اسمبلی باید سعی کنید تا جایی که می شود داده ها را در ثبات ها نگه دارید. البته تعداد ثبات ها اندک است بنابراین تنها داده های جاری را می توان در ثبات ذخیره کرد.

پردازنده های x86 دارای تعداد محدودی ثبات با کاربردهای متفاوت هستند. چون تعداد کمی ثبات وجود دارد برای آدرس دهی هر ثبات با اسمی که به آن داده شده است استفاده می شود. این ثبات ها را می توان به صورت زیر گروه بندی کرد:

• ثبات های همه منظوره
• ثبات های ایندکس
• ثبات های اشاره گر
• ثبات های سگمنت
• ثبات فلگ

ثبات های همه منظوره

پردازنده اولیه 8086 با چهار ثبات همه منظوره 16 بیتی طراحی شد که به صورت 8 یا 16 بیتی در دستورات محاسباتی و ورودی/خروجی استفاده می شدند. این ثبات ها در پردازنده های بعدی خانواده x86 به 32 و سپس 64 بیت گسترش پیدا کردند. بنابراین ثبات های همه منظوره را به چند طریق می توانند استفاده کرد: 64 بیتی، 32 بیتی، 16 بیتی، 8 بیتی.

General Registers

در حالت 16 بیتی با نامهای AX، BX، CX و DX مشخص می شوند. در حالت 32 بیتی حرف E به ابتدای آنها اضافه می شود (EAX، EBX، ECX، EDX). به همین صورت در حالت 64 بیتی پیشوند R جایگزین می شود (RAX، RBX، RCX، RDX).

16 بیت پایین این ثبات ها به دو بایت شکسته می شوند. بایت سمت راست را Low و سمت چپ را High می نامند که با حروف L و H مشخص می شوند.

اندازهمجموعه ثبات های همه منظوره
64RAX, RBX, RCX, RDX
32EAX, EBX, ECX, EDX
16AX, BX, CX, DX
8AH, AL, BH, BL, CH, CL, DH, DL

با وجودیکه می توان ثبات های همه منظوره برای هرکاری مورد استفاده قرار داد هرکدام یک یا چند وظیفه خاص بر عهده دارند.

Accumulator AL/AH/AX/EAX/RAX ثبات انباشتگر برای هر کاری از جمله عملیات ورودی/خروجی، رشته ای و محاسباتی به کار می رود
Base BL/BH/BX/EBX/RBX ثبات پایه که بعنوان اشاره گر پایه در آدرس دهی مورد استفاده قرار می گیرد
Counter CL/CH/CX/ECX/RCX ثبات شمارنده که تعداد دفعات را در حلقه های تکرار و دستورات شیفت/چرخش مشخص می کند
DataDL/DH/DX/EDX/RDXثبات داده برای گسترش ثبات انباشتگر در اعمال ورودی/خروجی و عملیات ضرب و تقسیم استفاده می شود

ثبات های ایندکس

دو ثبات ایندکس وجود دارد که اغلب به عنوان اشاره گر برای دسترسی به داده های موجود در سگمنت داده به کار می روند. در اندازه های 64، 32 و 16 بیتی می توانند به منظورهای دیگر، مانند ثبات های همه منظوره، هم استفاده شود.

Source IndexSI/ESI/RSI برای آدرس دهی و در عملیات رشته ای بعنوان مبدا استفاه می شود
Destination IndexDI/EDI/RDI برای آدرس دهی و در عملیات رشته ای بعنوان مقصد استفاه می شود

ثبات های اشاره گر

ثبات های اشاره گر نگهدارنده بخش آفست در آدرس دهی هستند و همراه با یکی از ثبات های سگمنت به محلی از حافظه اشاره دارند. طبق پیش فرض ثبات های همه منظوره و ایندکس همراه با DS و ثبات های پشته همراه با SS و IP همراه با CS استفاده می شوند.

Instruction PointerIP/EIP/RIP شمارنده برنامه آدرس دستورالعمل بعدی که باید توسط پردازنده اجرا شود را نگه می دارند
Stack PointerSP/ESP/RSP آدرس مکانی از سگمنت پشته که عمل قرار گرفتن داده در پشته صورت می گیرد. به عبارت دیگر به بالای پشته اشاره دارد
Base PointerBP/EBP/RBP برای دسترسی به متغیرهای محلی که در پشته قرار دارند استفاده می شود. آدرس قاب پشته جاری را نگه می دارد

ثبات های سگمنت

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

Code SegmentCS شامل آدرس شروع سگمنت کد، که به CPU می فهماند دستورالعمل های برنامه در کجا قرار دارند
Data SegmentDS شامل آدرس شروع سگمنت داده که به پردازنده می فهماند داده ها و فضای کاری در کجا قرار دارد
Stack SegmentSS شامل آدرس شروع سگمنت پشته
Extra SegmentES آدرس شروع سگمنت اضافی، سگمنت اضافه اول
F SegmentFS آدرس شروع سگمنت اضافی، سگمنت اضافه دوم
E SegmentES آدرس شروع سگمنت اضافی، سگمنت اضافه سوم

بیشتر برنامه ها روی سیستم عامل های جدید از مدل حافظه ای استفاده می کنند که کلیه ثبات های سگمنت را به یک محل اشاره می دهند.

ثبات فلگ

ثبات فلگ نتایج اجرای دستورالعمل قبلی و وضعیت پردازنده را ذخیره می کند. این نتایج به صورت بیت های مجزا در ثبات 32 بیتی EFLAGS ذخیره می شوند. هر کدام از این بیت ها فلگ (پرچم) نامیده می شوند چون می توانند یک(Set) یا صفر (Not Set) باشند. گرچه کلیه دستورات روی فلگ تاثیر نمی گذارند اما بسیاری از دستورالعمل ها وضعیت این بیت ها را تغییر می دهند.

0 123456789 10111213141516171819 20212223242526272829 3031
CFPFAFZFSFTFIF DFOFIOPLNT0RFVMACVIFVIP ID0000000000

بیت های فلگ عبارتند از:

CFCarry Flagرقم نقلی بوجود آمده از باارزش ترین بیت در عملیات محاسباتی یا چرخش
PFParity Flagاگر مجموع تعداد بیتهای 1 در کم ارزش ترین بایت زوج باشد یک و درغیراین صورت صفر می شود
AFAuxiliary Carryرقم نقلی بوجود آمده از بیت 3 به بیت 4 در یک بایت است که در عملیات BCD کاربرد دارد
ZFZero Flagاگر نتیجه عملیات محاسباتی صفر باشد یک می شود در غیر اینصورت صفر است
SFSign Flagدر صورت منفی بودن نتیجه عملیات این بیت یک است در غیر اینصورت صفر است
TFTrap Flagبرای اجرای دستورالعمل به صورت دستور به دستور این بیت باید یک باشد
IFInterrupt Flagاگر یک باشد وقفه فعال است و اگر صفر باشد وقفه غیر فعال است یعنی سیستم وقوع وقفه را نادیده می گیرد
DFDirection Flagاگر یک باشد اشاره گر درعمل مقایسه یا انتقال داده کاهش می یابد
OFOverflow Flagاگر یک باشد یعنی نتیجه محاسبات علامتدار سرریزی داشته است
IOPLI/O Privilege Levelدو بیت که سطح ارجحیت پروسس جاری را نشان می دهند
NTNested Taskزنجیره وقفه ها را کنترل می کند. اگر یک باشد پروسس جاری به پروسس بعدی لینک می شود
RFResume Flagبه استثناها پاسخ می دهد
VMVirtual-8086 Modeاگر یک باشد با 8086 سازگار می شود
ACAlignment Checkاگر یک باشد چک بررسی alignment در ارجاعات حافظه انجام می شود
VIFVirtual Interrupt Flag تصویر مجازی IF
VIPVirtual Interrupt Pending اگر وقفه ای معلق باشد یک می شود
IDIdentification Flagبرای پشتیبانی از دستور CPUID می تواند یک شود

نکته. این ثبات فاقد آدرس است و به طور مستقیم توسط برنامه نویس قابل دسترس نمی باشد.
نکته. بیتهایی که 0 یا 1 هستند رزرو هستند و تغییر نمی کنند.
نکته. ثبات فلگ در پردازنده 8086 تنها 16 بیت اول را شامل می شود.


دانلود PDF این درس


 


 

صفحه اصلی| درباره| تماس