ساختمان پردازنده 8086 / 8088 از دو دید قابل بررسی می باشد:
1.سخت افزاری.
2. نرم افزاری.
ما این پردازنده ها را از دید نرم افزاری بررسی می کنیم که از سه جهت قابل شناسایی می باشد. شناخت ثبات ها، روش های آدرس دهی و دستوالعمل ها
شناخت ثبات ها
الف) همه منظوره :
<!--[if !supportLists]-->1.<!--[endif]-->AX
<!--[if !supportLists]-->2.<!--[endif]-->BX
<!--[if !supportLists]-->3.<!--[endif]-->CX
<!--[if !supportLists]-->4.<!--[endif]-->DX
ب) ثبات های قطعه :
<!--[if !supportLists]-->1.<!--[endif]-->CS
<!--[if !supportLists]-->2.<!--[endif]-->DS
<!--[if !supportLists]-->3.<!--[endif]-->ES
<!--[if !supportLists]-->4.<!--[endif]-->SS
ج) ثبات های شاخص :
<!--[if !supportLists]-->1.<!--[endif]-->SI
<!--[if !supportLists]-->2.<!--[endif]-->DI
د) ثبات های پشته :
<!--[if !supportLists]-->1.<!--[endif]-->BP
<!--[if !supportLists]-->2.<!--[endif]-->SP
ی) ثبات های اشاره گر دستورالعمل: IP
و) ثبات پرچم
پردازنده 8086 دارای 14 ثبات 16بیتی برنامه نویسی است. ثبات های دیگری نیز وجود دارد که از دید برنامه نویس پنهان است.
الف) همه منظوره General Purpose Register :
ثبات AX (انباره Accumulator):
نزدیک ترین ثبات به قسمت ALU است، به همین دلیل سرعت محاسباتی نسبت به بقیه ثبات ها بیشتر است، اکثر عملیات ریاضی در این ثبات انجام می گیرد، به عنوان یک انباره به طور ضمنی در عملیات ورودی و خروجی استفاده می شود.
ADD AX,4
ثبات BX (پایه BASE):
این ثبات علاوه بر همه منظوره بودن، در برخی روش های آدرس دهی نقش ثبات پایه را بازی می کند، به غیر از عملیات ریاضی می تواند به عنوان Offset متعلق به بخش داده باشد.
ADD BX,4 : BL=BL+4
Mov al,[BX] : al = Value[DS*10+BX]
ثبات CX (شمارنده Counter):
به عنوان یک شمارنده در دستورالعمل های حلقه و یا پردازش رشته و همچنین دستورالعمل های دستکاری بیت ها استفاده می شود.
ثبات DX (داده DATA):
این ثبات در بعی از دستورالعمل های محاسباتی مانند ضرب و تقسیم، نگهدارنده بخشی از نتایج است.
ب) ثبات های قطعه Segment Register :
آدرس آغاز هر Segment در این ثبات ها نگهداری می شود.
CS(Code Segment) : آدرس کد سگمنت را نگهداری می کند
DS(Data Segment) :آدرس سگمنت داده را نگهداری می کند
SS(Stack Segment) :آدرس سگمنت پشته را نگهداری می کند
ES(Extra Segment) :آدرس سگمنت Extra (اضافی) را نگهداری می کند
آدرس ها در 8086 ، 20 بیتی هستند یعنی برای نگهداری یک آدرس به 20 بیت یا 5 رقم هگز نیاز داریم، حال چگونه می توان یک آدرس 20 بیتی را در ثبات های 16 بیتی ذخیره کرد؟
برای حل این مشکل سگمنت ها از نقاطی شروع می شوند که چهار بیت کم ارزش آدرس آن نقاط صفر باشد، به عبارت دیگر سگمنت ها از مرز پاراگراف شروع می شوند.
مرز پاراگراف : نقاطی از حافظه که در آنها بر 10 هگز یا 16 دهدهی قابل قسمت باشند.، یعنی چهار بیت کم ارزش صفر و یا اولین رقم هگز آدرس آن نقطه صفر باشد.
برای نگهداری آدرس سگمنت ها تنها 16 بیت با ارزشآدرس سگمنت در ثبات ها قرار گرفته و هنگام محاسبه یک صفر در مقابل این آدرس قرار می دهیم
Real Adress = Segment * 10Hex + Offset
نکته : مرز پاراگراف 16 بایت به 16 بایت تکرار می شود.
مثال : آدرس واقعی مقابل را پیدا کنید
42B7:3FDC
42B7 * 10 + 3FDC = 46B5C
ج) ثبات های شاخص Index Register :
SI (Source Index) : به عنوان اندیس جهت دسترسی به عناصر داده های ساختاری است
DI (Destanation Index) به عنوان اندیس جهت دسترسی به آدرس رشته ها در دستورات پردازش رشته نیز استفاده می شود.
از این ثبات ها به منظور دسترسی به داده ها در روش آدرس دهی شاخص دار مورد استفاده قرار می گیرد.
د) ثبات های پشته Pointer Register :
BP (Base Pointer) از ابتدا به انتها
SP (Stack Pointer) از انتها به ابتدا
از این ثبات ها به منظور دسترسی به داده ها در ناحیه stack memory استفاده می شود.
این ثبات ها به عنوان افست یا شاخص چهت دسترسی به فضای پشته به کار برده می شود.
* از پشته می توان به عنوان یک قطعه داده ای نیز استفاده نمود.
ی) ثبات های اشاره گر دستورالعمل: PC/IP
این ثبات همواره مقدار offset دستورالعمل در حال اجراست (در ناحیه Code segment)
Real Adress = Cs * 10 Hex + IP
PC/IP مخفف Instruction Pointer / Program Counter می باشد.
و) ثبات پرچم (FLAG)
* در بعضی کتاب ها این ثبات با نام P.W.S (Program Word Status) شناخته می شود.
این ثبات در هر لحظه آخرین وضعیت اجرای دستورالعمل را نشان می دهد.
CF (Carry Flag) :
اگر دستورالعمل منجر به نتیجه ای شود که در آن رقم نقلی یک باشد، این بیت یک خواهد شد در غیر اینصورت صفر می شود.
PF (Parity Flag) :
از این بیت برای بالا بردن اطمینان نسبت به انتقال داده ها بین اجزاء سیستم استفاده می شود، در این صورت که همواره تعداد یک ها در یک بایت باید تعداد فردی باشد.
PF با توجه به این موضوع مقدار می گیرد یعنی اگر نتیجه دارای تعداد فرد یک باشد بیت P مقدار صفر را می گیردو اگر تعداد زوج یک باشد بیت P، مقدار یک می گیرد.
AF (Auxlary Flag) :
نشان دهنده رقم نقلی تولید شده بر بیت شماره 4 هنگام پردازش است، معمولا کاربرد آن در عملیات BCD می باشد. اگر این بیت صفر باشد رقم نقلی صفر است و اگر این بیت یک باشد، رقم نقلی یک است.
ZF (Zero Flag) :
اگر نتیجه حاصل صفر باشد این بیت یک و اگر نتیجه حاصل غیر صفر باشد این بیت صفر می شود.
SF (Sign Flag) :
اگر نتیچه حاصل منفی باشد این بیت یک و اگر نتیجه حاصل مثبت شود این بیت صفر خواهد شد.
TF (Trap Flag) :
اگر این بیت صفر باشد پردازنده در حالت نرمال دستورات را اجرا می کند و اگر یک باشد اجرای برنامه به صورت دستور به دستور خواهد بود.
IF (Intrupt Flag) :
اگر پردازنده در حال پردازش یک دستور وقفه باشد این بیت یک و در صورتیکه پردازنده در حال اجرای وقفه نباشد این بیت صفر خواهد بود.
DF (Direct Flag) :
این بیت نشان دهنده جهت پردازش است (به خصوص در دستورالعمل های رشته ای)
در دستورالعمل های پردازش رشته اگر این بیت صفر باشد بدین معنی است که پردازش از ابتدا به انتها (افزایشی) می باشد و اگر این بیت یک باشد بدین معنی است که پردازش از انتها به ابتدا (کاهشی) است.
OF (Overflow Flag) :
اگر نتیجه حاصل Over Flow باشد، این بیت یک، در غیر اینصورت صفر خواهد بود.