ساختار CPU

Download Report

Transcript ساختار CPU

‫ساختار ‪CPU‬‬
‫& فصل ‪ 8‬کتاب مانو‬
‫اجزا تشکیل دهنده ‪CPU‬‬
‫داده ها را ذخیره میکند‬
‫‪Register Set‬‬
‫‪Control‬‬
‫‪ALU‬‬
‫عملیات محاسباتی و منطقی را انجام میدهد‬
‫مشخص میکند که چه عملی در چه زمانی انجام‬
‫گیرد‪.‬‬
‫بصورت سخت افزاری و یا میکروپروگرام سیگنال‬
‫الزم را به یخشهای مختلف میفرستد‪.‬‬
‫‪CPU‬از دید استفاده کننده‬
‫‪‬‬
‫از دید یک برنامه نویس که به زبان سطح پایین برنامه نویسی‬
‫میکند یک ‪CPU‬دارای مشخصه های زیر خواهد بود‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪Instruction format‬‬
‫‪The instruction Set‬‬
‫‪Addressing modes‬‬
‫‪Register organization‬‬
‫معماری های مختلف ‪CPU‬‬
‫‪Accumulator machine‬‬
‫‪Register machine :PowerPC‬‬
‫‪Stack machine :the Java virtual machine‬‬
‫مثال‪ :‬ماشین های ‪ X86‬دارای یک معماری با مجموعه دستورات پیچیده ای است که تمامی جنبه‬
‫های معماری های فوق را در بر میگیرد‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫اهمیت معماری ‪ CPU‬چقدر است؟‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫استفاده کننده نهائی‪:‬‬
‫هیچ!‬
‫برنامه نویس سطح باال‬
‫خیلی کم‪ .‬تا حدی که بتواند کامپایلر مناسب را انتخاب نموده و عملکرد‬
‫برنامه را بهینه کند‬
‫برنامه نویس سطح پائین‪ /‬طراح ‪OS‬‬
‫این افراد باید اطالعات کافی در مورد رجیسترها‪ ،‬ساختار حافظه‪ ،‬انواع‬
‫داده های موجود و عملکرد دستورات داشته باشند‪.‬‬
‫ساختار رجیسترها‬
‫‪‬‬
‫‪‬‬
‫یکی از مهمترین ویژگی های تعیین کننده برا ی یک ‪CPU‬ساختار رجیسترهای داخلی آن است‪.‬‬
‫این رجیستر ها به دو دسته تقسیم بندی میشوند‪:‬‬
‫رجیسترهائی که استفاده کننده آنها را می بیند! و میتواند از طریق برنامه نویسی به آنها دسترسی‬
‫داشته باشد‬
‫‪‬‬
‫‪‬‬
‫‪Data registers‬‬
‫‪Address registers‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪index register‬‬
‫‪segment pointer‬‬
‫‪stack pointer‬‬
‫)‪Condition codes (flags‬‬
‫رجیسترهائی که برای کنترل و نگهداری وضعیت ‪CPU‬بکار میروند‪ .‬این رجیسترها توسط واحد‬
‫کنترل برای اجرای دستورات مورد استفاده واقع میشوند‬
‫‪‬‬
‫‪‬‬
‫‪Program counter‬‬
‫‪Instruction register‬‬
‫رجیسترهای عمومی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫محلی برای ذخیره داده ها هستند که در داخل ‪ CPU‬تعبیه شده‬
‫اند تا با فراهم آوردن دسترسی سریع و آسان عملکرد ‪CPU‬را‬
‫افزایش دهند‪.‬‬
‫این رجیستر ها توسط یک باس مشترک مخصوص به هم وصل‬
‫میشوند‬
‫استفاده کننده میتواند از این رجیسترها برای کاربردهای مختلف‬
‫محاسباتی‪ ،‬منطقی و شیفت استفاده نماید‪.‬‬
‫مشترک‬ALU ‫مجموعه رجیسترهای عمومی و‬
Clock
Input
R1
R2
R3
R4
R5
R6
R7
Load (7 inputs)
3x8
decoder
SETD
SETA
MUX
A bus
OPR
MUX
B bus
Arithmetic logic unit
(ALU)
Output
SETB
‫مجموعه رجیسترهای عمومی و ‪ALU‬مشترک‬
‫در شکل فوق‪:‬‬
‫‪ ‬خروجی هر رجیستر به دو ‪MUX‬متصل شده است‪ .‬اینکار باعث میشود‬
‫تا هر یک از آنان را بتوان آزادانه بعنوان مبدا عملیات ‪ ALU‬انتخاب‬
‫نمود‪.‬‬
‫‪ ‬برای اینکه بتوان خروجی ‪ ALU‬را به هر یک از رجیستر ها منتقل‬
‫نمود این خروجی به ورودی تمام رجیسترها متصل شده و عالوه بر آن با‬
‫استفاده از یک دیکودر مقصد عملیات را مشخص میکنیم‪.‬‬
‫‪ ‬یک ‪ALU‬ممکن است که قادر به انجام عملیات مختلفی باشد‪ ،‬برای‬
‫امتخاب یک عمل مورد نیاز از خطوط کنترلی ‪ OPR‬استفاده میشود‪.‬‬
‫مثالی از عملیات ‪ALU‬‬
‫‪‬‬
‫‪‬‬
‫برای مثال فرض کنید که میخواهیم میکرو اپریشن زیر را انجام دهیم‪:‬‬
‫‪R1  R2 + R3‬‬
‫برای انجام این عمل واحد کنترل باید سیگنالهای الزم را برای انتخاب ورودیهای متناسب‬
‫دیکودر ‪MUXA, MUXB,‬و ‪ALU‬انتخاب نماید‪:‬‬
‫‪ .1‬تعیین مقدار مناسب برای ورودی ‪ MUXA‬یعنی ‪ SELA‬طوری که محتوی رجیستر‬
‫‪R2‬در روی باس ‪ A‬قرار گیرد‪.‬‬
‫‪ .2‬تعیین مقدار مناسب برای ورودی ‪ MUXB‬یعنی ‪ SELB‬طوری که محتوی رجیستر‬
‫‪R3‬در روی باس ‪ B‬قرار گیرد‪.‬‬
‫‪ .3‬تعیین مقدار الزم برای ورودی ‪OPR‬که ‪ALU‬را وادار به انجام عمل جمع ‪A+B‬‬
‫نماید‪.‬‬
‫‪ .4‬در نهیت انتخاب مقدار مناسب برای دیکور ‪ SELD‬به نحویکه خروجی ‪ALU‬را به‬
‫رجیستر ‪R1‬منتقل نماید‪.‬‬
‫کلمه کنترل‬
‫‪‬‬
‫در مثال نشان داده شده‬
‫تعداد ‪ 14‬متغیر باینری‬
‫وجود دارند که مقدار آنها‬
‫باید توسط واحد کنترل‬
‫تعیین گردد‪ .‬هر ترکیب این‬
‫متغیرها یک کلمه کنترل‬
‫نامیده میشود‪ .‬این کلمه به‬
‫‪ 4‬فیلد تقسیم میشود‬
‫‪OPR‬‬
‫‪SELA‬‬
‫‪SELD‬‬
‫‪SELB‬‬
‫‪SELD‬‬
‫‪SELB‬‬
‫‪SELA‬‬
‫‪Binary code‬‬
‫‪None‬‬
‫‪Input‬‬
‫‪Input‬‬
‫‪000‬‬
‫‪R1‬‬
‫‪R1‬‬
‫‪R1‬‬
‫‪001‬‬
‫‪R2‬‬
‫‪R2‬‬
‫‪R2‬‬
‫‪010‬‬
‫‪R3‬‬
‫‪R3‬‬
‫‪R3‬‬
‫‪011‬‬
‫‪R4‬‬
‫‪R4‬‬
‫‪R4‬‬
‫‪100‬‬
‫‪R5‬‬
‫‪R5‬‬
‫‪R5‬‬
‫‪101‬‬
‫‪R6‬‬
‫‪R6‬‬
‫‪R6‬‬
‫‪110‬‬
‫‪R7‬‬
‫‪R7‬‬
‫‪R7‬‬
‫‪111‬‬
ALU ‫عملیات‬
OPR Select
Operation
Symbol
00000
Transfer A
TSFA
00001
Increment A
INCA
00010
Add A + B
ADD
00101
Subtract A – B
SUB
00110
Decrement A
DECA
01000
And A and B
AND
01010
OR A and B
OR
01100
XOR A and B
XOR
01110
Complement A
COMA
10000
Shift right A
SHRA
11000
Shift left A
SHLA
‫ انجام عملیات‬CPU
‫در‬
‫محاسباتی و منطقی بر عهده‬
‫ عمل شیفت را‬.‫ است‬ALU
‫ که‬Shifter ‫میتوان توسط یک‬
‫ قرار‬ALU ‫قبل و یا بعد از‬
‫ در مواردی هم‬.‫میگیرد انجام داد‬
‫ممکن است عمل شیفت توسط‬
‫ در فصل‬.‫انجام شود‬ALU ‫خود‬
‫ را دیدیم‬ALU ‫ طراحی چنین‬4
‫که عملیات آن در جدول مقابل‬
‫ذکر شده است‬

‫مثال‬
‫‪‬‬
‫برای انجام میکرواپریشن زیر‬
‫‪R1  R2 – R3‬‬
‫میبایست کلمه کنترلی بصورت زیر انتخاب شود‪:‬‬
‫‪OPR‬‬
‫‪SUB‬‬
‫‪00101‬‬
‫‪SELD‬‬
‫‪R1‬‬
‫‪001‬‬
‫‪SELB‬‬
‫‪R3‬‬
‫‪011‬‬
‫‪Field: SELA‬‬
‫‪Symbol‬‬
‫‪R2‬‬
‫‪Control word 010‬‬
‫همانطور که قبال دیدیم یک راه پیاه سازی واحد کنترل استفاده از‬
‫میکروپروگرامینگ است که در آن هر کلمه کنترلی در یک محل از‬
‫حافظه ‪ ROM‬ذخیره خواهد شد‪.‬‬
‫‪Stacks‬‬
‫‪‬‬
‫موارد استفاده از پشته‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ذخیره متغیرهای یک برنامه‬
‫ذخیره محتوی سایر رجیسترها وقتی که یک برنامه فرعی صدا زده میشود‬
‫کمک به ترجمه عملیات محاسباتی با روش ‪RPN‬‬
‫رجیستر ‪Sp‬محل آخرین داده ذخیره شده در پشته را مشخص میکند‬
‫پیاده سازی پشته‬
‫‪.1‬‬
‫‪.2‬‬
‫پیاده سازی پشته بوسیله رجیسترها‬
‫پیاده سازی پشته در قسمتی از حافظه ‪RAM‬‬
‫پیاده سازی پشته بوسیله رجیسترها‬
‫‪63‬‬
‫‪EMPTY‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪C‬‬
‫‪2‬‬
‫‪B‬‬
‫‪1‬‬
‫‪A‬‬
‫‪0‬‬
‫‪SP‬‬
‫‪DR‬‬
‫‪FULL‬‬
‫عملیات روی پشته‬

Push




SPSP+1
M[SP]DR ,EMTY0
if(SP=0) Then (FULL1)
POP



DRM[SP] , FULL0
SPSP-1
if(SP=0) Then (EMTY1)
‫پیاده سازی پشته در قسمتی از حافظه ‪RAM‬‬
‫‪1000‬‬
‫‪2000‬‬
‫حافظه برنامه‬
‫(دستورات)‬
‫حافظه داده ها‬
‫(عملوند ها)‬
‫‪PC‬‬
‫‪AR‬‬
‫‪3000‬‬
‫حافظه پشته‬
‫‪3997‬‬
‫‪3998‬‬
‫‪SP‬‬
‫‪3999‬‬
‫‪4000‬‬
‫‪4001‬‬
‫‪DR‬‬
‫عملیات روی پشته‬

Push



SPSP-1
M[SP]DR
POP


DRM[SP]
SPSP+1
‫محدودیت های پشته‬
‫هنگام استفاده از پشته‪:‬‬
‫باید مواظب بود که بزرگ شدن پشته باعث دست اندازی آن به‬
‫داده های سایر برنامه ها در ‪ RAM‬نشود ‪.‬همچنین برنامه‬
‫های دیگر پشته را خراب نکنند‪.‬‬
‫نمایش لهستانی معکوس‬
‫)‪Reverse Polish Notation (RPN‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫روش معمولی نمایش عبارات ریاضی‪:‬‬
‫‪A*B+C*D‬‬
‫روش ‪ PN‬برای نمایش عبارات ریاضی ‪:‬عملگرها قبل از‬
‫عملوندها قرارمیگیرند‪.‬‬
‫‪+*AB*CD‬‬
‫روش ‪ RPN‬برای نمایش عبارات ریاضی ‪:‬عملگرها بعد از‬
‫عملوندها قرا میگیرند‬
‫‪AB*CD*+‬‬
‫استفاده از پشته برای پیاده سازی ‪RPN‬‬
‫در برخی ماشینهای حساب و کامپیوترها از ترکیب پشته و‬
‫‪RPN‬برای محاسبه عبارات ریاضی استفاده میکنند‪.‬‬
‫‪ .1‬ابتدا عبارت بصورت ‪ RPN‬نوشته میشود ) معموال اینکار‬
‫توسط کامپایلر انجام میشود(‬
‫‪ .2‬در هنگام محاسبه‬
‫‪‬‬
‫‪‬‬
‫با برخورد به عملوندها آنها را در پشته ‪ PUSH‬میکنیم‬
‫با برخورد با عملگرها ‪ ،‬دو داده موجود در باالی پشته‪ POP‬شده‬
‫و عمل مورد نظر بر روی آنها انجام و حاصل درپشته ‪PUSH‬‬
‫میشود‪.‬‬
‫مثال‬
‫برای محاسبه عبارت زیر یک کامپایلر ممکن است کد زیر را‬
‫;‪a = b + c * d‬‬
‫تولید نماید‪.‬‬
‫عبارت معادل ‪ RPN‬بصورت زیر خواهد بود‪:‬‬
‫‪b‬‬
‫‪c‬‬
‫‪d‬‬
‫‪bcd*+‬‬
‫در اینصورت محتوی پشته بصورت زیر خواهد بود‪:‬‬
‫‪a‬‬
‫‪PUSH‬‬
‫‪PUSH‬‬
‫‪PUSH‬‬
‫‪MUL‬‬
‫‪ADD‬‬
‫‪POP‬‬
‫‪d‬‬
‫‪b+c*d‬‬
‫‪pop‬‬
‫‪ADD‬‬
‫‪c*d‬‬
‫‪c‬‬
‫‪c‬‬
‫‪b‬‬
‫‪b‬‬
‫‪b‬‬
‫‪MUL‬‬
‫‪d‬‬
‫‪c PUSH‬‬
‫‪PUSH‬‬
‫‪b‬‬
‫‪b‬‬
‫‪PUSH‬‬
‫فرمت دستورالعمل‬
‫‪‬‬
‫معمول‌ترین‌فرمت‌یک‌دستورالعمل‬
‫‪.1‬‬
‫قسمت آپ کد‪ ،‬مشخصکننده نوع عملیات دستور‬
‫‪.2‬‬
‫قسمت آدرس‪ ،‬مشخصکننده آدرس یک خانه حافظه یا‬
‫ثبات پروسسور‬
‫‪.3‬‬
‫قسمت حالت آدرسدهی‪ ،‬تعیینکننده عملوند یا آدرس‬
‫مؤثر‬
‫‪Add/reg‬‬
‫‪Mode‬‬
‫‪Opcode‬‬
‫دستورات‌سه‌آدرسی‬
‫در کامپیوترهای سهآدرسی‪ ،‬هر قسمت آدرس‪ ،‬برای‬
‫مشخص نمودن یک ثبات پردازنده و یا آدرس یک عملوند در‬
‫حافظه تخصیص داده میشود‪.‬‬
‫]‪R1  M[A] + M[B‬‬
‫]‪R2  M[C] + M[D‬‬
‫‪M[X]  R1 × R2‬‬
‫‪ADD R1, A, B‬‬
‫‪ADD R2, C, D‬‬
‫‪MUL X, R1, R2‬‬
‫دستورات دوآدرسی‬
‫دستورات دوآدرسی معمولترین فرمت دستور در کامپیوترها‬
‫هستند‪ .‬قسمت آدرس میتواند یک ثبات پردازنده یا یک‬
‫خانه حافظه را مشخص نماید‪.‬‬
‫]‪R1  M[A‬‬
‫‪MOV R1, A‬‬
‫]‪R1  R1 + M[B‬‬
‫‪ADD R1, B‬‬
‫]‪R2  R2 + M [D‬‬
‫‪ADD R2, D‬‬
‫‪R1  R1 × R2‬‬
‫‪MUL R1, R2‬‬
‫‪M[A]  R1‬‬
‫‪MOV X, R1‬‬
‫دستورات‌یک‌آدرسی‬
‫دستورات یکآدرسی‪ ،‬برای تمام عملیات بر روی دادهها‪،‬‬
‫ثبات اکومولیتور ‪ AC‬را بهکار میبرد‪.‬‬
‫]‪AC  M[A‬‬
‫‪LOAD A‬‬
‫]‪AC  AC + M[B‬‬
‫‪ADD B‬‬
‫‪M[T] AC‬‬
‫‪STORE T‬‬
‫]‪AC  M[C‬‬
‫‪LOAD C‬‬
‫]‪AC  AC + M[D‬‬
‫‪ADD‬‬
‫‪D‬‬
‫]‪AC  AC × M[T‬‬
‫‪MUL T‬‬
‫‪M[X]  AC‬‬
‫‪STORE X‬‬
‫دستورات‌صفر‌‌آدرسی‬
‫دستورات صفر آدرسی‪ ،‬برای تمام عملیات بر روی دادهها‪ ،‬از‬
‫پشته استفاده می کند‪.‬‬
‫‪Push A‬‬
‫‪Push B‬‬
‫‪ADD‬‬
‫‪Push C‬‬
‫‪D‬‬
‫‪Push‬‬
‫‪ADD‬‬
‫‪MUL‬‬
‫‪POP X‬‬
‫دستورات کامپیوترهای ‪RISC‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫در کامپیوترهای مبتنی بر معماری ‪ RISC‬فقط دو دستور‬
‫وجود دارند که مستقیما با محتوی حافظه کار میکنند‪:‬‬
‫دستور ذخیره کردن ‪STORE :‬‬
‫دستور بار کردن ‪LOAD :‬‬
‫بقیه دستورات نطیر دستورات محاسباتی فقط با رجبسترها کار‬
‫میکنند‪.‬‬
RISC ‫مثالی از دستورات‬
X = (A + B) × (C + D) ‫برنامه محاسبه‬
LOAD
LOAD
LOAD
LOAD
ADD
ADD
MUL
STORE
R1, A
R2, B
R3, C
R4, D
R1, R1, R2
R3, R3, R4
R1, R1, R3
X, R1
R1  M[A]
R2  M[B]
R3  M[C]
R4  M[D]
R1  R1 + R2
R3  R3 + R4
R1  R1 × R3
M[X]  R1
‫حاالت‌آدرس‌دهی‬
‫دستورات یک کامپیوتر عملی را بر روی داده ذخیره شده در حافظه و یا‬
‫رجیسترهای ‪ CPU‬انجام میدهند ‪.‬روش مشخص کردن عملوند یک‬
‫دستورالعمل حاالت آدرس دهی و یا‬
‫‪ addressing mode‬نامیده‬
‫میشود ‪.‬‬
‫اصوال حاالت مختلف آدرسدهی عملوند دستور‪ ،‬تسهیالت زیر را در‬
‫سیستم فراهم میآورد‪:‬‬
‫‪.1‬‬
‫قابلیت ایجاد شمارنده برای برنامه حلقه‪ ،‬و شاخصبندی در دادهها و‬
‫همچنین ایجاد اشارهگر حافظه و جابجایی برای کاربر فراهم میشود‬
‫‪.2‬‬
‫امکان تقلیل تعداد بیتهای قسمت آدرس دستور‪ ،‬فراهم میشود‪.‬‬










‫انواع حالت های آدرس دهی‬
‫آدرس دهی ضمنی‬
Implied Addressing Mode
‫آدرس دهی بالدرنگ‬
Immediate Addressing Mode
‫آدرس دهی ثبات‬
Register Addressing
Register Indirect Addressing
‫آدرس دهی غیر مستقیم بکمک ثبات‬
Autoincrement or Autodecrement
‫آدرس دهی افزایش و یا کاهشی خودکار‬
Direct Addressing Mode
‫آدرس دهی مستقیم‬
Indirect Addressing Mode
‫آدرس دهی غیر مستقیم‬
Relative Addressing Mode
‫آدرس دهی نسبی‬
Index Addressing Mode
‫آدرس دهی شاخص‬
Base Register Addressing Mode
‫آدرس دهی با ثبات پابه‬










‫آدرس دهی ضمنی‬
‫‪‬‬
‫‪Implied Addressing Mode‬‬
‫در این روش اپراندها بصورت ضمنی در داخل دستورالعمل مشخص‬
‫میشوند ‪.‬‬
‫‪‬‬
‫‪‬‬
‫مثل دستور ‪ CMA‬که محتوی آکوموالتور را متمم میکند‪.‬‬
‫دستورات صفر آدرسی مورد استفاده در کامپیوترهای ‪stack machine‬‬
‫نیز از آدرس دهی ضمنی استفاده میکنند زیرا عملوندها بطور ضمنی در‬
‫باالی پشته در نظر گرفته میشوند‪.‬‬
‫آدرس دهی بالدرنگ‬
‫‪‬‬
‫‪Immediate Addressing Mode‬‬
‫در این روش مقدار عملوند در داخل خود دستورالعمل داده میشود‪.‬‬
‫این مد آدرس دهی برای مقدار دهی رجیسترها بکار میرود‪.‬‬
‫‪‬‬
‫مثل دستور زیر در پردازنده ‪x86‬‬
‫‪MOV CX, 1024‬‬
‫‪Operand‬‬
‫‪Instruction‬‬
‫آدرس دهی ثبات‬
‫‪‬‬
‫‪Register Addressing‬‬
‫در این روش عملوندها در داخل رجیسترهای پردازنده قرار‬
‫دارند ‪.‬با استفاده از ‪ K‬بیت میتوان تعداد ‪ 2k‬رحیستر را‬
‫مشخص نمود‪.‬‬
‫‪‬‬
‫مثل دستور زیر در پردازنده ‪x86‬‬
‫‪ADD AL, BL‬‬
‫‪CPU registers‬‬
‫‪R‬‬
‫‪Operand‬‬
‫‪Instruction‬‬
‫آدرس دهی غیر مستقیم بکمک ثبات‬
‫‪‬‬
‫‪Register Indirect Addressing‬‬
‫‪‬‬
‫در این روش دستورالعمل رجیستری را مشخص میکند که‬
‫محتوی آن آدرس عملوند در حافظه را مشخص خواهد نمود‪.‬‬
‫‪‬‬
‫مثل دستور زیر در پردازنده ‪x86‬‬
‫]‪MOV BX,[SI‬‬
‫‪Memory‬‬
‫‪CPU registers‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪R‬‬
‫آدرس دهی افزایش و یا کاهشی خودکار‬
‫‪‬‬
‫‪Autoincrement or Autodecrement addressing‬‬
‫‪‬‬
‫این روش مشابه آدرس دهی غیر مستقیم بکمک ثبات است با‬
‫این تفاوت که مقدار رجیستر بعد از استفاده برای محاسبه‬
‫آدرس موثر افزایش و یا کاهش میابد‪.‬‬
‫‪Memory‬‬
‫‪CPU registers‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪R‬‬
‫‪R=R+1‬‬
‫آدرس دهی مستقیم‬
‫‪‬‬
‫‪Direct Addressing Mode‬‬
‫در این روش آدرس عملوند در داخل دستورالعمل ذکر میشود‪.‬‬
‫‪‬‬
‫مثل دستور زیر در پردازنده ‪x86‬‬
‫]‪MOV AX,[3000‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫آدرس دهی غیر مستقیم‬
‫‪‬‬
‫‪Indirect Addressing Mode‬‬
‫در این روش آدرس موجود در دستورالعمل محلی از حاقطه را مشخص‬
‫میکند که آدرس عملوند درآنجا قرار دارد ‪.‬در اینحالت برای دسترسی به‬
‫عملوند دوبار رجوع به حافطه مورد نیاز است ‪:‬یکبار برای پیدا کردن‬
‫آدرس آن و بار دیگر برای خواندن مقدار آن ‪.‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫آدرس دهی نسبی‬
‫‪‬‬
‫‪Relative Addressing Mode‬‬
‫‪‬‬
‫در این روش آدرس موثر از جمع آدرس مشخص شده در‬
‫داخل دستورالعمل و محتوی ‪ PC‬حاصل میشود‪:‬‬
‫‪‬‬
‫‪Effective Address= address part of instruction + content of PC‬‬
‫آدرس دهی نسبی در دستورالعمل های انشعابی که آدرس پرش در نزدیکی دستور قراردارد‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫‪+‬‬
‫‪PC‬‬
‫آدرس دهی شاخص‬
‫‪‬‬
‫‪Index Addressing Mode‬‬
‫‪‬‬
‫در این روش آدرس موثر از جمع آدرس مشخص شده در داخل دستورالعمل و محتوی‬
‫یک رجیستر مخصوص که رجیستر ایندکس نامیده میشود حاصل میشود‪:‬‬
‫‪Effective Add.= address part of instruction + content of index register‬‬
‫‪‬‬
‫معموال از این روش برای دسترسی به داده های یک آرایه استفاده میشود ‪.‬که محل شروع‬
‫داده ها در حافظه در دستورالعمل مشخص میشود و فاصله داده مورد نظر تا محل شروع‬
‫توسط رجیستر ایندکس تعیین میگردد‪.‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫‪+‬‬
‫‪Index Register‬‬
‫آدرس دهی با ثبات پابه‬
‫‪‬‬
‫‪Base Register Addressing Mode‬‬
‫‪‬‬
‫این روش مشابه آدرس دهی با ثبات شاخص است با این تفاوت‬
‫که بجای ثبات شاخص از ثبات پایه استفاده میشود ‪.‬تفاوت ایندو‬
‫روش در نحوه استفاده از رجیسترهاست ‪.‬‬
‫‪Effective Add.= address part of instruction + content of Base register‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫‪+‬‬
‫‪Base Register‬‬
‫مثال عددی‬
‫حافظه‬
‫حالت‬
‫مقدار آکوموالتور در صورت‬
‫اجرای دستور موجود در‬
‫آدرس ‪ 200‬برای حالتهای‬
‫مختلف آدرس دهی چیست؟‬
‫‪PC = 200‬‬
‫‪R1 = 400‬‬
‫بارکردن‌‪AC‬‬
‫‪200‬‬
‫‪ = 500‬آدرس‬
‫‪201‬‬
‫دستور‌بعدی‬
‫‪202‬‬
‫‪450‬‬
‫‪399‬‬
‫‪700‬‬
‫‪400‬‬
‫‪800‬‬
‫‪500‬‬
‫‪900‬‬
‫‪XR = 100‬‬
‫‪AC‬‬
‫آدرس‬
‫‪600‬‬
‫‪325‬‬
‫‪702‬‬
‫‪300‬‬
‫‪800‬‬
‫مثال عددی‬
‫حاالت آدرسدهی‬
‫آدرس مؤثر‬
‫محتوای اکومولیتور‬
‫مستقیم‬
‫‪500‬‬
‫‪800‬‬
‫بالفصل‬
‫‪201‬‬
‫‪500‬‬
‫غیرمستقیم‬
‫‪800‬‬
‫‪300‬‬
‫نسبی‬
‫‪702‬‬
‫‪325‬‬
‫شاخصدار‬
‫‪600‬‬
‫‪900‬‬
‫ثبات‬
‫‪-‬‬
‫‪400‬‬
‫غیرمستقیم از طریق ثبات‬
‫‪400‬‬
‫‪700‬‬
‫افزایش خودکار‬
‫‪400‬‬
‫‪700‬‬
‫کاهش خودکار‬
‫‪399‬‬
‫‪450‬‬
‫مجموعه دستورات کامپیوتر‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫دستورات مورد استفاد ه درکامپیوترهای مختلف از لحاظ‬
‫تعداد‪ ،‬عملکرد‪ ،‬نشانه های مورد استفاده برای اسمبلی‪ ،‬و کد‬
‫باینری بسیار متفاوت هستند با این وجود تمامی آنها دارای‬
‫دستوراتی از گروههای زیر میباشند‪:‬‬
‫دستورات انتقال داده‬
‫دستورات محاسباتی‪ ،‬منطقی و جابجائی‬
‫دستورات کنترل برنامه‬
‫دستورات‌معمول‌انتقال‌‬
‫اطالعات‬
‫فرم سمبولیک‬
‫نام‬
‫‪LD‬‬
‫‪Load‬‬
‫‪ST‬‬
‫‪Store‬‬
‫‪MOV‬‬
‫‪Move‬‬
‫انتقال داده بین رجیسترها‬
‫انتقال داده بین حافظه و رجیسترها‬
‫‪XCH‬‬
‫‪Exchange‬‬
‫تعویص داده های دو رحیستر و یا‬
‫یک رجیستر و حافظه‬
‫‪IN‬‬
‫‪Input‬‬
‫‪OUT‬‬
‫‪Output‬‬
‫‪PUSH‬‬
‫‪Push‬‬
‫‪POP‬‬
‫‪Pop‬‬
‫انتقال داده بین حافظه و‬
‫رجیسترها‬
‫انتقال داده بین‬
‫ورودی‪/‬خروجی و رجیسترها‬
‫انتقال داده بین پشته و‬
‫رجیسترها‬
‫دستورات‌معمولی‌ریاضی‬
‫نام‌دستور‬
‫نماد‌دستور‬
‫افزایش‌دهنده‌یک‬
Increment
INC
‫کاهش‌دهنده‌یک‬
Decrement
DEC
‌‫جمع‬
Add
ADD
‫تفریق‬
Subtract
SUB
‫ضرب‬
Multiply
MUL
‫تقسیم‬
Divide
DIV
‫جمع‌با‌بیت‌نقلی‬
Add with carry
ADDC
2‌‫مکمل‬
Negate (2’s
complement)
NEG
‫دستورات‌منطقی‌و‌عملیات‌روی‌بیت‬
‫نام دستور‬
‫نماد دستور‬
‫‪CLR‬‬
‫‪Clear‬‬
‫صفر کردن‬
‫‪COM‬‬
‫‪Complement‬‬
‫مکمل کردن‬
‫‪AND‬‬
‫‪AND‬‬
‫‪AND‬‬
‫‪OR‬‬
‫‪OR‬‬
‫‪OR‬‬
‫‪XOR‬‬
‫‪XOR‬‬
‫‪XOR‬‬
‫‪CLRC‬‬
‫‪Clear carry‬‬
‫صفر کردن بیت نقلی‬
‫‪SETC‬‬
‫‪Set carry‬‬
‫یک کردن بیت نقلی‬
‫‪COMC‬‬
‫‪Complement carry‬‬
‫مکمل کردن بیت نقلی‬
‫‪EI‬‬
‫‪Enable Interrupt‬‬
‫فعال کردن وقفه‬
‫‪DI‬‬
‫‪Disable Interrupt‬‬
‫غیرفعال کردن وقفه‬
‫دستورات‌معمولی‌شیفت‬
‫نام‌دستور‬
‌‫فرم‬
‫نمادین‬
‫شیفت‌به‌راست‬
Logical Shift Right
SHR
‫شیفت‌به‌چپ‬
Logical Shift Left
SHL
‌‫شیفت‌ریاضی‌به‬
‫راست‬
Arithmetic Shift Right
SHRA
‌‫شیفت‌ریاضی‌به‬
‫چپ‬
Arithmetic Shift Left
SHLA
‫چرخش‌به‌راست‬
Rotate Right
ROR
‫چرخش‌به‌چپ‬
Rotate Left
ROL
‌‫چرخش‌به‌راست‌از‬
‫طریق‌بیت‌نقلی‬
Rotate Right through carry
RORC
‌‫چرخش‌به‌چپ‌از‬
‫طریق‌بیت‌نقلی‬
Rotate Left through carry
ROLC
‫دستورات متداول کنترل برنامه‬
‫نام‌دستور‬
‫فرم‌نمادین‬
‫انشعاب‬
Branch
BR
‫پرش‬
Jump
JMP
‫رد‌کردن‬
SKIP
SKP
‫صدا‌زدن‬
Call
CALL
‫بازگشت‬
Return
RET
‫مقایسه‬
Compare( By subtraction)
CMP
‫تست‬
Test( By ANDing)
TST
‫بیت های وضعیت‬
A
16-bit ALU
C15
C16
V
Z
S
B
F15-F0
C
F15
Check For Zero Output
Output F
‫وقفه‬
‫انواع مختلف وقفه د رکامپیوتر‬
‫‪ ‬وقفه های خارجی‬
‫‪‬‬
‫‪‬‬
‫وقفه های داخلی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫این وقفه ها سخت افزاری بوده و توسط یک وسیله خارجی رخ میدهد‪.‬‬
‫در اثر استفاده غلط و نابجای یک دستور حاصل میشود ‪.‬مثل رخ دادن‬
‫‪Overflow‬انجام یک تقسیم بر صفر‪ ،‬سرریز شدن پشته‬
‫برنامه سرویس دهی به وقفه در هر مورد در باره عکس العمل مناسب تصمیم‬
‫میگیرد ‪.‬این وقفه گاهی ‪ trap‬نامیده میشود‪.‬‬
‫وقفه های نرم افزاری‬
‫‪‬‬
‫نوع خاصی از صدا زدن برنامه فرعی هستند ‪.‬برای انجام عملیات خاصی نظیر‬
‫تغییر مد برنامه از حالت ‪ user‬به ‪ supervisor‬بکار میروند‪.‬‬
‫کامپیوترهای با مجموعه دستورات پیچیده‬
‫‪CISC‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫معماری یک کامپیوتر متاثر از مجموعه دستورات انتخاب شده برای آن‬
‫است‪.‬‬
‫در کامپیوتر های اولیه سعی بر این بود تا تعداد دستورات کم و ساده‬
‫باشد تا پیاده سازی سخت افزاری آن ممکن باشد‪.‬‬
‫با پیشرفت در زمینه سخت افزار و ارزان شدن آن تعداد دستورات‬
‫کامپیوتر ها افزایش یافته و بر پیچیدگی آنها افزوده گردید ‪.‬هدف این‬
‫بود تا هر چه بیشتر نیاز های کاربران را در سخت افزار گنجانده وبا‬
‫کاهش فاصله بین زبانهای سطح باال و دستورات کامپیوترکار ترجمه‬
‫دستورات سطح باال را ساده تر کنند ‪.‬این نوع کامپیوترها گاها تا ‪200‬‬
‫دستور و تعداد بسیار زیادی مد آدرس دهی داشتند ‪.‬این کامپیوتر ها را‬
‫)‪Complex instruction set computer (cisc‬مینامند‪.‬‬
‫ویژگی های کامپیوترهای ‪CISC‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تعداد زیادی دستورالعمل دارند )‪ 100‬تا ‪ 200‬عدد(‬
‫دستوراتی برای انجام کارهای ویژه دارند که معموال بندرت‬
‫مورد استفاده قرار میگیرند‬
‫تعداد زیادی مد آدرس دهی دارند‬
‫طول دستورالعمل ها متفاوت است‬
‫دستوراتی دارند که عملیاتی را بر روی اپراندهای موجود در‬
‫حافظه انجام میدهند‪.‬‬
‫برای اجرای دستورات به چندین کالک نیاز هست‪.‬‬
‫ویژگی های ‪RISC‬‬
‫‪‬‬
‫دستورات ساده و کمی دارند‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫هدف این است که بتوان دستورات را بسرعت اجرا کرد ‪.‬اغلب‬
‫دستورات ‪ RISC‬در یک سیکل اجرا میشوند )بعد ازواکشی و‬
‫رمزگشایی(‬
‫چون دستورات در زمان مشابهی اجرا میشوند عمل ‪pipeline‬‬
‫دارای بازده باالیی خواهد بود‪.‬‬
‫کم بودن دستورات باعث ساده شدن واحد کنترل ومسیرهای ارتباطی‬
‫میشود که منجر به کم شدن تعدادقطعات مورد نیاز برای ساخت‬
‫پردازنده میشود اینکار سرعت پردازنده را نیز افزایش میدهد‪..‬‬
‫در ضمن میتوان واحد کنترل را بروش سیم بندی ساخت‪.‬‬
‫ویژگی های ‪RISC‬‬
‫‪‬‬
‫دسترسی به حافظه محدود به دستورات ‪ load , Store‬است‬
‫‪‬‬
‫‪‬‬
‫باقی دستورات بر روی محتوی رجیسترها عمل میکنند‪.‬‬
‫تعداد مد های آدرس دهی آنها کم است‬
‫‪‬‬
‫معموال فقط از مدهای آدرس دهی زیر استفاده میشود‪:‬‬
‫‪register addressing‬‬
‫‪direct addressing‬‬
‫‪register indirect addressing‬‬
‫‪displacement addressing‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ویژگی های ‪RISC‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫دستورات طول و فرمت یکسانی دارند‬
‫اینکار باعث میشود تا خواندن دستورات و رمزگشائی آنها‬
‫سریع باشد‪.‬زیرا الزم نیست تا معلوم شدن طول دستور برای‬
‫رمزگشایی آن صبر کرد‪.‬‬
‫یکسانی فرمت باعث سهولت رمزگشایی میگردد زیرا کد و‬
‫ادرس همه دستورات در محل یکسانی قرار دارند‪.‬‬
‫ویژگی های ‪RISC‬‬
‫‪‬‬
‫تعداد رجیسترهای زیادی دارند‪.‬‬
‫‪‬‬
‫کم شدن دستورات باعث کوچک شدن واحد کنترل و آزاد شدن فضا‬
‫برای گنجاندن تعداد بیشتری رجیستر میشود‪.‬‬
‫متغیرهای محلی‪ ،‬نتایج میانی و پارامترهای توابع در داخل‬
‫رجیسترها ذخیره شده و تعداد رجوع به حافظه کاهش پیدا میکند‪.‬‬
‫‪‬‬
‫ستفاده از تکنیک همپوشانی ‪ register windows‬که باعث‬
‫افزایش سرعت صدا زدن تابغ و بازگشت از آن میشود‪.‬‬
‫‪‬‬
‫‪overlapped register windows‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫صدا زدن برنامه فرعی و بازگشت از آن بخش مهمی از‬
‫اجرای برنامه را بخود اختصاص میدهد ‪.‬لذا سرعت بخشیدن‬
‫به آن میتواند تاثیر زیادی در افزایش کارائی پردازنده داشته‬
‫باشد‪.‬‬
‫هنگام صدا زدن یک برنامه فرعی دستوراتی استفاده میشوند‬
‫که مقادیر رجیسترها را ذخیره کنند‪ ،‬و پارامترها را انتقال‬
‫دهند‪.‬‬
‫برای بازگشت از برنامه فرعی مقدار بازگشتی تابع به برنامه‬
‫صدا زننده منتقل شده و مقادیر ذخیره شده رجیسترها بازیابی‬
‫میشوند‪.‬‬
‫‪overlapped register windows‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫دربرخی از معمارهای ‪ RISC‬برای سهولت انتقال بین توابع از‬
‫همپوشانی پنجره ای رجیسترها استفاده میشود تا نیاز به ذخیره و‬
‫بازیافت مقادیر رجیسترها را حذف نمایند‪.‬‬
‫هر زمان که تابعی که صدا زده میشود پنجره ای از رجیسترها از میان‬
‫بانک رجیسترموجود در پردازنده به آن اختصاص میابد‪.‬‬
‫اینکار از طریق افزایش پوینتری انجام میشود ‪.‬با برگشت از تابع پوینتر‬
‫به مقدار قبلی آن کاهش داده میشود‪.‬‬
‫پنجره مورد استفاده برای توابع همجوار همپوشانی دارند تا امکان به‬
‫اشتراک گذاشتن داده ها بین دو تابع وجود داشته باشد‪.‬‬
‫‪overlapped register windows‬‬
‫‪pointer‬‬
‫‪pointer‬‬
‫‪pointer‬‬
‫از قسمت‬
‫مشترک‬
‫برای انتقال‬
‫اطالعات‬
‫استفاده میشود‬
‫با برگشت تابع پوینتر‬
‫کاهش داده میشود‬
‫پنجره رجیستر‬
‫اولیه‬
‫پنجره جدید‬
‫با صدا زدن تابع پنجره جدیدی‬
‫از رجیسترها به آن اختصاص‬
‫داده میشود‪.‬‬
‫بانک رجیستر‬
‫مثال‬
‫‪‬‬
‫در کتاب سیستمی معرفی شده است که دارای بانک رجیستری با‬
‫مشخصات زیر است‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫این بانک دارای ‪ 74‬رجیستر است‪.‬‬
‫رجیستر های ‪ R0‬تا ‪R9‬بعنوان رجیسترهای عمومی قابل استفاده تمامی توابع‬
‫هستند‬
‫بقیه رجیسترها به ‪ 4‬گروه ‪A,B,C,D‬تقسیم شده اند ‪.‬‬
‫هر پنجره دارای ‪ 10‬رجیستر اختصاصی و دو دسته رجیستر ‪ 6‬تائی مشترک با‬
‫پنجره های مجاور است‪.‬‬
‫از رجیسترهای اختصاصی برا ی ذخیره متغیرهای محلی و از رجیسترهای‬
‫مشترک برای انتقال پارامترها استفاده میشود‪.‬‬
‫به این ترتیب هر تابع میتواند از ‪ 32‬رحیستر استفاده نماید‬
R15
Common to D and A
‫مثال‬
R10
R73
Local to D
R64
R63
Common to D and C
R58
R57
Proc. D
R48
Local to C
R47
R42
Proc. C
Common to B and C
R41
R32
R9
Local to B
R31
R26
Proc.B
Common to B and A
R25
R0
R16
R15
Global Registers
R10
Proc.A
Local to A
Common to D and A
‫‪overlapped register windows‬‬
‫‪‬‬
‫نحوه محاسبه رجیسترهای قابل استفاده برای هر تابع به‬
‫صورت زیر است‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪= G‬تعداد رجیسترهای عمومی‬
‫‪= L‬تعداد رجیسترهای اختصاصی هر پنجره‬
‫‪= C‬تعداد رجیسترهای مشترک بین دو پنجره‬
‫‪= W‬تعداد پنجره ها‬
‫‪= L+2C+G‬اندازه پنجره‬
‫‪= (L+C)W+G‬تعداد کل رجیسترها در بانک رجیستری‬