فهرست:
تاریخچه: 2
Intel 8085. 2
Intel 8086. 2
Intel 8088. 2
Math Co-Processor (کمک پردازنده های ریاضی) 2
توضیحات.. 2
درون یک پردازنده. 2
پردازنده فوق دارای : 2
حافظه های RAM و ROM... 2
دستورالعمل های ریزپردازنده 8088. 2
مدل |
8088 |
8055 |
تولید شده |
از 1979 تا 1990 |
از 1979 تا 1990 |
ماکسیمم CPU clock rate |
5 MHz تا 10 MHz |
3، 5 و 6 MHz |
سرعت FSB |
5 MHz تا 10 MHz |
-- |
ست عملکرد |
8080 |
|
ریزساختار |
-- |
|
تعداد هسته ها |
1 |
-- |
L1 کش |
بر اساس مادربرد |
-- |
پیشینه |
||
جانشین ها |
||
پکیج ها |
|
تاریخچه:
Intel 8085
شرکت اینتل با تغییراتی در پردازنده 8080, ریزپردازنده 8085 را به بازار عرضه کرد که مشابه پردازنده MC6800 فقط با ولتاژ +5V کار میکرد.
تراشه 8085 ترکیبی از سه تراشه 8080 به عنوان قسمت اصلی پردازنده , 8224 به عنوان راه انداز باس و 8228 به عنوان کنترل کننده باس سیستم می باشد .
تراشه 8085 یک پردازتده 8 بیتی بوده و در آن از تکنولوژی NMOS استفاده شده است . در این پردازنده حدودا 6200 ترانزیستور استفاده شده که به صورت یک IC چهل پایه ( Pin ) ساخته شده است .
پردازنده 8085 میتواند با 16 خط آدرس , تا 64 کیلو بایت از حافظه را به طور مستقیم و با 8 بیت مربوط به I/O تا 500 دستگاه ورودی , خروجی را آدرس دهی کند.
در این پردازنده فقط دو دستورالعمل به مجموعه دستوالعمل تراشه 8080 اضافه شده است که یکی از آنها مربوط به خواندن و نوشتن سریال اطلاعات و دیگری وقفه است .[2]
8086 و8088 در پردازنده های 8-بیتی بزرگترین بهبودی را داشته اند. معماری X86 در این پردازنده ها بکار گرفته شده است. این مبنایی بر بوجود آمدن معماری X86 در پردازنده ها شد. امروزه معماری X86 درجدیدترین مدل از پردازنده های Pentiumاستفاده می شود.
Intel 8086
(این پردازنده می توانست داده ها را به 65536 ترکیب مختلف با هم ترکیب کند، بنابراین نسبت به پردازندهای در حقیقت آزمایشی قبلی خود که 8 بیتی بودند و عملا هرگز در تاریخ کامپیوتر ، نقشی عملی و حائز اهمیت نداشتند،یک پردازنده واقعی محسوب می شد.
این تراشه شامل 29000 ترانزیستور و 20 خط آدرس بود که توانایی آدرس دهی 1 مگا بایت حافظه Ram را داشت . اما نکته جالب این است که طراحان کامپیوتر در آن زمان، هیچ وقت گمان نمی کردند که ممکن است کاربر یا سیستمی بیش از یک مگا بایت حافظه احتیاج داشته باشد. این تراشه در فرکانسهای 8،6،5 و 10 مگا هرتزی موجود بود.[3]
Intel 8088
این پردازنده عملا یک 8086 بود ، با این تفاوت که خطهای آدرس این پردازنده به گونه متفاوتی اداره می شد. این تراشه برای اولین کامپیوتر شخصی IBM انتخاب شده بود و مانند 8086 ، توانایی کار با کمک پردازندهای ریاضی 8087 را داشت. [4]
8088 یک باس داده 8 بیتی خارجی به جای 16 بیت باس 8086 دارد. ثبات های 16 بیتی و محدوده آدرس 1 مگابایتی آ تغییری نکرده است. درواقع بر اساس داکیومنشن اینل 8086 و 8088 دارای یک واحد اجرا (EU) هستند، فقط در واسط واحد باس تفاوت وجود دارد. [5]
Math Co-Processor (کمک پردازنده های ریاضی)
در پردازندهای قدیمی تر، تا قبل از I486 پردازندها واحد محاسبات اعشاری در خود نداشتند و یک تراشه دیگر به نام کمک پردازنده ریاضی مخصوص این کار وجود داشت که در کنار پردازنده اصلی نصب می شد . بعدها این قسمت حذف شد و این بخش تحت عنوان واحد محاسبات اعشاری FPU (Float Processing Unit) در درون پردازنده اصلی قرار گرفت. [6]
اولین ریزپردازنده ای که بر روی یک کامپیوتر خانگی نصب گردید ، 8080 بود. پردازنده فوق هشت بیتی و بر روی یک تراشه قرار داشت . این ریزپردازنده در سال 1974 به بازار عرضه گردید. اولین پردازنده ای که باعث تحولات اساسی در دنیای کامپیوتر شد ، 8088 بود. ریزپردازنده فوق در سال 1979 توسط شرکت IBM طراحی و اولین نمونه آن در سال 1982 عرضه گردید. وضعیت تولید ریزپردازنده توسط شرکت های تولید کننده بسرعت رشد و از مدل 8088 به 80286 ، 80386 ، 80486 ، پنتیوم ، پنتیوم II ، پنتیوم III و پنتیوم 4 رسیده است . تمام پردازنده های فوق توسط شرکت اینتل و سایر شرکت های ذیربط طراحی و عرضه شده است . پردازنده های پنتیوم 4 در مقایسه با پردازنده 8088 عملیات مربوطه را با سرعتی به میزان 5000 بار سریعتر انجام می دهد! جدول زیر ویژگی هر یک از پردازنده های فوق بهمراه تفاوت های موجود را نشان می دهد.
Name |
Date |
Transistors |
Microns |
Clock speed |
Data width |
MIPS |
8080 |
1974 |
6,000 |
6 |
2 MHz |
8 bits |
0.64 |
8088 |
1979 |
29,000 |
3 |
5 MHz |
16 bits |
0.33 |
80286 |
1982 |
134,000 |
1.5 |
6 MHz |
16 bits |
1 |
80386 |
1985 |
275,000 |
1.5 |
16 MHz |
32 bits |
5 |
80486 |
1989 |
1,200,000 |
1 |
25 MHz |
32 bits |
20 |
Pentium |
1993 |
3,100,000 |
0.8 |
60 MHz |
32 bits |
100 |
Pentium II |
1997 |
7,500,000 |
0.35 |
233 MHz |
32 bits |
~300 |
Pentium III |
1999 |
9,500,000 |
0.25 |
450 MHz |
32 bits |
~510 |
Pentium 4 |
2000 |
42,000,000 |
0.18 |
1.5 GHz |
32 bits |
~1,700 |
توضیحات
- ستون Date نشاندهنده سال عرضه پردازنده است.
- ستون Transistors تعدا ترانزیستور موجود بر روی تراشه را مشخص می کند. تعداد ترانزیستور بر روی تراشه در سال های اخیر شتاب بیشتری پیدا کرده است .
- ستون Micron ضخامت کوچکترین رشته بر روی تراشه را بر حسب میکرون مشخص می کند. ( ضخامت موی انسان 100 میکرون است ).
- ستون Clock Speed حداکثر سرعت Clock تراشه را مشخص می نماید.
- ستون Data Width پهنای باند واحد منطق و محاسبات (ALU) را نشان می دهد. یک واحد منطق و حساب هشت بیتی قادر به انجام عملیات محاسباتی نظیر: جمع ، تفریق ، ضرب و ... برای اعداد هشت بیتی است. در صورتیکه یک واحد منطق و حساب 32 بیتی قادر به انجام عملیات بر روی اعداد 32 بیتی است . یک واحد منطق و حساب 8 بیتی به منظور جمع دو عدد 32 بیتی می بایست چهار دستورالعمل را انجام داده در صورتیکه یک واحد منطق وحساب 32 بیتی عملیات فوق را صرفا" با اجرای یک دستورالعمل انجام خواهد داد.در اغلب موارد گذرگاه خارجی داده ها مشابه ALU است . وضعیت فوق در تمام موارد صادق نخواهد بود مثلا" پردازنده 8088 دارای واحد منطق وحساب 16 بیتی بوده در حالیکه گذرگاه داده ای آن هشت بیتی است . در اغلب پردازنده های پنتیوم جدید گذرگاه داده 64 بیتی و واحد منطق وحساب 32 بیتی است .
- ستون MIPS مخفف کلمات Millions of instruction per Second ( میلیون دستورالعمل در هر ثانیه ) بوده و واحدی برای سنجش کارآئی یک پردازنده است.
درون یک پردازنده 8088
به منظورآشنائی با نحوه عملکرد پردازنده لازم است، نگاهی به درون یک ریزپردازنده داشته و با منطق نحوه انجام عملیات بیشتر آشنا شویم. یک ریزپردازنده مجموعه ای از دستورالعمل ها را اجراء می کند. دستورالعمل های فوق ماهیت و نوع عملیات مورد نظر را برای پردازنده مشخص خواهند کرد. با توجه به نوع دستورالعمل ها ، یک ریزپردازنده سه عملیات اساسی را انجام خواهد داد :
- یک ریزپردازنده با استفاده از واحد منطق و حساب خود (ALU) قادر به انجام عملیات محاسباتی نظیر: جمع ، تفریق، ضرب و تقسیم است. پردازنده های جدید دارای پردازنده های اختصاصی برای انجام عملیات مربوط به اعداد اعشاری می باشند.
- یک ریزپردازنده قادر به انتقال داده از یک محل حافظه به محل دیگر است .
- یک ریزپردازنده قادر به اتخاذ تصمیم ( تصمیم گیری ) و پرش به یک محل دیگر برای اجرای دستورالعمل های مربوطه بر اساس تصمیم اتخاذ شده است .
شکل زیر یک پردازنده ساده را نشان می دهد.
پردازنده فوق دارای :
- یک گذرگاه آدرس (Address Bus) است که قادر به ارسال یک آدرس به حافظه است ( گذرگاه فوق می تواند 8 ، 16 و یا 32 بیتی باشد)
- یک گذرگاه داده (Data Bus) است که قادر به ارسال داده به حافظه و یا دریافت داده از حافظه است (گذرگاه فوق می تواند 8 ، 16 و یا 32 بیتی باشد)
- یک خط برای خواندن (RD) و یک خط برای نوشتن (WR) است که آدرسی دهی حافظه را انجام می دهند. آیا قصد نوشتن در یک آدرس خاص وجود داشته و یا مقصود، خواندن اطلاعات از یک آدرس خاص حافظه است؟
- یک خط Clock که ضربان پردازنده را تنظیم خواهد کرد.
- یک خط Reset که مقدار " شمارنده برنامه " را صفر نموده و یا باعث اجرای مجدد یک فرآیند می گردد.
فرض کنید پردازنده فوق هشت بیتی بوده واز عناصر زیر تشکیل شده است:
- ریجسترهای A,B,C نگاهدارنده هائی بوده که از فلیپ فلاپ ها ساخته شده اند.
- Address Latch مشابه ریجسترهای A, B, C است.
- شمارنده برنامه (Program Counter) نوع خاصی از یک نگهدارنده اطلاعات است که قابلیت افزایش بمیزان یک و یا پذیرش مقدار صفر را دارا است
- واحد منطق و حساب (ALU) می تواند یک مدار ساده جمع کننده هشت بیتی بوده و یا مداری است که قابلیت انجام عملیات جمع ، تفریق ، ضرب و تقسیم را دارا است .
- ریجستر Test یک نوع خاص نگاهدارنده بوده که قادر به نگهداری نتایج حاصل از انجام مقایسه ها توسط ALU است .ALU قادر به مقایسه دو عدد وتشخیص مساوی و یا نامساوی بودن آنها است . ریجستر Test همچنین قادر به نگهداری یک Carry bit ( ماحصل آخرین مرحله عملیات جمع) است . ریجستر فوق مقادیر مورد نظر را در فلیپ فلاپ ها ذخیره و در ادامه Instruction Decoder "تشخیص دهنده دستورالعمل ها " با استفاده از مقادیر فوق قادر به اتخاذ تصمیمات لازم خواهد بود.
- همانگونه که در شکل فوق ، مشاهده می گردد از شش " 3-State" استفاده شده که به آنها "tri-State buffers" می گویند. بافرهای فوق قادر به پاس دادن مقادیر صفر و یا یک و یا قطع خروجی مربوطه می باشند.. این نوع بافرها امکان ارتباط چندین خروجی را از طریق یک Wire فراهم می نمایند. در چنین حالتی فقط یکی از آنها قادر به انتقال ( حرکت ) صفر و یا یک بر روی خط خواهد بود.
ریجستر Instruction و Instruction Decoder مسئولیت کنترل سایر عناصر را برعهده خواهند داشت . بدین منظور از خطوط کنترلی متفاوتی استفاده می گردد. خطوط فوق در شکل فوق نشان داده نشده اند ولی می بایست قادر به انجام عملیات زیر باشند:
- به ریجستر A اعلام نماید که مقدار موجود بر روی گذرگاه داده را در خود نگاهدارد.(Latch)
- به ریجستر B اعلام نماید که مقدار موجود بر روی گذرگاه داده را در خود نگاهدارد.(Latch)
- به ریجستر C اعلام نماید که مقدار موجود بر روی گذرگاه داده را در خود نگاهدارد.(Latch)
- به " شمارنده برنامه " اعلام نماید که مقدار موجود بر روی گذرگاه داده را در خود نگاهدارد.(Latch)
- به ریجستر Address اعلام نماید که مقدار موجود بر روی گذرگاه داده را در خود نگاهدارد.(Latch)
- به ریجستر Instruction اعلام نماید که مقدار موجود بر روی گذرگاه داده را در خود نگاهدارد.(Latch)
- به " شمارنده برنامه " اعلام نماید که مقدار خود را افزایش دهد.
- به " شمارنده برنامه " اعلام نماید که مقدار خود را صفر (Reset) نماید.
- به واحد منطق و حساب نوع عملیاتی را که می بایست انجام گیرد، اعلام نماید.
- به ریجستر Test اعلام نماید که بیت های ماحصل عملیات ALU را در خود نگاهدارد.
- فعال نمودن خط RD ( خواندن )
- فعال نمودن خط WR ( نوشتن )
حافظه های RAM و ROM
در بخش قبل گذرگاه های آدرس و داده نظیرخطوط RD,WR بررسی گردیدند. گذرگاه های فوق به حافظه های RAM ،ROM و یا هر دو متصل خواهند بود. در ریزپردازنده ساده فرضی فوق، از گذرگاه های آدرس و داده هشت بیتی استفاده می گردد. بدین ترتیب پردازنده قادر به آدرس دهی 256 بایت حافظه و خواندن و یا نوشتن هشت بیت از حافظه در هر لحظه خواهد بود. فرض کنید پردازنده فوق دارای 128 بایت حافظه ROM بوده که از آدرس صفر شروع شده و 128 بایت حافظه RAM که از آدرس 128 آغاز می گردد ، است . حافظه ROM تراشه ای است که اطلاعاتی را از قبل و بصورت دائم در خود نگهداری می نماید. گذرگاه های آدرس به تراشه ROM اعلام خواهند کرد که کدام بایت را خواسته و آن را بر روی گذرگاه قرار خواهد داد. زمانیکه وضعیت خط RD تغییر نماید تراشه ROM بایت مورد نظر و انتخابی را بر روی گذرگاه داده قرار خواهد داد. RAM شامل بایت هائی از اطلاعات است. ریزپردازنده قادر به خواندن و نوشتن در حافظه فوق بر اساس سیگنال های دریافتی از خطوط RD و RW است . در رابطه با حافظه RAM می بایست به این نکته نیز اشاره گردد که این نوع از حافظه ها با از دست منبع انرژی ( برق ) اطلاعات خود را از دست خواهند داد.
تمامی کامپیوترها دارای حافظه ROM به میزان مشخص می باشند. ( برخی از کامپیوترها ممکن است دارای حافظه RAM نبوده نظیر میکرو کنترل ها ، ولی وجود و ضرورت حافظه ROM را در هیچ کامپیوتری نمی توان انکار نمود).بر روی کامپیوترهای شخصی حافظه ROM را BIOS نیز می نامند. زمانیکه ریزپردازنده فعالیت خود را آغاز می نماید ، در ابتدا دستورالعمل هائی را اجراء خواهد کرد که در BIOS می باشند. دستورالعمل های موجود در BIOS عملیانی نظیر تست سخت افزار و سیستم را انجام و در ادامه فرآیندی آغاز خواهد شد که نتیجه آن استقرار سیستم عامل در حافظه خواهد بود. (Booting) . در آغاز فرآیند فوق ، بوت سکتور هارد دیسک ( می تواند آغاز عملیات فوق از هارد شروع نشده و از فلاپی دیسک انجام گردد ، اتخاذ تصمیم در رابطه با وضعیت فوق بر اساس پارامترهای ذخیره شده در حافظه CMOS خواهند بود ) را بررسی خواهد کرد . بوت سکتور فوق حاوی برنامه ای کوچک است که در ادامه BIOS آن را خوانده و در حافظه RAM مستقر خواهد کرد. ریزپردازنده در ادامه دستورالعمل های مربوط به برنامه بوت سکتور را که در حافظه RAM مستقر شده اند ،اجراء خواهد کرد. برنامه فوق به ریزپردازنده اعلام خواهد کرد که اطلاعات دیگری را از هارد دیسک به درون حافظه RAM انتقال و آنها را اجراء نماید. با ادامه وتکمیل فرآیند فوق سیستم عامل در حافظه مستقر ومدیریت خود را آغاز می نماید.
دستورالعمل های ریزپردازنده 8088
هر ریزپردازنده دارای مجمو عه ای از دستورالعمل ها بوده که دارای کارآئی خاصی می باشند. این دستورالعمل ها بصورت الگوئی از صفر و یا یک پیاده سازی می گردنند. استفاده از دستورات فوق با توجه به ماهیت الگوئی آنها برای انسان مشکل و بخاطر سپردن آنها امری است مشکل تر! ، بدین دلیل از مجموعه ای " کلمات " برا ی مشخص نمودن الگوهای فوق استفاده می گردد. مجموعه " کلمات " فوق " زبان اسمبلی " نامیده می شوند. یک " اسمبلر" قادر به ترجمه کلمات به الگوهای بیتی متناظر است .پس از ترجمه ، ماحصل عملیات که همان استخراج " الگوهای بیتی " است، در حافظه مستقر تا زمینه اجرای آنها توسط ریزپردازنده فراهم گردد جدول زیر برخی از دستورالعمل های مورد نیاز در رابطه با پردازنده فرضی را نشانن می دهد.
Instruction |
Meaning |
LOADA mem |
لود نمودن ریجستر A از آدرس حافظه |
LOADB mem |
لود نمودن ریجستر B از آدرس حافظه |
CONB con |
لود نمودن یک مقدار ثابت در ریجستر B |
SAVEB mem |
ذخیره نمودن مقدار موجود در ریجستر B در یک آدرس حافظه |
SAVEC mem |
ذخیره نمودن مقدار موجود در ریجستر C در یک آدرس حافظه |
ADD |
جمع A و B و ذخیره کردن حاصل در C |
SUB |
تفریق A و B و ذخیره کردن حاصل در C |
MUL |
ضرب A و B و ذخیره کردن حاصل در C |
DIV |
تقسیم A و B و ذخیره کردن حاصل در C |
COM |
مقا یسه A و B و ذخیره کردن حاصل در Test |
JUMP addr |
پرش به یک آدرس مشخص |
JEQ addr |
پرش شرطی ( اگر مساوی است ) به یک آدرس مشخص |
JNEQ addr |
پرش شرطی ( اگر نا مساوی است ) به یک آدرس مشخص |
JG addr |
پرش شرطی ( اگر بزرگتر است ) به یک آدرس مشخص |
JGE addr |
پرش شرطی ( اگر بزرگتر و یا مساوی است ) به یک آدرس مشخص |
JL addr |
پرش شرطی ( اگر کوچکتر است ) به یک آدرس مشخص |
JLE addr |
پرش شرطی ( اگر کوچکتر و یا مساوی است ) به یک آدرس مشخص |
STOP |
توقف اجراء |
مثال : فرض کنید برنامه محاسبه فاکتوریل عدد پنج (5!=5*4*3*2*1 ) با یکی از زبانهای سطح بالا نظیر C نوشته گردد . کمپایلر ( مترجم ) زبان C برنامه مورد نظر را به زبان اسمبلی ترجمه خواهد کرد. ( فرض کنید که آدرس شروع RAM در پردازنده فرضی 128 و آدرس شروع حافظه ROM صفر باشد.) جدول زیر برنامه نوشته شده به زبان C را بهمراه کد ترجمه شده اسمبلی معادل آن، نشان می دهد.
C Program |
Assembly Language |
a=1; |
// Assume a is at address 128 |
در ادامه می بایست کدهای ترجمه شده به زبان اسمبلی به زبان ماشین ( الگوهای بیتی ) ترجمه گردند. بدین منظور لازم است که هر یک از دستورات اسمبلی دارای کد معادل (OpCode) باشند. فرض کنید دستورات اسمبلی در پردازنده فرضی دارای OpCode ( کدهای عملیاتی) زیر باشند.
Assembly Instruction |
Opcode |
LOADA mem |
1 |
LOADB mem |
2 |
CONB con |
3 |
SAVEB mem |
4 |
SAVEC mem |
5 |
ADD |
6 |
SUB |
7 |
MUL |
8 |
DIV |
9 |
COM |
10 |
JUMP addr |
11 |
JEQ addr |
12 |
JNEQ addr |
13 |
JG addr |
14 |
JGE addr |
15 |
JL addr |
16 |
JLE addr |
17 |
STOP |
18 |
در نهایت برنامه ترجمه شده به زبان اسمبلی به زبان ماشین ( الگوهای بیتی ) ترجمه خواهد شد.
Assembly Language |
Bit Patterns |
// Assume a is at address 128 |
// Assume a is at address 128 // Assume F is at address 129 Addr OpCode/value 0 3 // CONB 1 1 1 2 4 // SAVEB 128 3 128 4 3 // CONB 1 5 1 6 4 // SAVEB 129 7 129 8 1 // LOADA 128 9 128 10 3 // CONB 5 11 5 12 10 // COM 13 14 // JG 17 14 31 15 1 // LOADA 129 16 129 17 2 // LOADB 128 18 128 19 8 // MUL 20 5 // SAVEC 129 21 129 22 1 // LOADA 128 23 128 24 3 // CONB 1 25 1 26 6 // ADD 27 5 // SAVEC 128 28 128 29 11 // JUMP 4 30 8 31 18 // STOP
|
همانگونه که مشاهده می نمائید برنامه نوشته شده به زبان C به 17 دستورالعمل معادل اسمبلی و 31 دستورالعمل زبان ماشین تبدیل گردید.
Instruction Decoder (تشخیص دهنده نوع دستورالعمل ها) با انجام عملیاتی خاص، نوع دستورالعمل را تشخیص خواهد داد. فرض کنید دستور العمل ADD را داشته باشیم و بخواهیم نحوه تشخیص دستورالعمل را دنبال نمائیم :
- در زمان اولین Clock ، دستورالعمل Load می گردد. ( فعال کردن بافر tri-state برای " شمارنده برنامه " ، فعال شدن خط RD ، فعال کردن Data-in در بافر tri-state )
- در زمان دومین Clock ، دستورالعمل ADD تشخیص داده خواهد شد.( تنظیم عملیات جمع برای ALU ، ذخیره نمودن ماحصل عملیات ALU در ریجستر C )
- در زمان سومین Clock، " شمارنده برنامه " افزایش خواهد یافت ( در تئوری این مرحله می تواند در زمان دومین Clock نیز صورت پذیرد)
همانگونه که ملاحظه گردید ، هر دستورالعمل اسمبلی دارای چندین Clock Cycle است . برخی از دستورات نظیر ADD دارای دو و یا سه Clock و برخی دیگر از دستورات دارای پنج ویا شش Clock خواهند بود.[7]