چكيده
در اواسط دهه ۷۰ ريزپردازنده ها ساختار ساده اي داشتند و در اين زمان هر ريزپردازنده از يك واحد پردازشگر مركزي (cpu) و يك تراشه LSI (شامل ۵/۰۰۰ ترازيستور) تشكيل شده بود و با فركانس ۱ تا ۵ مگاهرتز در يك سيستم ۸ بيتي كار مي كرد و اين ريزپردازنده ها داراي ۲ الي ۷ ثبات ۸ بيتي بودند. به خاطر قيمت و بهاي اندك و اندازه كوچك ريزپردازنده ها، در بيشتر سيستم هاي كامپيوتري از آنها استفاده مي شد و به جائي رسيد كه جايگزين سيستم هاي mainframe و ميكروكامپيوترها شدند. با ظهور ريزپردازنده ها هر خانه اي داراي يك كامپيوتر ديجيتالي است.
از دهه ۷۰ به بعد ريزپردازنده ها تغييرات زيادي كرده اند و در دهه ۹۰ ريزپردازنده ها ۳۲ بيتي تا ۶۴ بيتي شدند. و با فركانس هايي از ۲۵ تا ۲۰۰MHZ كار مي كردند و عملاً داراي تراشه هايي با سه ميليون ترازيستور بودند (VLSI). اكثر اين ريزپردازنده ها قادر بودند بيشتر از يك دستورالعمل را در يك چرخه اجرا كنند. تمامي ريزپردازنده‌هاي پيشرفته داراي يك تراشه FPU هستند و اكثر آن ها داراي ۱۶تا ۳۲ ثبات همه منظوره در CPU و يك رجيستر فايل با ۳۲ ثبات براي IU و يك رجيستر فايل با ۳۲ ثبات جداگانه براي FPU هستند.
خيلي از ريزپردازنده ها براي عمليات شناور و عمليات صحيح داراي Operational Unit هستند و مقدار قابل توجهي Cache دارند. در اكثر آنها Cache شامل Cache داده و Cache دستورالعمل است . كارآيي ريزپردازنده هاي پيشرفته امروز مساوي يا بيشتر از Mainframe و يا سوپر كامپيوترهاي دوران قبل مي باشد.
تعداد زيادي كارخانه سازنده ريزپردازنده وجود دارد كه داراي ويژگي هاي خاص خود مي باشند و دو گروه از گسترده ترين خانواده ريزپردازنده كه در دهه ۷۰ ساخته شده اند عبارتند از اينتل X86 يا ۸۰X86 و خانواده موتورولا M680X0.
نزديك به دهه ۸۰ ما شاهد يك توسعه موازي روي معماري هاي جديد بوده ايم كه تمايل به كامپيوترهائي با مجموعه دستورالعمل كاهش يافته يا RISC بوده اند. خانواده هاي اينتل X86 و موتورولا M68000 از كلاس غيرRISC يعني كامپيوترهايي با مجموعه دستورهاي پيچيده يا CISC تشكيل شده اند.
اينتل، يك ريزپردازنده ۴ بيتي به نام ۴۰۰۴ در سال ۱۹۷۱ شروع كرد كه در يك ماشين حساب معمولي بكار ميرفت، و به آساني محاسبات BCD را انجام ميداد. در سال ۱۹۷۲ ريزپردازنده ۸ بيتي ۸۰۰۸ توسعه يافت و در سال ۱۹۷۴ يك ريزپردازنده قدرتمند ۸ بيتي به نام ۸۰۸۰ تولد يافت و به دنبال آن ۸۰۸۵ در سال ۱۹۷۶ به بازار آمد. بخشي از معماري ۸۰۸۵/۸۰۸۰ همانند مجموعه ثبات ها در خانواده X86 همچنان استفاده مي شود. اينتل ساخت ريزپردازنده هاي خانواده X86 را با يك ريزپردازنده ۱۶ بيتي به نام ۸۰۸۶ در ۱۹۷۸ آغاز كرد و عملاً تمامي كارخانه هاي معروف ريزپردازنده هاي ۱۶ بيتي بعد از دهه ۷۰ و تا نزديك دهه ۸۰ از يك تراشه ارزان قيمت و يك گذرگاه خارجي ۸ بيتي با يك معماري داخلي ۱۶ بيتي استفاده مي كردند.
در سال ۱۹۶۹ ريزپردازنده ۸۰۸۰ با باس خارجي ۸ بيتي و گذرگاه داخلي ۱۶ بيتي ايجاد شد و براي گذرگاه داده خود ۵۰% به تراشه هاي مياني كمتري در مقايسه با پردازنده هاي ۱۶ بيتي نياز داشتند و هزينه آن ها نيز كمتر بود.
در واقع ۸۰۸۰ به پردازنده اصلي شركت IBM روي كامپيوتر هاي شخصي (PC) تبديل و در تمامي توليدات بعدي در جهان منتشر گرديد. به دنبال ۸۰۸۶، تكامل يافته آن يعني ۸۰۱۸۶ ساخته شد كه همان ۸۰۸۶ همراه با تعدادي اينترفيس I/O و واحدهاي منطقي وي يك تراشه بود و تعداد كمي دستورالعمل به آن اضافه شده بود.
وقتي ۸۰۲۸۶ به عنوان يك ريزپردازنده ۱۶ بيتي در سال ۱۹۸۲ شناخته شد، مرحله جديدي در توسعه ريزپردازنده ها پديد آمد كه قابليت Protected Mode ناميده شد. اين شيوه در تمامي محصو.لات ديگر خانواده اينتل بكار گرفته شد.
اولين پردازنده ۳۲ بيتي اينتل در سال ۱۹۸۵ بود كه i386 نام داشت. اينتل يك پردازنده ۳۲ بيتي به نام ۴۳۲ كه با خانواده X86 ناسازگار بود را زودتر از دهه ۸۰ بيرون داده بود كه هرگز تجاري نشد. در سال ۱۹۸۹ ريزپردازنده i486 توسعه يافت كه سرعت عملكرد آن در مدل DX2 به ۶۶MHZ ميرسيد. i486 داراي يك واحد FPU و يك Cache به اندازه ۸KB در داخل تراشه است.
محصول بعدي خانواده اينتل پنتيوم بود كه در سال ۱۹۹۳ ساخته شد و قبل از گسترش به آن i586 يا P5 گفته مي شد اما اينتل تصميم گرفت نام آن را پنتيوم بگذارد. پنتيوم يك سوپر اسكالر دو سطحي است يعني دو دستورالعمل را موازي واكشي و كدگشايي و اجرا مي كند و داراي گذرگاه داخلي ۶۴ بيتي و يك cache به اندازه ۱۶KB است(۸K data cache + 8K inst.cache).
اينتل مرتباً روي محصولات بعدي كار مي كرد و P6 ناميده شد كه طبق وعده آن كارآيي پنتيوم را حد اقل ۲ برابر كرد و پس از آن به ترتيب Pentium II، Pentium III و Pentium IV نيز ساخته شدند.
توسعه ريزپردازنده هاي موتورولا نيز شبيه اينتل است. موتورولا در سال ۱۹۷۴ خانواده ۸ بيتي ۶۸۰۰ را ايجاد كرد كه در سال ۱۹۷۷ به يك محصول ۸ بيتي ويژه به نام ۶۸۰۹ تبديل شد. موتورولا نخستين ريزپردزنده ۱۶ بيتي خود را در سال ۱۹۷۹ به نام M68000 به بازار عرضه كرد. از ويژگي هاي مهم خانواده M68000 آن است كه ريزپردازنده MC68000 به طور پايه اي يك سيستم ۱۶ بيتي با گذرگاه داده ۱۶ بيتي و ۱۶ ثبات پردازنده UPRS و شمارنده برنامه ۳۲ بيتي است. در سال ۱۹۸۴ ريزپردازنده ۳۲ بيتي MC60000 ناميده شد. هم چنين موتورولا روايت هاي توسعه يافته محصولات MC68000 را تحت عنوان MC68010 .و MC68012 ايجاد كرد. MC68010 از نظر پايه ها كاملاً با MC68000 سازگار بود بنابراين از نظر طراحي سيستم، يك MC68000 مي توانست با يك MC68010 جايگزين شود.
موتورولا ساخت ريزپردازنده هاي ۳۲ بيتي خانواده M68000 را در سال ۱۹۸۴ با نام MC68020 شروع كرد. اين ريزپردازنده ها در سال ۱۹۷۸ به ريزپردازنده MC68030 و در سال ۱۹۸۹ به MC68040 توسعه پيدا كردند. ۶۸۰۲۰ داراي يك Cache دستور كوچك ۲۵۶ بايتي در داخل تراشه بود. ۶۸۰۳۰ داراي يك حافظه Cache دستور كوچك ۲۵۶ بايتي در داخل تراشه بود. ۶۸۰۳۰ داراي يك حافظه Cache دوگانه نسبتاً كوچك (۲۵۶ data + 256 B inst.) .و ۶۸۰۴۰ داراي Cache 4KB دستور و Cache 4KB داده در يك تراشه مي باشد.
عضو بعدي خانواده M68000 كه در سال ۱۹۹۴ ساخته شد MC68060 نام گرفت كه يك سوپر اسكالر ۲ سطحي با Cache 8KB دستور و Cache داده در تراشه بود و دستورالعمل ها با سرعت ۶۶MHZ كار مي كرد.
البته چندين خانواده از ريزپردازنده ها وجود دارد كه به آن ها اشاره اندكي خواهد شد، مانند Z-80 مربوط به شركت Zilog كه ريزپردازنده معر وف ۸ بيتي است و توسط گروهي از طراحان متخصص اينتل كه ۸۰۸۰ و ۸۰۸۵ را ساخته بودند ايجاد شد و از اينرو Z-80 شبيه معماري اينتل ۸۰۸۰ است ولي زبان اسمبلي هر دو متفاوت مي باشد و Z-80 داراي دستورهاي بيشتري نسبت به ۸۰۸۰ است. شركت Zilog خانواده ۱۶ بيتي خود را با نام Z8000 موازي با اينتل ۸۰۸۶ منتشر كرد و Z80000 يك محصول ۳۲ بود كه به توليد نرسيد.
توسعه ريزپردازنده هاي RISC به شكل مو ازي با اينتل و موتورولا انجام شد. اولين مستندات RISC در دانشگاه بركلي در سال ۱۹۸۰ توسط Pattersonو Ditzel ارايه شد و لغت RISC توسط كارلو اسكوئين لرپرت اولين مقاله RISC عنوان شد. طراحيس سيستم محاسباتي از نوع RISC بدون استفاده از واژه RISC خيلي پيشتر توسط IBM در دهه ۷۰ آغاز شد كه با نام IBM801 شناخته مي شد. هم چنين دانشگاه استنفورد در سال ۱۹۸۱ سيستم RISC خود را ايجاد كرد و به نام MIPS (Microprocessor without interlocked Pipeline Stage) ناميد.
شركت MIPS روايت هاي تجاري را تحت خانواده RX000 (X=6,4,3,2) منتشر ساخته است. در برخي از خصوصيات اوليه طرح RISC بركلي در Sparc از شركت Sun Micro System به كار رفته است. شركت اينتل خانواده RISC خود را با نامI860 و شركت موتورولا با نام M88000 شروع كردند. شركت IBM كامپيوتر RISC خود را با نام ROMP (Research Office Product Division Microprocessor) ادامه داد و به سيستم RS6000 منجر شد. معماري RS6000 با خصوصيت جديد ريزپذدازنده هاي IBM و موتورولا و اپل تركيب شد و Power PC ساخته گرديد. اولين محصول ۶۰۱ است كه در ۱۹۹۱ منتشر شد و به دنبال آن ۶۲۰ با توانائيهاي بيشتري ايجاد گرديد.

Intel 8086
در اين فصل معماري داخلي، شيوه هاي آدرس دهي، مجموعه دستورالعمل ها و تكنيك هاي I/O مرتبط با ريزپردازنده ۸۰۸۶ را معرفي خواهيم كرد.

مقدمه
۸۰۸۶ اولين ريزپردازنده ۱۶ بيتي اينتل بود. طراحي آن بر اساس ۸۰۸۰ ولي مستقيماً با آن سازگار نبود. ۸۰۸۶ با استفاده از فناوري HMOS طراحي شده بود و شامل ۲۹۰۰۰ ترانزيستور بود. ۸۰۸۶ در يك بسته ۴۰ پايه اي قرار داشت و با منبع تغذيه +۵V كار مي كرد. ۸۰۸۶ در سه مد و سرعت مختلف Clock كار مي كند. ۸۰۸۶ استاندارد با فركانس كلاك داخلي ۵MHZ و ۸۰۸۶-۲ و ۸۰۸۶-۴ با فركانس هاي داخلي به ترتيب ۴MHZ , 8 كار مي كنند. به همين دليل از يك مولد / درايور تراشه مثل Intel 8284 براي توليد سيگنال ورودي كلاك ۸۰۸۶ استفاده مي شود. ۸۰۸۶ كلاك خارجي در پايه CLK را به ۳ تقسيم مي كند. اين جمله به اين معني است كه براي كلاك داخلي ۵MHZ، ۸۲۸۴ بايد كلاك خروجي ۱۵MHZ را توليد كند تا به پايه CLK تراشه ۸۰۸۶ متصل شود.
۸۰۸۶ داراي آدرس ۲۰ بيتي است و از اينرو مي توان حداكثر تا ۲۲۰ dh 1MB از حافظه را آدرس دهي كند. ۸۰۸۶ از حافظه قطعه بندي شده استفاده مي كند. نكته جالب توجه در ۸۰۸۶ اين است كه مي تواند حداكثر تا ۶ بايت دستورالعمل را از حافظه پيش واكشي (PreFetch) كند و آن ها را به ترتيب به صف كند و بدين ترتيب سرعت اجراي دستورالعمل را بهبود بخشد.
حافظه ريزپردازنده بر اساس ۸۰۸۶ برحسب بايت پيكره بندي مي شود. هر بايت مي تواند منحصراً با آدرس هاي ۲۰ بيتي آدرس دهي شود. هر كلمه ۱۶ بيتي ۸۰۸۶ شامل هر دو بايت مجاور يكديگر است. بايت آدرس كمتر (L.O.B) و بايت آدرس بيشتر (H.O.B) به شكل زير مي باشند:

بايت با ارزش كمتر بايت با ارزش بيشتر
۰۷H 26H
آدرس
آدرس
بنابراين كلمه ۱۶ بيتي ذخيره شده در آدرس زوج ۰۰۵۲۰عبارت است از:
اكنون كلمه اي را با آدرس فرد در نظر بگيريد:
L.O.B H.O.B
05H 3FH
آدرس
آدرس
كلمه ذخيره شده در آدرس فرد عباتست از ۳F0SH

معماري ۸۰۸۶
همانطوري كه در شكل مي بينيم، ريزپردازنده ۸۰۸۶ از نظر داخلي به دو بخش تابعي جدا تقسيم مي شود. اين دو بخش واحد واسط گذرگاه (BIU) و واحد اجرا (EU) مي باشند. واحد BIU دستورها را واكشي مي كند، داده ها را از حافظه و پورت ها ميخواند و داده ها را به حافظه و پورت هاي I/O مي نويسد. Eu دستورهايي را كه اخيراً توسط BIU واكشي شده اند را اجرا مي كند. وظايف واحدهاي BIU و Eu از يكديگر مستقل هستند. BIU پردازنده ۸۰۸۶ را به دنياي بيرون مرتبط مي سازد. BIU تمامي عمليات گذرگاه خارجي را آماده مي سازد. BIU شامل ثبات هاي سگمنت، اشاره گر به دستور (IP)، صف دستورالعمل و مدارهاي كنترل گذرگاه و توليد آدرس مي باشد و اعمالي چون واكشي و صف بندي دستورها و كنترل گذرگاه را انجام ميدهد.
صف دستور BIU به شكل FIFO است و گروهي از ثبات هايي است كه شامل ۶ بايت كد دستور واكشي شده از جافظه هستند. اين امر با توجه به تسريع (Speed up)، اجراي برنامه را با همپوشاني (Over lupping) واكشي دستور با اجرا انجام ميدهد. اين مكانيزم را به عنوان پايپ لاين مي شناسيم. چنانچه صف پر باشد و Eu براي دستيابي بحافظه درخواستي به BIU ندهد، BIU هيچ سيكل گذرگاهي را انجام نمي دهد. از طرف ديگر، اگر BIU پر نباشد و حداقل بتواند دو بايت را ذخيره سازد و Eu درخواستي را براي دستيابي بحافظه ندهد، BIU مي تواند دستورالعمل ها را پيش واكشي كند. هرچند كه اگر BIU براي دستيابي بحافظه توسط Eu وقفه داده شود درحاليكه BIU در حال پردازش واكشي يك دستورالعمل باشد، BIU ابتدا واكشي را كامل مي كند و سپس به Eu سرويس مي دهد. چنانچه دستوري مانند Jump يا Subroutine Call داشته باشيم، BIU صف را reset ميكند و پر كردن مجدد را پس از ارسال دستور جديد به Eu از نو شروع خواهد كرد.
همانطوري كه مي بينيم BIU شامل يك جمع كننده اختصاصي است كه براي توليد آدرس ۲۰ بيتي استفاده مي شود. منطق كنترل گذرگاه BIU تمامي سيگنال هاي كنترل گذرگاه همچون سيگنال هاي خواندن و نوشتن را براي حافظه و I/O توليد مي كند.
BIU داراي چهار ثبات سگمنت ۱۶ بيتي است. اين ثبات عبارتند از:
• ثبات سگمنت كد (CS)
• ثبات سگمنت داده (DS)
• ثبات سگمنت پشته (SS)
• ثبات فوق العاده (ES)
حافظه يك مگابايتي ۸۰۸۶ به سگمنتهايي حداكثر تا ۶۴KB تقسيم مي‌شود. ۸۰۸۶ مي تواند مستقيماً چهار سگنمت را در يك زمان ويژه (۲۵۶ كيلوبايت در حافظه يك مگابايتي) آدرس دهي كند. برنامه ها دستيابي به كد و داده را در سگمنت ها با تغيير محتويات ثبات سگمنت براي اشاره كرن به سگمنت هاي مطلوب، فراهم مي سازد. تمامي دستورالعمل هاي جافظه بايد در حافظه اصلي ذخيره شوند كه توسط ثبات ۱۶ بيتي CS و افست ۱۶ بيتي در سگمنتي كه در اشاره‌گر دستور (IP) 16 بيتي گنجانده شده به آن ااشره مي شود. BIU آدرس فيزيكي ۲۰ بيتي داخلي را به وسيله آدرس منطقي فراهم شده توسط برنامه نويس (۱۶ بيت CS و ۱۶ بيت IP) توليد مي‌كند. اين كار با شيفت منطقي چهار بيتي CS به چپ و افزودن محتواي ۱۶ بيتي IP توليد مي شود. به عبارت ديگر CS توسط BIU براي توليد آدرس فيزيكي ۲۰ بيتي در ۱۶ ضرب مي شود. به اين معني كه تمامي دستورالعمل هاي برنامه نسبت به محتويات CS در ۱۶ ضرب شده و سپس به آفست به دست آمده از ۱۶ IP بيتي اضافه ميشود.
دقت كنيد كه براي آدرس هاي كلمه، برنامه نويس از آدرس هاي مرتبه كمتر (زوج يا فرد) براي مشخص ساختن كلمه ۱۶ بيتي استفاده مي كند.
۸۰۸۶ هميشه به يك كلمه ۱۶ بيتي به / از حافظه دستيابي پيدا مي كند. ۸۰۸۶ مي تواند در صورتيكه اولين بايت كلمه در آدرس زوج واقع شده باشد، در يك عمليات كلمه ۱۶ بيتي را بخواند. به عبارت ديگر اگر اولين بايت كلمه يك آدرس فرد باشد، ۸۰۸۶ بايد دو دستيابي به حافظه را براي خواندن دو بايت متوالي از حافظه انجام دهد. در اين حالت ۸۰۸۶ از بايت يا بايت هايي كه مورد نظرش نيست صرفنظر مي كند. بطور مثال، دستور ADDR و MOV BX را در نظر بگيريد. دقت كنيد وجود X (H يا L) به دنبال ثبات ۸۰۸۶ نشان دهندة آن است كه انتقال ۱۶ بيتي يا ۸ بيتي است.
اين دستور محتواي مكان حافظه ۲۰ بيتي آدرس دهي شده فيزيكي را كه توسط ADDR آدرس دهي مي شود به ثبات ۱۶ بيتي BX منتقل مي كند. اگر ADDR آدرس ۲۰ بيتي زوج مثل باشد دستور MOV محتواي BL را با محتواي خانه حافظه و محتوي ثبات BH را با محتوي آدرس در يك بار دستيابي پر مي كند. اما اگر از ADDR در آدرس فرد مثلاً باشد، دستور فوق BL را با محتواي در و BH را با محتوي در دو بار دستيابي حافظه Load مي كند. دقت كنيد ۸۰۸۶ به آدرس و دستيابي پيدا مي‌كند ولي محتوي را كنار مي گذارد و نيز در عمل دوم به و دستيابي مي كند ولي از محتواي چشم پوشي مي كند.
اكنون دستوري مانند ADDR و MOV BH را در نظر بگيريد. اگر آدرس ADDR زوج (مثل۵۰۰۰۲) باشد، اين دستور MOV به هر دو خانه ۵۰۰۰۲ و ۵۰۰۰۳ دستيابي مي كند ولي BH را با محتواي ۵۰۰۰۲ پر كرده و از محتوي ۵۰۰۰۳ صرفنظر مي كند. اما اگر ADDR در آدرس فرد باشد (مثل ۵۰۰۳) دستور MOV ثبات BH را با ۵۰۰۰۳ پر كرده و از ۵۰۰۰۲ صرفنظر مي كند.
خانواده ۸۰۸۶ داراي دو نوع ريزپردازنده ۱۶ بيتي است: ۸۰۸۶ و ۸۰۸۸٫ اختلاف مهم اين است كه پردازنده چگونه با دنياي بيرون ارتباط برقرار مي كند. ۸۰۸۸ داراي يك مسير داده (data path) 8 بيتي به حافظه I/O است ولي ۸۰۸۶ داراي يك مسير داده خارجي ۱۶ است. پس ۸۰۸۸ مجبور به دوبار عمل براي خواندن يك كلمه ۱۶ بيتي در حافظه است. البته در بيشتر حالات اين دو پردازنده مشابه هستند. از ۸۰۸۸ در طراحي كامپيوترهاي شخصي IBM استفاده شده است.
۸۰۸۶ مي تواند به شكل يك سيستم تك پردازنده كوچك (مي نيمم مد در صورتيكه پايه به high تنظيم شود) و يا به شكل يك سيستم چند پردازنده اي (ماكزيمم مد در صوتيكه پايه به low تنظيم شود) پيكره بندي مي گردد. در يك سيستم مفروض، پايه دائماً به high يا low متصل مي شود. برخي از پايه هاي ۸۰۸۶ داراي توابعي دوگانه بسته به نوع انتخاب سطح ولتاژ پايه هستند. در مد مي نيمم اين پايه ها سيگنال هاي كنترلي را مستقيماً به حافظه و وسايل I/O انتقال مي دهند. از مد ماكزيمم اين پايه ها داراي وظايف متفاوتي براي نسهيلات سيستم هاي مالتي پروسسور است. در مد ماكزيمم توابع كنترلي كه معمولاُ در مد مي نيمم نشان داده مي شوند، فرض مي شود كه به وسيله تراشه اي مثل كنترل گذرگاه ۸۲۸۸ پشتيباني مي شوند.
پس از پيشرفت هاي فناوري، اينتل پردازنده اي پيشرفته تر ۸۰۱۸۶ و ۸۰۱۸۸ را كه نسخه هاي پيشرفته تري از ۸۰۸۶ و ۸۰۸۸ بودند عرضه كرد. سرعت كلاك اين ها ۸MHZ بود كه تقريباً دو برابر پردازنده هاي قبلي بودند. در روي اين پردازنده‌هاي جديد از واحدهاي جانبي مانند كنترل كننده DMA با تايمر ۱۶ بيتي و واحد كنترل كننده وقفه استفاده مي كنند. شبيه ۸۰۸۶، ۸۰۱۸۶ داراي گذرگاه داده ۱۶ بيتي و ۸۰۱۸۸ داراي گذرگاه داده ۸ بيتي است و به غير از اين، معماري و مجموعه دستورهاي ۸۰۱۸۶ و ۸۰۱۸۸ مشابه است. هم چنين ۸۰۱۸۶ و ۸۰۱۸۸ داراي يك مولد كلاك موجود در تراشه است كه فقط از يك كريستال براي توليد كلاك استفاده مي كند. مشابه ۸۰۸۵، فركانس كلاك از نظر داخلي به ۲ تقسيم مي شود. يعني كريستال خارجي ۱۲ يا ۱۶MHZ بايد براي توليد فركانس داخلي كلاك ۶MHZ يا ۸MHZ استفاده شود. ۸۰۱۸۶/۸۰۱۸۸ در يك بسته ۶۸ پايه اي ساخته شده و هر دو پردازنده داراي مدارهاي كنترل كننده اولويت وقفه براي فراهم ساختن ۵ پايه وقفه هستند. مشابه ۸۰۸۶/۸۰۸۸ پردازنده هاي ۸۰۱۸۶/۸۰۱۸۸ مي توانند مستقيماً ۱MB از حافظه را آدرس دهي كنند. و داراي ۱۰ دستورالعمب جديد نسبت به مجموعه دستورهاي ۸۰۸۶/۸۰۸۸ هستند. مثلاً دستورهاي IN و OUT براي گرفتن و يا نوشتن بايت يا كلمه رشته به كار مي روند. از سوي ديگر ۸۰۲۸۶ داراي قابليت هاي اضافي چون حفاظت (Protection) و مديريت حافظه نسبت به معماري ۸۰۸۶ است. ۸۰۲۸۶ با سرعت ۸MHZ داراي throughput تا ۶ برابر در مقايسه با ۸۰۸۶ با سرعت ۵MHZ است. ۸۰۲۸۶ در بسته ۶۸ پايه اي ساخته شده است و مي تواند در سرعتهاي كلاك ۴، ۶ يا ۸ مگاهرتز كار كند و به مولد كلاك خارجي ۸۲۲۸۴ براي توليد كلاك نياز دارد. پردازنده ۸۰۲۸۶ كلاك خارجي را به ۲ براي توليد كلاك داخلي تقسيم مي كند و نوعاً در سيستم هاي multiuser و multitasking استفاده مي شود. ۸۰۲۸۶ در دو مد مختلف كار مي كند. Real Addr و آدرس مجازي حفاظت شده.
در واقع آدرس فيزيكي تقليدي از ۸۰۸۶ با كارآيي بالا است. در اين مد ۸۰۲۸۶ مستقيماً تا ۱۶ مگابايت حافظه را آدرس دهي كند. مد آدرس دهي مجازي، مديريت حافظه مجازي، مديريت Task و حفاظت را فراهم مي سازد. برنامه نيس مي تواند يكي از اين دو مد را، با بارگذاري مناسب داده با دستورهاي Load و Store در ثبات كلمه حالت ماشين (MSW) (Machine Status Word)كه ۱۶ بايتي است، انتخاب كند.

مثلاً دستورهاي
Load MSW register = LMSW
Store MSW register = SMSW
80286 به عنوان CPU در كامپيوترهاي شخصي IBM PC/AT به كار گرفته شد. نسخه هاي پيشرفته تري مانند ۳۸۶ و ۴۸۶ و … بعداً بررسي خواهد شد.
مثال:

۲۰ بيت آدرس فيزيكي به شكل زير محاسبه مي شود
محتواي CS چهار بيت به يك شكل منطقي به چپ شيفت داده مي شود

آدرس فيزيكي ۲۰ بيتي
BIU هميشه چهار صفر را در چهار بيت مرتبة پائين آدرس فيزيكي (سگمنت) درج مي كند. به عبارت ديگر CS شامل base يا store سگمنت كد جاري و IP شامل فاصله يا distanc از اين آدرس به بايت دستور بعدي است كد مناسب واكشي شود. دقت كنيد كه داده هاي بلافاصله بعدي به عنوان بخشي از سگمنت كد در نظر گرفته مي شوند.
ثبات SS به پشته جاري اشاره مي كند. آدرس فيزيكي ۲۰ بيتي پشته از ss و sp براي دستورهاي پشته مانند push و pop محاسبه مي شود. برنامه نويس مي تواند از ثبات BP به عوض sp براي دستيابي به پشته در مد آدرس دهي پايه استفاده كند. در اين حالت آدرس فيزيكي ۲۰ بيتي از BP و ss محاسبه مي شود.
ثبات DS به سگمنت داده جاري اشاره مي كند. براي اغلب دستورها، عملوندها از اين سگمنت واكشي مي شوند. محتوي ۱۶ بيتي SI (شاخص مبدأ) و DI (شاخص مقصد به عنوان آفست براي محاسبه آدرس فيزيكي ۲۰ بيتي استفاده مي شوند.
ثبات ES به سگمنت اضافي (Extra Segment) كه داده‌ها ذخيره مي‌شوند اشاره دارد (علاوه بر ۶۴K اشاره شده توسط DS). دستورهاي رشته معمولاً از ES و DI براي تعيين آدرس فيزيكي ۲۰ بيتي مقصد استفاده مي كنند.
سگمنت ها مي توانند داراي چهار وضعيت باشند:
• Continious
• Partially Over lapped
• Fully overlapped
• Disjoint
شكل زير پنج سگمنت (#۰ تا #۴) را نشان ميدهد كه در حافظه فيزيكي ذخيره شده اند:

نكته <= هر سگمنت بايد از مرزهاي حافظه ۱۶ بايتي آغاز شود.
مثالهايي از مقادير سگمنت براساس آدرس‌فيزيكي شروع شده در ، ، ، ، … و باشد. هر مكان حافظه فيزيكي مي تواند به يك يا چند سگمنت منطقي Map شود.
يك سگمنت ممكن است با بيش از يك ثبات سگمنت اشاره دهي شود. مثلاً، DS و ES ممكن است به سگمنت مشابهي در حافظه اشاره كنند اگر رشته گنجانده شده در آن سگمنت به عنوان يك سگمنت Source در يك دستور رشته و به عنوان سگمنت مقصد در دستور رشته اي ديگر باشد. دقت كنيد كه در يك دستور رشته سگمنت مقصد بايد توسط ES اشاره دهي شود.
قابل يادآوري است كه كدها نبايد در ۶ بايت آخر حافظه فيزيكي نوشته شوند. نقص اين مسأله ممكن است منجر به واكشي opcode از حافظه غيرموجود شوند و سبب hang كردن cpu گردد.

طراحي سيستم با استفاده از ۸۰۸۶
در اين بخش مي خواهيم مفاهيم اصلي مربوط به اينترفيس ۸۰۸۶ را به تراشه هاي جانبي مانند حافظه و I/O بررسي كنيم.
پايه ها و سيگنال هاي ۸۰۸۶
پايه ها و سيگنال هاي ۸۰۸۶ در شكل زير نشان داده شده است.

سيگنالهاي معمولي
نوع تابع نام
دوطرفه باس آدرس / داده ADI5-AD0
خروجي سه حالته آدرس/وضعيت A19/56-A16/S3
خروجي سه حالته Status/Bus high enable
ورودي Minimum/Maximum در كنترلي
خروجي سه حالته كنترل خواندن
ورودي انتظار براي كنترل تست TEST
ورودي كنترل وضعيت انتظار READY
ورودي Reset سيستم RESET
ورودي Interrupt request INTR
ورودي كلاك سيستم CLK
ورودي زمين GND
سيگنالهاي مد مي نيمم
نوع تابع نام
ورودي Hold request HOLD
خروجي Hold ACK HLDA
خروجي سه حالته كنترل نوشتن
خروجي سه حالته Memory/IO Control
خروجي سه حالته Data Transmit/Recive
خروجي سه حالته Data Enable
خروجي سه حالته Address Latch enable ALE
خروجي Interrput ACK INTA

سيگنال مد ماكزيمم

نوع تابع نام
دوطرفه Hold request
Access Control
خروجي سه حالته Bus priority lock
Control
خروجي سه حالته Bus cycle status , ,
خروجي Instruction Queve
Status QS1, QS0

تمامي پايه هاي ۸۰۸۶ از نوع TTL هستند. همانطوري كه قبلاً گفتيم ۸۰۸۶ مي تواند در دو مد مختلف عمل كند. مي نيمم مد (تك پردازنده) و ماكزيمم مد (چند پردازنده اي). پايه ورودي براي انتخاب يكي از اين دو مد بكار مي رود. اگر باشد، ۸۰۸۶ در مد مي نيمم كار مي كند. در اين مد، ۸۰۸۶ براي پشتيباني مي نيمم در سيستم هاي تك پردازنده اي كه داراي وسايل كمي هستند كه از باس استفاده مي كنند، به كار مي رود.
اگر باشد، ۸۰۸۶ در مد ماكزيمم تعريف مي شود تا از سيستم هاي چند پردازنده اي پشتيباني كند. در اين حالت اينتل ۸۲۸۸ كه يك باس كنترلر است به ۸۰۸۶ براي فراهم ساختن كنترل هاي باس و سازگاري با معماري چندگذرگاهي اضافه مي شود.
AD0-AD15 خطوط گذرگاه ادغام شده آدرس/داده ۱۶ بيتي هستند. در اولين سيكل كلاك AD0-AD15 16 بيت مرتبه پائين آدرس مي باشند. ۸۰۸۶ آدرس ۲۰ بيتي دارد و چهار خط مرتبه بالاي ادرس، با سيگنال هاي وضعيت ۸۰۸۶ مالتي پلكس هستند. اين سيگنال ها عهبارتتد از:
A16/S3 و A17/S4 و A18/S5 و A19/S6
در خلال اولين پريود كلاك از سيكل گذرگاه (سيكل نوشتن يا خواندن)، كل آدرس ۲۰ بيتي در اين خطوط در دسترس است. در تمامي ديگر سيكل هاي كلاك براي عمليات حافظه و I/O، ADI5-AD0 شامل داده ۱۶ بيتي است و S3 و S4 و S5 و S6 خطوط وضعيت هستند. خطوط S3 و S4 به شرح زير ديكلود مي شوند:

A17/S4 A16/S3 تابع
۰ ۰ Extra Segment
0 1 Stack Segment
1 0 Code or no Segement
1 1 Data Segment

بنابراين پس از اولين سيكل كلاك اجراي دستورالعمل، پايه هاي A17/S4 و A16/S3 مشخص مي كنند كه كدام ثبات سگمنت بخش سگمنت آدرس ۸۰۸۶ را توليد مي كند. بدين ترتيب، با ديكود كردن اين خطوط و استفاده از خروجي هاي ديكودر به عنوان انتخاب كننده هاي تراشه (Chip Selects) براي تراشه هاي حافظه، حداكثر تا ۴ مگابايت (۱MB در هر سگمنت) را مي‌توان فراهم ساخت. اين امر درجه اي از حفاظت را به وسيله اجتناب از عمليات نادرست نوشتن در يك سگمنت كه با سگمنت ديگر همپوشاني دارد و نابود كردن اطلاعات آن سگمنت فراهم مي آورد.
A18/S5 و A19/S6 به عنوان A18 و A19 در خلال اولين پريود كلاك از اجراي دستور، به كار ميروند. چنانچه يك دستور I/O اجرا شود، در خلال اولين پريود كلاك low باقي مي ماند. در خلال تمامي ديگر سيكل ها، A18/S5 وضعيت پرچم تواناساز وقفه ۸۰۸۶ را نشان مي دهد و A19/S6 به S6 تبديل مي شود و Low بودن پايه A19/S6 نشان مي دهد كه ۸۰۸۶ در گذرگاه است. در اثناي Hold Acknowledge پريود كلاك، ۸۰۸۶ پايه A19/S6 را سه حالته كرده وبدين ترتيب به bus master ديگر براي گرفتن كنترل گذرگاه سيستم اجازه مي دهد.
۸۰۸۶ ، AD0-AD15 را در خلال سيكل Interrupt ACK يا سيكل Hold ACK سه حالتي مي كند.
به عنوان Bus high enable در خلال اولين سيكل كلاك اجراي دستور به كار ميرود. ۸۰۸۶ در اين پايه در هنگام خواندن، نوشتن و Interrupt Ack كه داده ها به شكل مرتبه بالاي گذرگاه داده (AD15-AD8) انتقال مي يابند، low قرار ميدهد. هم چنين BHE مي تواند با اتصال با AD0 براي انتخاب بانك هاي حافظه استفاده شود. در خلال تمامي ديگر سيكل ها BHE/S7 به صورت S7 استفاده مي شود و ۸۰۸۶ داراي سطح خروجي اولين سيكل در اين پايه خواهد بود.
هنگامي كه ۸۰۸۶ داده ها را از حافظه يا يك مكان I/O مي خواند، خواهد بود.
يك پايه ورودي است و فقط به وسيله دستور WAIT استفاده يم شود. ۸۰۸۶ يك وضعيت Wait را پس از اجراي دستور WAIT تا هنگامي كه Low در پايه TEST باشد قرار ميدهد. اين ورودي به شكل داخلي در اثناي هر سيكل كلاك در لبه كلاك سنكرون مي شود.
INTR يك ورودي وقفه maskable است. اين خط latch نمي شود و بنابراين تا هنگام تشخيص و توليد وقفه بايد در high نگاه داشته شود.
NMI ورودي non maskable interrupt است. RESET سيگنال ورودي reset سيستم است و اين سيگنال بايد براي حداقل چهار سيكل تا هنگام تشخيص و شناسايي high باشد و سبب مي شود رجيسترهاي DS، SS، ES، , Ip و Flagها همگي صفر شوند.
هم چنين CS به FFFFH تنظيم مي گردد. پس از حذف reset از پايه RESET، ۸۰۸۶ دستورالعمل بعدي را از آدرس فيزيكي ۲۰ بيتي FFFF0H يعني (CS:FFFFH,IP=0000) CS*16+IP واكشي مي كند.
هنگامي كه ۸۰۸۶ لبه هشت پالس را در RESET تنشخيص دهد، تمامي فعاليت هاي خويش را تا هنگام low شدن كلاك متوقف مي سازد. هرگاه reset برابر low گردد، ۸۰۸۶ سيستم را به شرح زير مقداردهي اوليه (initislize) مي كند.

مؤلفه هاي ۸۰۸۶ محتوي
پرچم ها Clear
IP 0000H
CS FFFFH
DS 0000H
SS 0000H
ES 0000H
Queue Empty

سيگنال reset براي ۸۰۸۶ را مي توان با ۸۲۸۴ توليد كرد. ۸۲۸۴ يك ورودي تريگر اشميت (Schmitt Trigger) به نام براي توليد reset از خروجي reset دارد.
براي توليد reset به شكل صحيح، ورودي بايد براي ۵۰MS پس از اين كه Vcc به مي نيمم ولتاژ ۴٫۵V رسيد زير ۱٫۰۵ ولت نگاهداشته شود. سيگنال ورودي از ۸۲۸۴ را مي توان با مدار RC ساده اي شبيه شكل زير ساخت:
مقادير R و C به شرح زير قابل حصول هستند:

بطوريكه
ميكروثانيه
مثلاً اگر C را به شكل اختياري F 0.1 انتخاب كنيم R=1.88K
همانطوري كه قبلاً گفتيم ۸۰۸۶ مي تواند در مد مينيمم و ماكزيمم با استفاده از پايه پيكره بندي شود. در مد مي نيمم، ۸۰۸۶ بخودي خود تمامي سيگنال هاي كنترل گذرگاه را توليد مي كند. اين سيگنال ها عبارتند از:
• (Database Transmit/ReCeive)
يك سيگنال خروجي لازم براي مد ۸۰۸۶ مي نيمم است كه از ۸۲۸۶/۸۲۸۷ (data bus transceiver) استفاده مي كند و براي كنترل جهت جريان داده ها استفاده مي شود.
• (Data Enable)
به شكل يك output enable براي ۸۲۸۶/۸۲۸۷ در سيستم مي نيمم استفاده مي شود. در خلال هر دستيابي بحافظه و I/O براي سيكل هاي ، برابر low مي باشد.
• (Address Latch Enable) ALE
يك سيگنال خروجي فراهم شده توسط ۸۰۸۶ است و براي دي مالتي پلكس كردن AD0-AD15 به A0-A15 و D0-D15 در لبه پائين رونده ALE استفاده مي شود. سيگنال ALE در ۸۰۸۶ مشابه ALE در ۸۰۸۵ است.
• اين سيگنال خروجي براي تمايز دستيابي به حافظه ( =high) از ( =low) I/O استفاده مي شود. هنگامي كه ۸۰۸۶ يك دستور I/O را مانند IN يا OUT توليد مي كند، اين پايه را به low تنظيم مي كند و هنگامي كه رجوع به حافظه را مثل [SI] و MOV AX اجرا مي كند، اين پايه را به high تنظيم مي كند.

در هنگام نوشتن در حافظه يا I/O به low تنظيم مي شود.
• مانند در ۸۰۸۵ است. و براي سيكل هاي تأئيد وقفه اين پايه low مي شود.
• ورودي HOLD و خروجي HLDA
از اين پايه ها در DMA استفاده مي شود. High بودن اين پايه يعني اين كه يك master ديگري تقاضاي در اختيار گرفتن سيستم Bus را دارد و پايه HLDA را به عنوان ACK برابر high مي كند و به طور همزمان پردازنده، گذرگاه را سا حالته كرده تا هنگاميكه براي پايه HOLD سيگنال low را دريافت كند. در اين صورت پردازنده low را در پايه HLDA قرار ميدهد. HOLD يك ورودي آسنكرون نيست.
• CLK
ورودي فراهم كننده زمان بندي اصلي براي ۸۰۸۶ و كنترل كننده گذرگاه
در مد ماكزيمم برخي از پايه هاي ۸۰۸۶ به صورت دوباره تعريف مي شوند. مثلاً پايه هاي HOLD، HLDA، ، ، ، ، ALE و در مد مي نيمم به شكل ، ، ، ، ، ، QS0 و QS1 به ترتيب در مد ماكزيمم تعريف مي شوند. درمد ماكزيمم كنتلر ۸۲۸۸ اطلاعات وضعيت را از ، ، براي توليد زمان بندي گذرگاه و سيگنال هاي كنترل لازم براي سيكل گذرگاه ديكو.د مي كند. ، ، در خروجي ۸۰۸۶ به شرح زير ديكود مي شوند:

توضيح
۰ ۰ ۰ int. ACK
0
0 1 خواندن پورت I/O
0 1 0 نوشتن در پورت I/O
0 1 1 halt
1 0 0 دستيابي به كد
۱ ۰ ۱ خواندن حافظه
۱ ۱ ۰ نوشتن در حافظه
۱ ۱ ۱ غيرفعال

• و