ریزپزدازنده های اینتل
صفحه بعد صفحه قبل
با توجه به اینکه دستورات اسمبلی 8086 در قسمت ها آینده بررسی می شوند، در این صفحه با نحوه آدرس دهی حافظه و ثبات های این پردازنده آشنا خواهید شد.
خانواده 80x86
آدرس دهی سگمنتی
مدهای اجرا
مجموعه ثبات ها
خانواده 80x86
کلیه کامپیوترهای شخصی IBM پردازنده ای از خانواده 80×86 دارند. پردازند های این خانواده همگی دارای ویژگی های مشترکی ازجمله زبان ماشین پایه یکسان هستند. البته اعضای جدید ویژگی های خود را به میزان زیادی افزایش داده اند.
تعدادی از پردازنده های این خانواده بدین شرح می باشند:
(1979)8088,(1978)8086
• این CPU ها، که از دیدگاه برنامه نویسی برابر هستند، پردازنده هائی بودند که روی اولین کامپیوترهای شخصی به کار رفته اند. دارای ثبات های 16 بیتی (AX، BX، CX، DX، SI، DI، BP، SP، CS، DS، SS، ES، IP و FLAGS ) هستند و تنها در مد حقیقی عمل می کردند. 8086 دارای گذرگاه داده 16 بیتی و گذرگاه آدرس 20 بیتی بود و بنا براین قابلیت آدرس دهی تا 1 مگابایت حافظه را داشت و می توانست با داده های 8 یا 16 بیتی همزمان کار کند. 8088 با گذرگاه داده 8 بیتی به طراحان اجازه پیچیدگی کمتر و ارزانتر سیستم های کامپیوتری را می داد.
(1983)80286
• این پردازنده، که در کامپیوترهای شخصی کلاس AT استفاده شد، دستورالعمل های جدیدی را به زبان ماشین 8086/88 اضافه کرد. اما ویژگی اصلی آن مد محافظت شده 16 بیتی بود که در این حالت می توانست تا 16 مگابایت حافظه را دسترسی پیدا کند. البته برنامه ها همچنان به سگمنت هائی تقسیم بندی می شدند که نمی توانستند بیشتر از 64K باشند.
(1986)80386
• اولین پردازنده 32 بیتی که توسط اینتل معرفی شد 80386 DX بود که علاوه بر حفظ سازگاری با پردازنده های قبلی اجرای عالی داشت. این پردازنده چند ثبات را به 32 بیتی گسترش داد (EAX, EBX, ECX, EDX, ESI, EDI, EBP,ESP, EIP) و دو ثبات جدید 16 بیتی FS و GS را اضافه کرد. دارای گذرگاه های آدرس 32 بیتی بود و در مد محافظت شده 32 بیتی می توانست تا 4 گیگابایت حافظه فیزیکی را آدرس دهی کند. برنامه ها دوباره به سگمنت ها تقسیم می شدند اما اندازه هر سگمنت می توانست تا 4 گیگا بایت باشد. نسخه 16 بیتی آن 80386 SX با گذرگاه آدرس 24 و داده 16 بیتی در 1988 بیرون آمد که تنها تا 16 مگابایت را دسترسی داشت.
(1989)80486
• 80486 DX دارای حافظه نهان و کمک پردازنده ریاضی در یک تراشه بود که حدود 50% سریع تر از 80386 بود. 80486 SX را هم معرفی شد که تنها پیوند آن با میکروپروسسور ریاضی وجود نداشت.
( 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
• این پردازنده ها تنها سرعت اجرای دستورالعمل ها را بالا بردند.
بلوک دیاگرام ریزپردازنده 8086
آدرس دهی سگمنتی
پردازنده های 8086 دارای گذرگاه 20 بیتی هستند، بنابراین می تواند تا 1 مگابایت حافظه را آدرس دهد(از آدرس 00000 تا 1MB=1048575=FFFFF). این آدرس ها به یک عدد 20 بیتی احتیاج دارند. روشن است که یک عدد 20 بیتی را نمی توان در ثبات های 16 بیتی 8086 جا داد. اینتل این مشکل را با آدرس دهی سگمنتی (segment addressing) حل کرد. سگمنت یک تکه از حافظه با اندازه 64 کیلوبایت است. یک محل از حافظه با یک آدرس سگمنت و یک آفست (offset) مشخص می شود که به صورت دو عدد 16 بیتی نشان داده می شوند. آدرس سگمنت به سگمنتی در حافظه اشاره می کند که حاوی محل مورد نظر است. هر سگمنت از یک پاراگراف می تواند شروع شود. هر پاراگراف 16 بایت دارد، بنابراین سگمنت از آدرسی که مضربی از 16 است شروع می شود. یعنی سگمنت اول از آدرس 00000، سگمنت دوم از آدرس 00010، بعدی از آدرس 00020 و الی آخر شروع می شود. در نتیجه آدرس شروع هر سگمنت از سمت راست به صفر ختم می شود که از آن صرفنظر می شود. بنابراین آدرس سگمنت همیشه به صورت یک عدد 4 رقمی هگز نوشته می شود.
آفست فاصله بایت مورد نظر از ابتدای سگمنت را مشخص می کند. با توجه به اینکه هر سگمنت 64KB حافظه دارد، آفست می تواند بین 0000 تا ffff باشد. بنابراین آفست نیز همیشه یک عدد 4 رقمی هگز است.
آدرس سگمنتی به صورت آفست:سگمنت نوشته می شود.
مثال 1. آدرس فیزیکی 18A3:5B27 به بایتی در سگمنت 18A30 اشاره دارد که از ابتدای این سگمنت 5B27 بایت فاصله دارد.
مثال 2. آدرس فیزیکی 04808 می تواند توسط 047C:0048 رجوع شود.
آدرس های سگمنت-آفست یک آدرس منطقی را تعیین می کنند. برای ساختن آدرس فیزیکی 20 بیتی طبق فرمول زیر محتوای آدرس سگمنت را در 16 ضرب کرده با آدرس آفست جمع می کنیم:
16× segment + offset
ضرب در 16 آسان است کافی است یک صفر در سمت راست عدد گذاشته شود.
مثال 3. آدرس فیزیکی رجوع شده توسط 047C:0048 برابر است با:
047C0+0048=04808
سگمنت ها روی هم می توانند قرار بگیرند بنابراین یک بایت، با داشتن آدرس فیزیکی منحصر بفرد در حافظه، می تواند از طریق چندین ترکیب سگمنت:آفست بدست می آید.
مثال 4. آدرس فیزیکی 04808 می تواند توسط 047C:0048، 047D:0038، 047E:0028 یا 047B:0058 رجوع شود.
سگمنت های برنامه
سه ناحیه از سگمنت های حافظه که هر یک می توانند 64KB باشند برای یک برنامه در نظر گرفته می شوند:
1. سگمنت کد
• شامل دستورالعمل های زبان ماشین برنامه ای که دارد اجرا می شود. اولین دستور اجرائی برنامه در ابتدای این سگمنت قرار دارد و سیستم عامل CPU را برای اجرای برنامه به این محل ارجاع می دهد.
2. سگمنت داده
• شامل داده های تعریف شده و ناحیه کاری که برنامه نیاز دارد.
3. سگمنت پشته
• شامل آدرس های برگشتی از زیربرنامه ها و داده های محلی است .
نکته 1. برنامه و داده در هر سگمنتی از حافظه می توانند قرار گیرند، فقط آدرس شروع سگمنت باید برای CPU تعریف شده باشد. این آدرس ها در ثبات های سگمنت ذخیره می شوند و اغلب درطول اجرای برنامه ثابت باقی می مانند. در عمل هنگام برنامه نویسی تنها از آدرس 4 رقمی آفست استفاده می شود.
نکته 2. سگمنت ها می توانند روی همدیگر بیافتند. در بعضی مواقع که برنامه کوتاه است سگمنت داده می تواند از داخل سگمنت کد شروع شود به شرط اینکه تداخل رخ ندهد.