X
تبلیغات
پیکوفایل
رایتل

کامپیوتر

میکروپروسسور 8080

لطف کنین نظریادتون نره دوست عزیز نظرات بصورت خصوصی میادتووب ونشون داده نمیشه

مقدمه: پس از آشنایی با کامپیوتر شریف با نمونه هایی از یک کامپیوتر عملی مانند Z80 , 8080 آشنا خواهید شد میکروپرسسور 8080 اینتل (intel) در دسامبر 1971 به بازار آمد هر چند این تراشه جدید نیست ولی با پرسسورهایی که بعد از آن به بازار آمدند مانند Z80 , 8085 از لحاظ نرم افزاری سازگار است. از اینرو آشنایی با عملکرد 8080، فراگیری عملکرد دو پروسسور دیگر را ساده می کند .

CPU پایه دارد لزوم داشتن سه منبع تغذیه(12V,+5V,-5V) سیگنال ساعت دو فازه ناهمپوشان و آی سی های کمکی 8224 , 8228 بعلت محدودیت در تکنولوژی ساخت  IC درآن زمان باعث شده تا بعدها CPU مهمتری با یک منبع تغذیه 5V و با قابلیت بیشتری وارد با زار شود واکنون از 8080 کمتر برای ساخت مدارات استفاده می شود.در این فصل پس ازآشنایی با ساختار ظاهری و ساختمان داخلی 8080  با دستورالعملها و برنامه نویسی آن آشنا خواهید شد سپس برای درک سخت افزاری عملکرد کامپیوتر با زمانبندی (timing) آشنا می شوید.

2-1) مدولهای 8080 CPU:

میکروپروسسور 8080 با دو آی سی جانبی در شکل (1-2) نشان داده شده است. ابتدا به صورت مختصر با عملکرد هر یک از پایه های 8080 آشنا می شوید.

A0-A15 (output): باس آدرس: باس آدرس، آدرس حافظه را فراهم می کند. که می توان 216 مکان حافظه معادل 64kکلمه 8 بیتی را به عنوان آدرس روی آن قرار داد. همچنین با قرار دادن شماره دریچه I/O می توان تا 256 دریچه را به عنوان وسیله دریچه خروجی یا دریچه ورودی مورد استفاده قرار داد.

 

 

 

 

 

:(input/output) D0-D7 باس داده: برای انتقال داده از CPU به حافظه و انتقال داده به I/O بصورت دوجهته مورد استفاده قرار می گیرد. همچنین در اولین سیکل ساعت (T-cycle) هر سیکل ماشین (machin-cycle) یک کلمه حالت را که سیکل ماشین در حال اجرای آن است , توصیف می کند.

: (output) SYNC سیگنال همزمانی: SYNC یک سیگنال است که CPU برای نشان دادن ابتدای سیکل ماشین جهت استفاده در 8224 تولید میکند.

(output)  DBIN باس داده درحالت ورودی: این سیگنال نشان می دهد که باس داده در حالت ورودی است وبرای راه دادن داده از حافظه یا I/O از این سیگنال استفاده می‌شود.

: (input)  READY این سیگنال به 8080 پیام می دهد که داده معتبری برروی باس داده قرار گرفته است بعضا حافظه از CPU کندتر است و مدت زمانی طول می کشد تا داده اصلی روی باس داده قرار گیرد. تا وقتی سیگنال READY پایین باشد CPU در حالت انتظار است.

: (output) WAIT این سیگنال اعلام می کند که CPU در حالت انتظار است.

: (output) WR این سیگنال برای نوشتن درحافظه یا کنترل I/O استفاده می شود. تا وقتی که WR پایین است داده روی باس داده پایدار می ماند.

: (input)  HOLD این سیگنال از CPU می خواهد که وارد حالت HOLD شود در این حالت یک وسیله جانبی می تواند از باس آدرس و باس داده به عنوان باسهای کمکی خودش استفاده کند. وقتی که این سیگنال وارد CPU شود CPU پس از اجرای سیکل ماشین جاری در حالت  HOLD قرار می گیرد.

: Hold Acknowledge  (output)  HLDA  سیگنال فوق در پاسخ به سیگنال ورودی HOLD از CPU خارج می شود و نشان می دهد که پایه های CPU‌ وارد حالت امپدانس بالا شده اند.

: Interrupt Enable (output) INTE محتویات فیلیپ فلاپ وقفه را نشان می دهد. اگر این فیلیپ فلاپ در حالت reset قرار گیرد در این صورت CPU، وقفه را نمی پذیرد این فیلیپ فلاپ در سیکل اول احضار دستور هنگامی که وقفه پذیرفته شده است یا هنگامی که سیگنال Reset، CPU فعال شده باشد  reset می شود.

: Interrupt request (input) INT CPU با این سیگنال در انتهای دستورالعمل جاری یا هنگام HALT بودن تقاضای وقفه را تشخیص می دهد.

: RESET با آمدن سیگنال reset محتویات شمارنده برنامه (PC) پاک می شود برنامه از محل صفر حافظه شروع می شود و فیلیپ فلاپهای HALT , INET نیز reset می شود. ولی محتویات انباره پرچمها شمارنده پشته و رجیسترها عوض نمی شود.

:VSSزمین

:VDDتغذیه +12V

:VCCتغذیه +5V

:VBBتغذیه-5v

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

با نحوه زمانبندی و عملکرد  در بخشهای بعدی آشنا می شوید

. D0 (INTA). : سیگنال تایید وقفه است.

D1 (نماد WO): نشان می دهد که سیکل ماشین جاری درحال اجرای دستور خروجی یا نوشتن درحافظه است که در این صورت WO=0 است یا اینکه درحال خواندن حافظه است که دراین صورت WO = 1 می باشد.

D2 (STACK): نشان می دهد باس آدرس، آدرس پشته را در بر دارد.

D3 (HLTA): سیگنال تایید HALT  است.

D4 (OUT): نشان می دهد که باس داده آدرس یک وسیله خروجی را در بر دارد.

D5 (M): نشان می دهد که CPU در حال احضار اولین بایت یک دستور است.

D6 (INP): نشان می دهد که باس آدرس، آدرس یک وسیله ورودی را در بر دارد.

D7 (MEMR): نشان می دهد که باس داده برای خواندن داده از حافظه است.

 

 

دو آی سی پشتیبان 8080 توسط اینتل ساخته شده است. 8228 کنترل کننده سیستم است و 8224 که مولد ساعت است. این آی سی سیگنال دو فازه ساعت را تولید می کند آی سی ابتدا فرکانس کریستال را بر 9 تقسیم می کند و از روی آن شکل موج  را می سازد معمولاً کریستال 18MHz است بنابراین سیگنال ساعت   2 MHz خواهد بود.

به عنوان تمرین می توانید مداری طرح کنید با داشتن سیگنال کریستال دو شکل موج ناهمپوشان  را ایجاد کند. برای فهم بهتر ساختمان پرسسور شکل (2-2) ساختار استاندارد 8080 با
آی سی های پشتیبان را نشان داده است.

2-2) ثباتهای میکروپرسسور 8080:

ساختمان داخلی 8080 در شکل (2-3) نشان داده شده است 8080 شامل شش ثبات 16 بیتی است سه تا از آنها بصورت عمومی استفاده می شوند(H,L) , (D,E) , (B,C) است این ثبات ها می‌توانند به صورت 8 بیتی یعنی H , E , D , C , B جداگانه استفاده شوند ثبات (program counter) PC آدرس محلی از حافظه که دستورالعمل جاری از آنجا اجرا می شود را در بر دارد. این ثبات 16 بیتی است.

ثبات انباره یک ثبات 8 بیتی است بیشتر دستورالعملهای برنامه دستورالعملهای حسابی و منطقی دادن و گرفتن داده از وسیله های I/O و انتقال از مکانی از حافظه به مکان دیگر با کمک این ثبات انجام می شود

ثبات  پرچم شامل پنج پرچم و ضعیت است که هنگام اجرای دستورات این پرچمها تغییر می‌کند.

عملکرد هر پرچم به عبارت زیر است.

: Zero–1 اگر حاصل یک دستورالعمل صفرشود. بیت فوق 1  می شود در غیر این صورت  صفر است.

: Sign –2 بیت علامت که پرارزشترین بیت داده است 1 بودن آن به معنی منفی بودن عدد است.

Parity–3 (بیت توازن): اگر تعداد بیتهای یک حاصل از دستورالعمل زوج باشد این پرچم 1 می‌شود مگرنه مقدارش صفر است.

Carry–4 (بیت نقلی): اگر در موقع جمع یا تفریق دو عدد یک بیت نقلی یا بیت قرض (Borrow) ایجاد شود این پرچم 1 می شود مگرنه در حالت صفر می ماند.

: Auxiliary Carry –5 اگر در یک جمع یک رقم نقلی از بیت 3 به بیت 9 برود پرچم فوق 1 می‌شود مگرنه مقدارش صفر است.

به ثبات های انباره و پرچم با هم ثبات کلمه حالت پرسسور (PSW)  می گویند که یک ثبات 16 بیتی است. در شکل (4-2): مکان هر پرچم روی ثبات پرچم (Flag) مشخص شده است

CY

1

P

0

AC

0

Z

S

شکل (4-2): محل پرچمهای روی ثبات F

Stack Pointer (اشاره گر پشته): هنگام صدا زدن یک زیر برنامه (subroutin) در طول اجرای برنامه اصلی و یا برای نوشتن برنامه های خاصی از این ثبات استفاده می شود. که در بخشهای بعدی توضیح داده خواهد شد.

2-3) دستور العملهای 8080:

در 8080 هفت نوع دستورالعمل وجود دارد که در هر قسمت جداگانه به آنها می پردازیم.

2-3-1) گروه انتقال داده:

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

نکته: این دستورات تاثیری در وضعیت پرچمها ندارد.

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

MOV   R1 , R2: انتقال از ثبات به ثبات دیگر.

: op code 01 DDD SSS زمان اجرا 5 سیکل ساعت.

نکته: تمام دستورات داده ساختار مقابل را دارند    مبداء , مقصد : انتقال

: MVI   R,DATA انتقال فوری داده مشخص به داخل ثبات.

Opcode 00DDD110 : (مکان N حافظه)

زمان اجرا : 7 سیکل ساعت.

: MOV R,M انتقال از حافظه به ثبات، آدرسی که ثبات های HL به آن اشاره می کنند و داده M را در بر دارد را بهR انتقا ل می دهد.

Opcode : 01 DDD 110 زمان اجرا: 7 سیکل ساعت.

نکته: در هر دستورالعمل که M مشاهده کردید منظور داده آدرسی از حافظه است که HL به آن اشاره می کند.

: MVI M,(DE) این دستور  محتوای آدرسی را که DE به آن اشاره میکند در M یعنی آدرسی که HL به آن اشاره میکند قرار می دهد.

Opcode : 00110110=36 H

Data : 11011110=DEH

: LXI RP,DATA داده 16 بیتی در ثبات کمکی (مثلاً ثبات BC) قرار می دهد.

Opcode : 00RP0001

Data(LSB):XXXXXXXX

Data(HSB):YYYYYYYY

زمان اجرا : 10 سیکل ساعت.

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

: LDA   ADDR محتوای مکانی از حافظه که در دستورالعمل آمده و در انباره قرار می دهد.

Opcode: 00RP0001

Data (LSB):XXXXXXXX

Data(HSB): YYYYYYYY

زمان اجرا: 10 سیکل ساعت.

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

LDA   ADDR : محتوای مکانی از حافظه که در دستورالعمل آمده در انباره قرار می دهد.

Opcode : 00111010

Data (LSB): XXXXXXX

Data(MSB):YYYYYYYY

زمان اجرا: 13 سیکل ساعت

:STA   ADDR محتوای انباره را در مکانی از حافظه که در دستورالعمل آمده قرار می دهد.

Opcode : 00110010

Data (LSB): XXXXXXXX

Data(MSB): YYYYYYYY

: XCHG پس از اجرای این دستور محتوای آدرسهایی از حافظه که DE , HL به آن اشاره می‌کردند با هم عوض می شود.

Opcode : 11101011

2-3-2) گروه دستورالعملهای ریاضی:

این گروه تمام دستورالعملهای مانند جمع وتفریق و افزایش و کاهش را شامل می شود این دستورالعملها می تواند بصورت 8 بیتی یا 16 بیتی باشد البته تذکر این نکته لازم است که بقیه اعمال ریاضی مثل ضرب و تقسیم یا جمع 32 بیتی و غیره را می توان با کمک نرم افزار و استفاده از این دستورالعملها ایجاد کرد همچنین این دستورالعملها تاثیر برروی وضعیت پرچمها دارند که این تاثیر در برنامه نویسی باید در نظر گرفته شود.

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

ADD R: محتوای ثبات R را با انباره جمع می کند و حاصل را در انباره قرار می دهد پرچمهای
Z , S , P , CY , AC  پس از اجرای این عمل ممکن است تغییر کنند.

Opcode : 10000 SSS

زمان اجرا: 4 سیکل ساعت است.

: ADC R محتوای R را با بیت نقلی (carry) جمع می کند حاصل را در انباره قرار می دهد.

Opcode: 11001110

زمان اجرا: 7 سیکل ساعت.

: SUB R محتوای ثبات R را از انباره کم می کند و حاصل در انباره قرار می دهد.

Opcode : 10010 SSS

زمان اجرای: 4 سیکل ساعت.

: SBB R جمع ثباتهای دوتایی: مقدار 16 بیت RP را با 16 بیت HL جمع کرده و حاصل را در HL قرار می دهد.

Opcode: 00 RP 1001

زمان اجرا: 10 سیکل ساعت.

(2-3-3) دستورالعملهای چرخش:

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

نکته: پرچم وضعیت نقلی (carry) در این دستور العملها تحت تاثیر قرار می گیرد.

: RLC محتوای انباره را 1 بیت به سمت چپ شیفت می دهد. پس از اجرای دستور با ارزشترین بیت در داخل carry قرار می گیرد.

Opcode : 00000111

زمان اجرا: 4 سیکل ساعت.

: RAL محتوای انباره و  carry را مانند یک عدد 9 بیتی یک بیت به چپ شیفت می دهد بطوری که carry به بیت LSB انباره منتقل می شود.

Opcode : 00010111

زمان اجرا: 4 سیکل ساعت.

دستور RRC مشابه RLC ولی شیفت به راست و RAR مشابه RAL و برای شیفت به راست مورد استفاده قرا می گیرند.

: INR  R به محتوای ثبات R یک واحد اضافه می کند.

Opcode : 00DDD100

زمان اجرا: 5 سیکل ساعت.

: INX  RP به محتوای ثبات 16 بیتی RP  یک واحد اضافه می کند.

Opcode : 00RP0011

زمان اجرا: 5 سیکل ساعت.

: INR  M به محتوای مکانی از حافظه که آدرس آن در HL است یک واحد اضافه می کند.

Opcode : 00110100

زمان اجرا: 10 سیکل ساعت.

دستورات DCX  RP , DCR M , DCR R مشابه دستور فوق است و برای کم کردن به اندازه یک واحد استفاده می شود.

نکته: این دستورات موقع اجرا تاثیری بر بیت نقلی Carry ندارند.

دستورات CMC , CMA برای مکمل کردن انباره و بیت نقلی استفاده می شود.

: DAA انطبات دهدهی انباره: 8 بیت انباره به 2، عدد 4 , BCD  بیتی تبدیل می کند.

2-3-4) گروه دستورالعملهای منطقی

این گروه شامل عملگرهای منطقی است و برای مقایسه دو عدد یا تشخیص 1 بودن بعضی از بیتها بکار می رود.

: ANA  R محتویات R را انباره را با هم AND کرده و حاصل را در انباره قرار می دهد.

Opcode : 10100 SSS

زمان اجرا: 4 سیکل ساعت.

دستورات ORA  M, DRA  R, XR1  Data, XAR  M, XAR  R, ANI  Data, ANA  M

ORI  Dataهر کدام عملکرد منطقی دارند که بسادگی عملکرد هر یک قابل حدس زدن است.

: CMP R محتوای A , R  را مقایسه می کند. اگر A>R سپس پرچم نقلی (Carry) Set می شود اگر R>A پرچم نقلی reset می شود اگر A=R باشد پرچم Zero روشن می شود.

Opcode : 10111 SSS

زمان اجرا: 4 سیکل ساعت.

دستورات CPI   Data, CMP  M برای مقایسه از حافظه یا مقایسه فوری استفاده می شوند.

2-3-5) گروه دستورالعملهای انشعابی:

دستورات پرشی برای ایجاد یک حلقه در برنامه یا صدا زدن یک زیر برنامه مورد استفاه قرار می‌گیرند. دستورات پرش می توانند با وضعیت پرچمها بصورت شرطی اجرا شوند.

: JMP  ADDR پس از اجرای دستور شمارنده برنامه به مکان ADDR از حافظه برای ادامه اجرای برنامه جهش میکند.

Opcode :11000011

LSB: A D D R

MSB : A D D R

: J(FLAG) ADDR به شرط درست بودن شرط پرش را انجام می دهد مگرنه به شمارنده برنامه به دستور بعدی می رود.

مثال: : JNZ در صورتی جهش انجام می شود که Z = 0 باشد.

: PCHL محتویات رجیستر HL به شمارنده برنامه منتقل می شود یعنی شمارنده برنامه به آن آدرس اجرای برنامه ها را ادامه می دهد.

: CALL ADDR صدا زدن فوری زیر برنامه : آدرس دستور بعدی در داخل پشته ذخیره می شود و برنامه، زیر برنامه را اجرا می کند.

Opcode : 11001101

LSB: A D D R

MSB: A D D R

زمان اجرا: 17 سیکل ساعت.

: C(FLAG)  ADDR به شرط درست بودن شرط پرش را انجام می دهد مگر به شمارنده به دستور بعدی می رود. RET دو بایت از داخل پشته پاپ شده و شمارنده برنامه از آن آدرس اجرا دستورالعملها را ادامه می دهد.

Opcode : 11001001

زمان اجرا: 10 سیکل ساعت.

: R   (FLAG) به شرط درست بودن شرط، برگشت را انجام می دهد.

: RST # این دستور حالت خاصی از CALL است. که با اجرای آن آدرس در پشته ذخیره شده و برای اجرای زیر برنامه مربوط به RST # به مکان مشخص حافظه پرش می کند.