Transcript PUSH

Department of Computer and IT Engineering
University of Kurdistan
Computer Architecture
CPU Structure
By: Dr. Alireza Abdollahpouri
‫اجزا تشکیل دهنده ‪CPU‬‬
‫داده ها را ذخيره ميکند‬
‫مجموعه رجيسترها‬
‫‪Control‬‬
‫‪ALU‬‬
‫عمليات محاسباتی و منطقی را انجام ميدهد‬
‫‪2‬‬
‫•مشخص ميکند که چه عملی در چه زمانی انجام‬
‫گيرد‪.‬‬
‫•از کالک استفاده ميکند‬
‫•بصورت سخت افزاری و يا ميکروپروگرام‬
‫سيگنال الزم را به بخشهای مختلف ميفرستد‪.‬‬
‫معماريهاي مختلف ‪CPU‬‬
‫• سازمان تک انباره ای‬
‫• سازمان چند رجيستري مانند ‪SPARC, MIPS, Alpha,‬‬
‫• سازمان پشته ای‬
‫مثال‪ :‬ماشين های ‪ X86‬دارای يک معماری با مجموعه دستورات پيچيده‬
‫ای است که تمامی جنبه های معماری های فوق را در بر ميگيرد‪.‬‬
‫‪3‬‬
‫اهمیت معماری ‪ CPU‬چقدر است؟‬
‫• استفاده کننده نهائی‪:‬‬
‫هیچ!‬
‫• برنامه نویس سطح باال‬
‫خیلی کم‪ .‬تا حدی که بتواند کامپایلر مناسب را انتخاب نموده و عملکرد برنامه را بهینه‬
‫کند‪.‬‬
‫• برنامه نویس سطح پائین‪ /‬طراح ‪OS‬‬
‫این افراد باید اطالعات کافی در مورد رجیسترها‪ ،‬ساختار حافظه‪ ،‬انواع داده های موجود و‬
‫عملکرد دستورات داشته باشند‪.‬‬
‫• طراحان کامپیوتر‪:‬‬
‫این افراد نیز باید اطالعات فوق را داشته باشند تا بتوانند اجزا سخت افزای مورد نیاز را‬
‫انتخاب کنند‪.‬‬
‫‪4‬‬
‫ساختار رجیسترها‬
‫• یکی از مهمترین ویژگی های تعیین کننده برا ی یک ‪CPU‬ساختار رجیسترهای داخلی آن است‪ .‬این‬
‫رجیستر ها به دو دسته تقسیم بندی میشوند‪:‬‬
‫• رجیسترهائی که استفاده کننده آنها را می بیند! و میتواند از طریق برنامه نویس ی به آنها دسترس ی‬
‫داشته باشد‬
‫– ‪Data registers‬‬
‫– ‪Address registers‬‬
‫• ‪index register‬‬
‫• ‪segment pointer‬‬
‫• ‪stack pointer‬‬
‫– )‪Condition codes (flags‬‬
‫• رجیسترهائی که برای کنترل و نگهداری وضعیت ‪CPU‬بکار میروند‪ .‬این رجیسترها توسط واحد‬
‫کنترل برای اجرای دستورات مورد استفاده واقع میشوند‪.‬‬
‫– ‪Program counter‬‬
‫– ‪Instruction register‬‬
‫‪5‬‬
‫سازمان تک انباره ای‬
‫• يک آکوموالتور‬
‫• مشابه با کامپيوتر پايه‬
‫فصل پنجم‬
‫‪4096*16 RAM‬‬
‫‪BUS‬‬
‫‪ADDRESS‬‬
‫‪AR‬‬
‫‪PC‬‬
‫‪DR‬‬
‫‪AC‬‬
‫‪ALU‬‬
‫‪INPR‬‬
‫همواره يکی از‬
‫اپرندها‬
‫اکوموالتور است‬
‫‪6‬‬
‫‪IR‬‬
‫‪TR‬‬
‫‪OUTR‬‬
‫سازمان رجيستر عمومی‬
‫• ‪GENERAL REGISTER‬‬
‫• تمامی رجيسترها می توانند به عنوان اپراند دستورالعملهای ‪ALU‬‬
‫بکار برده شوند‪.‬‬
‫• مثال ‪ :‬رجيسترهای داده در پردازنده پنتيوم‬
‫‪7‬‬
)‫ورودي خارجي(حافظه‬
clock
R1
R2
R3
R4
R5
R6
R7
Loads
DEC
S1
MUXA
MUXB
A
B
S2
D
OP-CODE
ALU
8
Output
‫مجموعه رجیسترهای عمومی و ‪ALU‬مشترک‬
‫در شکل فوق‪:‬‬
‫• خروجی هر رجیستر به دو ‪MUX‬متصل شده است‪ .‬اینکار باعث میشود تا‬
‫هر یک از آنان را بتوان آزادانه بعنوان مبدا عملیات ‪ ALU‬انتخاب نمود‪.‬‬
‫• برای اینکه بتوان خروجی ‪ ALU‬را به هر یک از رجیستر ها منتقل نمود این‬
‫خروجی به ورودی تمام رجیسترها متصل شده و عالوه بر آن با استفاده از یک‬
‫دیکودر مقصد عملیات را مشخص میکنیم‪.‬‬
‫• یک ‪ALU‬ممکن است که قادر به انجام عملیات مختلفی باشد‪ ،‬برای‬
‫انتخاب یک عمل مورد نیاز از خطوط کنترلی ‪ OPR‬استفاده میشود‪.‬‬
‫‪9‬‬
‫مثالی از عملیات ‪ALU‬‬
‫برای مثال فرض کنید که میخواهیم میکرو اپریشن زیر را انجام دهیم‪:‬‬
‫‪R1  R2 + R3‬‬
‫• برای انجام این عمل واحد کنترل باید سیگنالهای الزم را برای انتخاب ورودیهای متناسب‬
‫دیکودر ‪MUXA, MUXB,‬و ‪ALU‬انتخاب نماید‪:‬‬
‫‪ .1‬تعیین مقدار مناسب برای ورودی ‪ MUXA‬یعنی ‪ S1‬طوری که محتوی رجیستر‬
‫‪R2‬در روی باس ‪ A‬قرار گیرد‪.‬‬
‫‪ .2‬تعیین مقدار مناسب برای ورودی ‪ MUXB‬یعنی ‪ S2‬طوری که محتوی رجیستر‬
‫‪R3‬در روی باس ‪ B‬قرار گیرد‪.‬‬
‫‪ .3‬تعیین مقدار الزم برای ورودی ‪OPR‬که ‪ALU‬را وادار به انجام عمل جمع‬
‫‪ A+B‬نماید‪.‬‬
‫‪ .4‬در نهایت انتخاب مقدار مناسب برای دیکور ‪ D‬به نحویکه خروجی ‪ALU‬را به‬
‫رجیستر ‪R1‬منتقل نماید‪.‬‬
‫‪10‬‬
‫قالب دستورالعملها‬
‫•‬
‫•‬
‫انتخاب عمل در ‪ALU‬‬
‫انتخاب رجيسترهای مبدا‬
‫– مولتی پلکسر ‪1‬‬
‫– مولتی پلکسر ‪2‬‬
‫•‬
‫انتخاب رجيستر مقصد‬
‫– ديکدر‬
‫•اين چهار قسمت قبل از وارد شدن پالس ساعت بايد آماده ياشند‪.‬‬
‫•‪ ALU‬از مدارات بسيار سريع ساخته ميشود تا نتيجه را سريعتر آماده كند‪.‬‬
‫‪3‬‬
‫‪D‬‬
‫‪3‬‬
‫‪3‬‬
‫‪5‬‬
‫‪S2‬‬
‫‪S1‬‬
‫‪OP-CODE‬‬
‫‪Register‬‬
‫‪Binary‬‬
‫‪code‬‬
‫‪Input‬‬
‫‪000‬‬
‫‪R1‬‬
‫‪001‬‬
‫‪R2‬‬
‫‪010‬‬
‫‪R3‬‬
‫‪011‬‬
‫‪R4‬‬
‫‪100‬‬
‫‪R5‬‬
‫‪101‬‬
‫‪R6‬‬
‫‪110‬‬
‫‪R7‬‬
‫‪11‬‬
‫‪111‬‬
‫عمليات ‪ALU‬‬
‫• در ‪ CPU‬انجام عمليات محاسباتی‬
‫و منطقی بر عهده ‪ ALU‬است‪.‬‬
‫عمل شيفت را ميتوان توسط يک‬
‫‪ Shifter‬که قبل و يا بعد از ‪ALU‬‬
‫قرار ميگيرد انجام داد‪ .‬در مواردی‬
‫هم ممکن است عمل شيفت توسط‬
‫خود ‪ALU‬انجام شود‪ .‬در فصل ‪4‬‬
‫طراحی چنين ‪ ALU‬را ديديم که‬
‫عمليات آن در جدول مقابل ذکر شده‬
‫است‪.‬‬
‫‪12‬‬
‫‪Symbol‬‬
‫‪Operation‬‬
‫‪OPcode‬‬
‫‪TSFA‬‬
‫‪Transfer A‬‬
‫‪00000‬‬
‫‪INCA‬‬
‫‪Increment A‬‬
‫‪00001‬‬
‫‪ADD‬‬
‫‪Add A + B‬‬
‫‪00010‬‬
‫‪SUB‬‬
‫‪Subtract A – B‬‬
‫‪00101‬‬
‫‪DECA‬‬
‫‪Decrement A‬‬
‫‪00110‬‬
‫‪AND‬‬
‫‪And A and B‬‬
‫‪01000‬‬
‫‪OR‬‬
‫‪OR A and B‬‬
‫‪01010‬‬
‫‪XOR‬‬
‫‪XOR A and B‬‬
‫‪01100‬‬
‫‪COMA‬‬
‫‪Complement A‬‬
‫‪01110‬‬
‫‪SHRA‬‬
‫‪Shift right A‬‬
‫‪10000‬‬
‫‪SHLA‬‬
‫‪Shift left A‬‬
‫‪11000‬‬
‫مثال‬
‫• برای انجام ميکرواپريشن زير‬
‫‪R1  R2 – R3‬‬
‫ميبايست کلمه کنترلی بصورت زير انتخاب شود‪:‬‬
‫‪D‬‬
‫‪S2‬‬
‫‪S1‬‬
‫‪OP-code‬‬
‫‪Field:‬‬
‫‪R1‬‬
‫‪R3‬‬
‫‪R2‬‬
‫‪SUB‬‬
‫‪Symbol‬‬
‫‪001‬‬
‫‪011‬‬
‫‪010‬‬
‫‪00101‬‬
‫‪Control word‬‬
‫همانطور که قبال ديديم يک راه پياه سازی واحد کنترل استفاده از‬
‫ميکروپروگرامينگ است که در آن هر کلمه کنترلی در يک محل از حافظه‬
‫‪ ROM‬ذخيره خواهد شد‪.‬‬
‫‪13‬‬
‫ارتباط با حافظه‬
INPUT
R1
R2
R3
R4
R5
R6
R7
DEC
MUX
MUX
ALU
14
‫سازمان پشته يا ‪Stack‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪15‬‬
‫ساختار ‪LIFO‬‬
‫‪PUSH‬‬
‫‪POP‬‬
‫دسترسی فقط به عنصر باالی پشته امکانپذير است‬
‫فقط يک اشاره گر نياز داريم‬
‫‪SP = STACK POINTER‬‬
PUSH
• SP ← SP+1
• M[SP] ← DR
• IF ( SP=0) THEN
(FULL←1)
• EMPTY ← 0
‫ كلمه اي‬64 ‫يك پشته‬
63
FULL
EMPTY
3
SP
2
‫ بيتي‬6
1
0
DR
16
POP
•
•
•
•
DR ← M[SP]
SP ← SP-1
IF ( SP=0) THEN ( EMPTY ←1)
FULL ← 0
FULL
63
EMPTY
3
SP
2
‫ بيتي‬6
1
0
DR
17
‫استفاده برای صدا زدن برنامه فرعی‬- ‫کاربرد‬
(Procedure call)‫• صدا زدن برنامه فرعی‬
– call label
Push return address on stack;
Jump to label
(Procedure return) ‫• برگشت از تابع‬
– ret
Pop address from stack;
Jump to address
18
‫کاربرد ‪-‬استفاده در برنامه هاي برگشت پذير‬
‫)‪(recursive‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪19‬‬
‫استفاده از پشته باعث میشود تا امکان پیاده سازی برنامه های برگشت پذیر‬
‫فراهم گردد‪.‬‬
‫با استفاده از پشته میتوان برای هر نسخه از تابع صدا زده شده حافظه‬
‫جداگانه ای در نظر گرفت‬
‫آرگومانها و متغیرهای محلی را میتوان در پشته ذخیره نمود‪.‬‬
‫آدرس دهی متغیرهای محلی و آرگومانها نسبت به موقعیت پشته انجام میشود‪.‬‬
‫بازگشت از توابع عکس حالتی است که صدا زده شده اند‬
‫کاربرد‬
‫عبارات محاسباتی‬
A*B+C/D
POLISH NOTATION
AB*CD/+
•
•
•
•
20
AB*CD/+
•
•
•
•
•
•
•
PUSH A
PUSH B
MUL (POP,POP, PUSH A*B)
PUSH C
PUSH D
DIV (POP,POP,PUSH C/D)
ADD (POP,POP, PUSH RESULT)
21
AB*CD/+
PUSH A
PUSH B
B
A
22
AB*CD/+
PUSH A
PUSH B
MUL
PUSH C
PUSH D
D
C
A*B
23
AB*CD/+
PUSH A
PUSH B
MUL
PUSH C
PUSH D
DIV
C/D
A*B
24
AB*CD/+
PUSH A
PUSH B
MUL
PUSH C
PUSH D
DIV
ADD
A*B+ C/D
25
‫کدام مجموعه از عمليات ذيل می تواند يک پشته را پياده سازی نمايد ؟‬
PUSH A
POP A
SP ←SP-1
A ←MEM[SP]
MEM[SP] ←A
SP ←SP+1
SP ←SP+1
A ←MEM[SP]
MEM[SP] ←A
SP ←SP-1
MEM[SP] ←A
SP ←SP+1
SP ←SP-1
A ←MEM[SP]
‫هر سه‬
1,3
2,3
1
2
3
1,2
26
‫انواع ساختار پشته‬
‫• پشته رجيستري‬
‫– سرعت دسترسی باال‬
‫– قيمت زياد‬
‫– تعداد کم‬
‫• پشته حافظه ای‬
‫– کند‬
‫– ارزان‬
‫– حجم زياد‬
‫‪27‬‬
‫تاثير نوع ‪ CPU‬بر قالب دستورات‬
‫• تک انباره‬
‫– معموال يک اپرند آکوموالتور است‬
‫– دستورات تک آدرسی‬
‫• چندرجيستری )رجيسترهاي عمومي(‬
‫– اپرندها رجيستر هستند‬
‫– دستورات سه آدرسی ) يا دو آدرسی(‬
‫• پشته ای‬
‫– فقط اپرند مربوط به پوش يا پاپ‬
‫– دستورات يک آدرسی و صفر آدرسی‬
‫‪28‬‬
‫تاثير قالب دستورالعمل ها بر روی سرعت اجرا‬
‫• مقايسه يک عمليات يکسان در سه حالت مختلف‬
‫• محاسبه )‪X= (A+B)*(C+D‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪29‬‬
‫دستورات سه آدرسی‬
‫دستورات دو آدرسی‬
‫دستورات يک آدرسی‬
‫دستورات صفرآدرسی‬
‫دستورات سه آدرسی‬
‫در کامپيوترهای سهآدرسی‪ ،‬هر قسمت آدرس‪ ،‬برای مشخص نمودن يک ثبات‬
‫پردازنده و يا آدرس يک عملوند در حافظه تخصيص داده میشود‪.‬‬
‫)‪X = (A+B) * (C+D‬‬
‫]‪R1  M[A] + M[B‬‬
‫]‪R2  M[C] + M[D‬‬
‫‪M[X]  R1 × R2‬‬
‫‪30‬‬
‫‪ADD R1, A, B‬‬
‫‪ADD R2, C, D‬‬
‫‪MUL X, R1, R2‬‬
‫دستورات دو آدرسی‬
‫دستورات دوآدرسی معمولترين فرمت دستور در کامپيوترها هستند‪ .‬قسمت آدرس‬
‫میتواند يک رجيستر پردازنده يا يک خانه حافظه را مشخص نمايد‪.‬‬
‫)‪X = (A+B) * (C+D‬‬
‫‪31‬‬
‫]‪R1  M[A‬‬
‫‪MOV R1, A‬‬
‫]‪R1  R1 + M[B‬‬
‫‪ADD R1, B‬‬
‫]‪R2  M[C‬‬
‫‪MOV R2, C‬‬
‫]‪R2  R2 + M [D‬‬
‫‪ADD R2, D‬‬
‫‪R1  R1 × R2‬‬
‫‪MUL R1, R2‬‬
‫‪M[X]  R1‬‬
‫‪MOV X, R1‬‬
‫دستورات يک آدرسی‬
‫ را‬AC ‫ رجيستر اکوموالتور‬،‫ برای تمام عمليات بر روی دادهها‬،‫دستورات يکآدرسی‬
.‫بهکار میبرند‬
X = (A+B) * (C+D)
LOAD A
AC  M[A]
ADD B
AC  AC + M[B]
STORE T
M[T] AC
LOAD C
AC  M[C]
ADD D
AC  AC + M[D]
MUL T
AC  AC × M[T]
STORE X
M[X]  AC
32
‫دستورات صفرآدرسی‬
X = (A+B) * (C+D)
•
•
•
•
•
•
•
•
PUSH A
PUSH B
ADD
PUSH C
PUSH D
ADD
MUL
POP X
33
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
34
‫روشهاي آدرسدهی‬
‫دستورات یک کامپیوتر عملی را بر روی داده ذخیره شده در حافظه و یا‬
‫رجیسترهای ‪ CPU‬انجام میدهند ‪.‬روش مشخص کردن عملوند یک‬
‫دستورالعمل حاالت آدرس دهی و یا ‪ addressing mode‬نامیده‬
‫میشود ‪.‬‬
‫اصوال حاالت مختلف آدرسدهی عملوند دستور‪ ،‬تسهیالت زیر را در‬
‫سیستم فراهم میآورد‪:‬‬
‫‪.1‬‬
‫قابلیت ایجاد شمارنده برای برنامه حلقه‪ ،‬و شاخصبندی در دادهها‬
‫و همچنین ایجاد اشارهگر حافظه و جابجایی برای کاربر فراهم‬
‫میشود‬
‫‪.2‬‬
‫‪35‬‬
‫امکان تقلیل تعداد بیتهای قسمت آدرس دستور‪ ،‬فراهم میشود‪.‬‬
•
•
•
•
•
•
•
•
•
•
‫انواع حالت های آدرس دهی‬
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
‫آدرس دهی ضمنی‬
‫آدرس دهی بالدرنگ‬
‫آدرس دهی ثبات‬
‫آدرس دهی غير مستقيم بکمک ثبات‬
‫آدرس دهی افزايش و يا کاهشی خودکار‬
‫آدرس دهی مستقيم‬
‫آدرس دهی غير مستقيم‬
‫آدرس دهی نسبی‬
‫آدرس دهی شاخص‬
‫آدرس دهی با ثبات پابه‬
36
•
•
•
•
•
•
•
•
•
•
‫آدرس دهی ضمنی‬
‫• ‪Implied Addressing Mode‬‬
‫در اين روش اپراندها بصورت ضمنی در داخل دستورالعمل مشخص‬
‫ميشوند ‪.‬‬
‫– مثل دستور ‪ CMA‬که محتوی آکوموالتور را متمم ميکند‪.‬‬
‫– دستورات صفر آدرسی مورد استفاده در کامپيوترهای ‪ stack machine‬نيز از‬
‫آدرس دهی ضمنی استفاده ميکنند زيرا عملوندها بطور ضمنی در باالی پشته در‬
‫نظر گرفته ميشوند‪.‬‬
‫‪37‬‬
‫آدرس دهی بالدرنگ‬
‫• ‪Immediate Addressing Mode‬‬
‫در اين روش مقدار عملوند در داخل خود دستورالعمل داده ميشود‪.‬‬
‫اين مد آدرس دهی برای مقدار دهی رجيسترها بکار ميرود‪.‬‬
‫– مثل دستور زير در پردازنده ‪x86‬‬
‫‪MOV CX, 1024‬‬
‫‪Operand‬‬
‫‪38‬‬
‫‪Instruction‬‬
‫آدرس دهی رجيستري‬
‫•‬
‫‪Register Addressing‬‬
‫در اين روش عملوندها در داخل رجيسترهای پردازنده قرار دارند ‪.‬با‬
‫استفاده از ‪ K‬بيت ميتوان تعداد ‪ 2k‬رحيستر را مشخص نمود‪.‬‬
‫– مثل دستور زير در پردازنده ‪x86‬‬
‫‪ADD AL, BL‬‬
‫‪CPU registers‬‬
‫‪R‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪39‬‬
‫آدرس دهی رجيستري غير مستقيم‬
‫• ‪Register Indirect Addressing‬‬
‫• در اين روش دستورالعمل رجيستری را مشخص ميکند که محتوی‬
‫آن آدرس عملوند در حافظه را مشخص خواهد نمود‪.‬‬
‫– مثل دستور زير در پردازنده ‪x86‬‬
‫]‪MOV BX,[SI‬‬
‫‪Memory‬‬
‫‪CPU registers‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪40‬‬
‫‪R‬‬
‫آدرس دهی افزايش و يا کاهشی خودکار‬
‫• ‪Autoincrement or Autodecrement addressing‬‬
‫• اين روش مشابه آدرس دهی رجيستري غير مستقيم است با اين‬
‫تفاوت که مقدار رجيستر بعد يا قبل از استفاده برای محاسبه آدرس‬
‫موثر افزايش و يا کاهش ميابد‪.‬‬
‫‪Memory‬‬
‫‪Operand‬‬
‫‪CPU registers‬‬
‫‪R‬‬
‫‪Instruction‬‬
‫‪R=R+1‬‬
‫‪R=R-1‬‬
‫‪41‬‬
‫آدرس دهی مستقيم‬
‫• ‪Direct Addressing Mode‬‬
‫در اين روش آدرس عملوند در داخل دستورالعمل ذکر ميشود‪.‬‬
‫– مثل دستور زير در پردازنده ‪x86‬‬
‫]‪MOV AX,[3000‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪42‬‬
‫‪Address‬‬
‫آدرس دهی غير مستقيم‬
‫• ‪Indirect Addressing Mode‬‬
‫در اين روش آدرس موجود در دستورالعمل محلی از حاقطه را مشخص ميکند که‬
‫آدرس عملوند درآنجا قرار دارد ‪.‬در اين حالت برای دسترسی به عملوند دوبار‬
‫رجوع به حافطه مورد نياز است ‪:‬يکبار برای پيدا کردن آدرس آن و بار ديگر‬
‫برای خواندن مقدار آن ‪.‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫‪43‬‬
‫آدرس دهی نسبی‬
Relative Addressing Mode •
‫• در اين روش آدرس موثر از جمع آدرس مشخص شده در داخل‬
:‫ حاصل ميشود‬PC ‫دستورالعمل و محتوی‬
Effective Address= address part of instruction + content of PC
Memory
Instruction
Address
Operand
+
PC
44
‫آدرس دهی شاخص دار‬
‫• ‪Index Addressing Mode‬‬
‫• در اين روش آدرس موثر از جمع آدرس مشخص شده در داخل دستورالعمل و محتوی يک رجيستر‬
‫مخصوص که رجيستر ايندکس ناميده ميشود حاصل ميشود‪:‬‬
‫‪Effective Add.= address part of instruction + content of index register‬‬
‫• معموال از اين روش برای دسترسی به داده های يک آرايه استفاده ميشود ‪.‬که محل شروع داده ها در‬
‫حافظه در دستورالعمل مشخص ميشود و فاصله داده مورد نظر تا محل شروع توسط رجيستر ايندکس‬
‫تعيين ميگردد‪.‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫‪+‬‬
‫‪Index Register‬‬
‫‪45‬‬
‫آدرس دهی با ثبات پايه‬
‫• ‪Base Register Addressing Mode‬‬
‫• اين روش مشابه آدرس دهی با ثبات شاخص است با اين تفاوت که‬
‫بجای ثبات شاخص از ثبات پايه استفاده ميشود ‪ .‬تفاوت اين دو‬
‫روش در نحوه استفاده از رجيسترهاست ‪.‬‬
‫‪Effective Add.= address part of instruction + content of Base register‬‬
‫‪Memory‬‬
‫‪Instruction‬‬
‫‪Operand‬‬
‫‪Address‬‬
‫‪+‬‬
‫‪Base Register‬‬
‫‪46‬‬
‫مثال عددی‬
‫حافظه‬
‫مقدار آکوموالتور در صورت اجرای‬
‫دستور موجود در آدرس ‪ 200‬برای‬
‫حالتهای مختلف آدرس دهی چيست؟‬
‫حالت‬
‫آدرس‬
‫بارکردن ‪AC‬‬
‫‪200‬‬
‫‪ = 500‬آدرس‬
‫‪201‬‬
‫دستور بعدی‬
‫‪202‬‬
‫‪PC = 200‬‬
‫‪R1 = 400‬‬
‫‪450‬‬
‫‪399‬‬
‫‪700‬‬
‫‪400‬‬
‫‪800‬‬
‫‪500‬‬
‫‪XR = 100‬‬
‫‪AC‬‬
‫‪47‬‬
‫‪900‬‬
‫‪600‬‬
‫‪325‬‬
‫‪702‬‬
‫‪300‬‬
‫‪800‬‬
‫مثال عددی‬
‫‪48‬‬
‫حاالت آدرسدهی‬
‫آدرس مؤثر‬
‫محتوای اکوموالتور‬
‫مستقیم‬
‫‪500‬‬
‫‪800‬‬
‫بالفصل‬
‫‪201‬‬
‫‪500‬‬
‫غیرمستقیم‬
‫‪800‬‬
‫‪300‬‬
‫نسبی‬
‫‪702‬‬
‫‪325‬‬
‫شاخصدار‬
‫‪600‬‬
‫‪900‬‬
‫ثبات‬
‫‪-‬‬
‫‪400‬‬
‫غیرمستقیم از طریق ثبات‬
‫‪400‬‬
‫‪700‬‬
‫افزایش خودکار‬
‫‪400‬‬
‫‪700‬‬
‫کاهش خودکار‬
‫‪399‬‬
‫‪450‬‬
‫مجموعه دستورات کامپيوتر‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪49‬‬
‫دستورات مورد استفاده درکامپيوترهای مختلف از لحاظ تعداد‪،‬‬
‫عملکرد‪ ،‬نشانه های مورد استفاده برای اسمبلی‪ ،‬و کد باينری بسيار‬
‫متفاوت هستند با اين وجود تمامی آنها دارای دستوراتی از گروههای‬
‫زير ميباشند‪:‬‬
‫دستورات انتقال داده‬
‫دستورات محاسباتی‪ ،‬منطقی و جابجائی‬
‫دستورات کنترل برنامه‬
‫دستورات معمول انتقال اطالعات‬
‫‪50‬‬
‫فرم سمبولیک‬
‫نام‬
‫‪LD‬‬
‫‪Load‬‬
‫‪ST‬‬
‫‪Store‬‬
‫‪MOV‬‬
‫‪Move‬‬
‫انتقال داده بين رجيسترها‬
‫انتقال داده بين حافظه و رجيسترها‬
‫‪XCH‬‬
‫‪Exchange‬‬
‫تعويص داده های دو رحيستر و يا‬
‫يک رجيستر و حافظه‬
‫‪IN‬‬
‫‪Input‬‬
‫‪OUT‬‬
‫‪Output‬‬
‫‪PUSH‬‬
‫‪Push‬‬
‫‪POP‬‬
‫‪Pop‬‬
‫انتقال داده بين حافظه و‬
‫رجيسترها‬
‫انتقال داده بين‬
‫ورودی‪/‬خروجی و رجيسترها‬
‫انتقال داده بين پشته و‬
‫رجيسترها‬
‫هشت حالت آدرسدهی برای دستور بارکردن‬
‫زبان اسمبلی‬
‫عملكرد‬
‫حالت آدرسدهی‬
‫]‪AC  M[ADR‬‬
‫‪LD ADR‬‬
‫]]‪AC  M [M[ADR‬‬
‫‪LD @ADR‬‬
‫آدرسدهی غیرمستقیم‬
‫]‪AC  M [PC + ADR‬‬
‫‪LD $ADR‬‬
‫آدرسدهی نسبی‬
‫‪AC  NBR‬‬
‫‪LD #NBR‬‬
‫آدرسدهی بالفصل‬
‫]‪AC  M [ADR + XR‬‬
‫)‪LD ADR (X‬‬
‫آدرسدهی شاخص‬
‫‪AC  RI‬‬
‫‪LD RI‬‬
‫]‪AC  M [RI‬‬
‫)‪LD (RI‬‬
‫‪AC  M [RI], RI  RI + 1‬‬
‫‪LD (RI)+‬‬
‫‪51‬‬
‫آدرسدهی مستقیم‬
‫آدرسدهی ثبات‬
‫آدرسدهی رجیستري غیرمستقیم‬
‫آدرسدهی افزایش خودکار‬
‫دستورات معمولی ریاضی‬
‫نام دستور‬
‫نماد دستور‬
‫افزایشدهنده یک‬
Increment
INC
‫کاهشدهنده یک‬
Decrement
DEC
‫جمع‬
Add
ADD
‫تفریق‬
Subtract
SUB
‫ضرب‬
Multiply
MUL
‫تقسیم‬
Divide
DIV
‫جمع با بیت نقلی‬
Add with carry
ADDC
‫تفریق با بیت قرضی‬
Subtract with
borrow
SUBB
2 ‫مکمل‬
Negate (2’s
complement)
NEG
52
‫دستورات منطقی و عملیات روی بیت‬
‫نام دستور‬
‫نماد دستور‬
‫‪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‬‬
‫غیرفعال کردن وقفه‬
‫‪53‬‬
‫دستورات معمولی شیفت‬
‫نام دستور‬
‫فرم نمادین‬
‫شیفت به راست‬
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
54
‫دستورات متداول کنترل برنامه‬
‫نام دستور‬
‫فرم‬
‫نمادین‬
‫انشعاب‬
Branch
BR
‫پرش‬
Jump
JMP
‫رد کردن‬
SKIP
SKP
‫صدا زدن‬
Call
CALL
‫بازگشت‬
Return
RET
‫مقایسه‬
Compare( By subtraction)
CMP
‫تست‬
Test( By ANDing)
TST
55
‫بيت های وضعيت‬
‫‪A‬‬
‫‪B‬‬
‫‪16-bit ALU‬‬
‫‪C15‬‬
‫‪C16‬‬
‫‪F15-F0‬‬
‫شرطهايي كه بر اساس آنها تصميم در‬
‫مورد پرش گرفته ميشود بر اساس اين‬
‫بيتها هستند‪.‬‬
‫‪C‬‬
‫‪S‬‬
‫‪Z‬‬
‫‪V‬‬
‫‪F15‬‬
‫‪Check For Zero Output‬‬
‫‪Output F‬‬
‫‪56‬‬
‫مقايسه اعداد عالمت دار و بدون عالمت‬
‫سوال‪:‬‬
‫‪A‬و‪ B‬كدام بزرگترند؟‬
‫‪A= 11110000‬‬
‫جواب ‪:‬بستگي دارد آنها را عالمت دار و يا بدون عالمت‬
‫در نظر بگیريم‪.‬‬
‫بدون عالمت)‪(A>B‬‬
‫‪57‬‬
‫‪B= 00010100‬‬
‫عالمت دار)‪(A<B‬‬
‫‪َA= 240‬‬
‫‪َA= -16‬‬
‫‪B = 20‬‬
‫‪B = 20‬‬
‫وقفه‬
‫انواع مختلف وقفه در کامپيوتر‬
‫• وقفه های خارجی‬
‫– اين وقفه ها سخت افزاری بوده و توسط يک وسيله خارجی نظير ‪ IO‬و يا تايمر رخ‬
‫ميدهد‪.‬‬
‫• وقفه های داخلی‬
‫– در اثر استفاده غلط و نابجای يک دستور حاصل ميشود ‪.‬مثل رخ دادن ‪ Overflow‬انجام‬
‫يک تقسيم بر صفر‪ ،‬يک کد دستورالعمل غلط‪ ،‬سرريز شدن پشته‪ ،‬و ‪protection‬‬
‫‪violation‬‬
‫– برنامه سرويس دهی به وقفه در هر مورد در باره عکس العمل مناسب تصميم ميگيرد ‪.‬اين‬
‫وقفه گاهی ‪ trap‬ناميده ميشود‪.‬‬
‫• وقفه های نرم افزاری‬
‫– نوع خاصی از صدا زدن برنامه فرعی هستند ‪.‬برای انجام عمليات خاصی نظير تغيير مد‬
‫برنامه از حالت ‪ user‬به ‪ supervisor‬و يا انجام سرويس خاصي) مثال چاپ يك‬
‫كاراكتر(بکار ميروند‪.‬‬
‫‪58‬‬
‫قالب دستورالعمل ها‬
‫• قالب دستورالعملها وابسته به نوع طراحی ‪ CPU‬است‪.‬‬
‫• بخش های مختلف يک دستورالعمل‬
‫– ‪OP-CODE‬‬
‫– آدرس ) حافظه ‪ ،‬ثبات ‪(....‬‬
‫– شيوه آدرسدهی‬
‫‪59‬‬
‫طول دستورالعمل‬
‫• ثابت‬
‫• متغير‬
‫• تنوع دستورالعملها‬
‫– کامپيوترهای ‪) CISC‬پر دستور (‬
‫– کامپيوترهای ‪) RISC‬کم دستور (‬
‫‪60‬‬
‫کامپيوترهای با مجموعه دستورات پيچيده ‪CISC‬‬
‫• معماری يک کامپيوتر متاثر از مجموعه دستورات انتخاب شده برای آن است‪.‬‬
‫• در کامپيوتر های اوليه سعی بر اين بود تا تعداد دستورات کم و ساده باشد تا‬
‫پياده سازی سخت افزاری آن ممکن باشد‪.‬‬
‫• با پيشرفت در زمينه سخت افزار و ارزان شدن آن تعداد دستورات کامپيوترها‬
‫افزايش يافته و بر پيچيدگی آنها افزوده گرديد ‪.‬هدف اين بود تا هر چه بيشتر‬
‫نياز های کاربران را در سخت افزار گنجانده وبا کاهش فاصله بين زبانهای‬
‫سطح باال و دستورات کامپيوتر کار ترجمه دستورات سطح باال را ساده تر‬
‫کنند ‪.‬اين نوع کامپيوترها گاها تا ‪ 200‬دستور و تعداد بسيار زيادی مد آدرس‬
‫دهی داشتند ‪.‬اين کامپيوتر ها را ‪Complex instruction set‬‬
‫)‪computer (cisc‬مينامند‪.‬‬
‫‪61‬‬
‫ويژگی های کامپيوترهای ‪CISC‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪62‬‬
‫تعداد زيادی دستورالعمل دارند )‪ 100‬تا ‪ 200‬عدد(‬
‫دستوراتی برای انجام کارهای ويژه دارند که معموال بندرت مورد‬
‫استفاده قرار ميگيرند‬
‫تعداد زيادی مد آدرس دهی دارند‬
‫طول دستورالعمل ها متفاوت است‬
‫دستوراتی دارند که عملياتی را بر روی اپراندهای موجود در حافظه‬
‫انجام ميدهند‪.‬‬
‫برای اجرای دستورات به چندين کالک نياز هست‪.‬‬
‫کامپيوترهای با مجموعه دستورات کاهش يافته ‪RISC‬‬
‫• معماری ‪ RISC‬ابداعی مهم در زمينه سازمان کامپيوتر بشمار‬
‫ميرود‪.‬‬
‫• در اين معماری سعی شده است تا با ساده تر کردن مجموعه‬
‫دستورالعمل ها بر قدرت پردازنده افزوده شود‪.‬‬
‫‪63‬‬
‫با پيشرفت زيانهای سطح باال اختالف بين برنامه‬
‫های سطح باال و زبان ماشين گسترش‬
‫يافت‪.‬هر يک از معماريهای فوق روش‬
‫مختلقی برای کاهش اين اختالف معرفی‬
‫کردند تا ترجمه زبانهای سطح باال بطرز‬
‫موثرتری انجام شود‪.‬‬
‫زبان سطح باال‬
‫زبان ماشين‬
‫• نگرش ‪ : CISC‬دستورات زبان ماشين پيچيده تر و به زبان سطح‬
‫باال نزديکتر گردد‪.‬‬
‫• نگرش ‪ : RISC‬دستورات زبان ماشين ساده تر و به نيازهای‬
‫برنامه نزديکتر گردد‪.‬‬
‫‪64‬‬
‫‪The Semantic Gap‬‬
‫‪The Semantic Gap‬‬
‫دستورات پرمصرف در کامپيوتر کدامند؟‬
‫• مطالعات زيادی که برای تعيين مشخصات و الگوی دستورات‬
‫حاصل از ترجمه برنامه های سطح باال انجام گرفت نشان ميدهد‬
‫که‪:‬‬
‫• از لحاظ تعداد دفعات استفاده از دستورات روند زير بطور تقريب‬
‫وجود داشته است‪:‬‬
‫‪moves: 33%‬‬
‫‪conditional branch: 20%‬‬
‫‪arithmetic/logic: 16%‬‬
‫‪others: between 0.1% and 10%‬‬
‫دستورات ساده پر مصرف تر هستند‬
‫‪65‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫دستورات پرمصرف در کامپيوتر کدامند؟‬
‫• از لحلظ مد آدرس دهی‪:‬‬
‫– تقريبا ‪ 18 %‬مواقع از مدهای آدرس دهی پيچيده نظير ‪memory‬‬
‫‪indirect, indexed+indirect, displacement+indexed,‬‬
‫‪stack‬استفاده شده است‪.‬‬
‫– در بيشتر موارد از مدهای آدرس دهی ساده که امکان محاسبه آدرس در‬
‫يک سيکل وجود داشته استفاده ميشود ‪.‬نظير ‪register, register‬‬
‫‪indirect, displacement‬‬
‫مدهای آدرس دهی ساده ارجح هستند‪.‬‬
‫‪66‬‬
‫دستورات پرمصرف در کامپيوتر کدامند؟‬
‫•‬
‫•‬
‫•‬
‫•‬
‫از لحاظ نوع عملوندها‪:‬‬
‫‪75%‬عملوندها مقاديرعددی نظيرمقادير صحيح ‪ ،‬حقيقی و يا‬
‫کاراکتری هستند که ميتوان آنها را در رجيسترها ذخيره نمود‪.‬‬
‫بقيه آنها آرايه ها و استراکچها هستند که بيشتر بصورت متغيرهای‬
‫خارجی مورد استفاده قرار ميگيرند‪.‬‬
‫‪80%‬عملوندهای عددی بصورت متغيرهای محلی مورد استفاده‬
‫قرار ميگيرند‪.‬‬
‫اکثر عملوندها بصورت متغیرهای عددی محلی هستند که ميتوان آنها رادر‬
‫رجيستر ذخیره نمود‪.‬‬
‫‪67‬‬
‫دستورات پرمصرف در کامپيوتر کدامند؟‬
‫• از لحاظ زمانی که برای اجرای دستورات مصرف ميشود‪:‬‬
‫– با وجود آنکه دستورات مربوط به صدا زدن برنامه فرعی و بازگشت از آن‬
‫تقريبا ‪ 15%‬از دستورات برنامه را تشکيل ميدهند‪ ،‬اغلب وقت ‪cpu‬‬
‫صرف اجرا آنها ميشود‪.‬‬
‫– دستورات ‪ call‬و ‪ return‬به مجموعه بزرگی از دستورات زبان ماشين‬
‫ترجمه ميشوند که بسيار نياز به رجوع به حافظه دارند‪.‬‬
‫• مطالعات آماری برروی صدا زدن توابع نشان ميدهد که‪:‬‬
‫• فقط ‪ 2%‬توابع بيشتر از ‪ 6‬پارامتر دارند‬
‫• فقط ‪ 7%‬توابع بيشتر از ‪ 6‬متغير محلی دارند‬
‫• زنجيره توابعی که يکديگر را صدا بزنند کوتاه بوده و بندرت از ‪ 6‬تابع بيشتر ميشود‪.‬‬
‫بهينه کردن عمل صدا زدن تابع و بازگشت از آن ميتواند کارآيی پردازنده را افزايش دهد‬
‫‪68‬‬
‫ويژگی های ‪RISC‬‬
‫• دستورات ساده و کمی دارند‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪69‬‬
‫هدف اين است که بتوان دستورات را بسرعت اجرا کرد ‪.‬اغلب دستورات‬
‫‪RISC‬در يک سيکل اجرا ميشوند )بعد ازواکشی و رمزگشايی(‬
‫چون دستورات در زمان مشابهی اجرا ميشوند عمل ‪ pipeline‬دارای‬
‫بازده بااليی خواهد بود‪.‬‬
‫کم بودن دستورات باعث ساده شدن واحد کنترل ومسيرهای ارتباطی‬
‫ميشود که منجر به کم شدن تعداد ترانزيستورهای مورد نياز برای ساخت‬
‫پردازنده ميشود اينکار سرعت پردازنده را نيز افزايش ميدهد‪..‬‬
‫در ضمن ميتوان واحد کنترل را بروش سيم بندی ساخت‪.‬‬
‫ویژگی های ‪RISC‬‬
‫• دسترس ی به حافظه محدود به دستورات ‪ load , Store‬است‬
‫– از آنجائیکه عمل رجوع به حافظه معموال در یک سیکل امکانپذیر‬
‫نمیباشد‪،‬تمهیداتی در کامپایلر استفاده میشود تا ‪pipeline‬بطور موثرتری‬
‫استفاده شود‪.‬‬
‫– باقی دستورات بر روی محتوی رجیسترها عمل میکنند‪.‬‬
‫‪70‬‬
RISC ‫ویژگی های‬
‫• تعداد مد های آدرس دهی آنها کم است‬
:‫– معموال فقط از مدهای آدرس دهی زیر استفاده میشود‬
•
•
•
•
register addressing
direct addressing
register indirect addressing
displacement addressing
71
‫ویژگی های ‪RISC‬‬
‫• دستورات طول و فرمت یکسانی دارند‬
‫• اینکار باعث میشود تا خواندن دستورات و رمزگشائی آنها سریع و ساده‬
‫باشد‪.‬زیرا الزم نیست تا معلوم شدن طول دستور برای رمزگشایی آن صبر‬
‫کرد‪.‬‬
‫• یکسانی فرمت باعث سهولت رمزگشایی میگردد زیرا کد و ادرس همه‬
‫دستورات در محل یکسانی قرار دارند‪.‬‬
‫‪72‬‬
‫ویژگی های ‪RISC‬‬
‫• تعداد رجیسترهای زیادی دارند‪.‬‬
‫– کم شدن دستورات باعث کوچگ شدن واحد کنترل و آزاد شدن فضا برای‬
‫گنجاندن تعداد بیشتری رجیستر میشود‪.‬‬
‫– متغیرهای محلی‪ ،‬نتایج میانی و پارامترهای توابع در داخل رجیسترها ذخیره شده و‬
‫تعداد رجوع به حافظه کاهش پیدا میکند‪.‬‬
‫‪73‬‬
‫ساير ويژگی های ‪RISC‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪74‬‬
‫استفاده ازتکنيک ‪ pipelining‬که باهمپوشانی سيکل های واکشی‪،‬‬
‫رمزگشائی و اجرا شده و نهايتا به اجرای هر دستور در يک سيکل‬
‫منجر ميشود‪.‬‬
‫تعداد زيادی رجيستر در داخل ‪ cpu‬وجود دارد‬
‫استفاده از تکنيک همپوشانی ‪ register windows‬که باعث‬
‫افزايش سرعت صدا زدن تابغ و بازگشت از آن ميشود‪.‬‬
‫حمايت از کامپايلر برای افزايش کارائی در ترجمه برنامه های‬
‫سطح باال‬
‫مقايسه ‪RISC, CISC‬‬
‫• برای مثال ترجمه دستور ‪ a = a * b‬برای دو معماری فوق‬
‫بصورت زير خواهد بود‪:‬‬
‫•‬
‫•‬
‫برای مثال ترجمه دستور ‪ a = a * b‬برای دو‬
‫معماری فوق بصورت زير خواهد بود‪:‬‬
‫در معماری ‪ CISC‬سعی بر اين است که با تعداد‬
‫کمی دستورزبان ماشين عمل مورد نظر انجام‬
‫شود ‪.‬در حاليکه در‪ RISC‬سعی بر اين است که‬
‫از دستوراتی استفاده شود که هر دستور در يک‬
‫پالس قابل اجرا باشند ‪.‬در نتيجه برنامه ‪RISC‬‬
‫دارای چندين خط دستور خواهد بود که احتياج به‬
‫حاقظه بيشتری دارد‪.‬‬
‫‪75‬‬
‫‪MULT a, b‬‬
‫‪CISC‬‬
‫‪LOAD R1, a‬‬
‫‪LOAD R2, b‬‬
‫‪MUL R1,R2‬‬
‫‪STORE a, R1‬‬
‫‪RISC‬‬
‫مقايسه‪RISC, CISC‬‬
‫• فرمول محاسبه کارائی‬
‫• اگر از فرمول زير برای محاسبه کارائی کامپيوتر‬
‫استفاده شود‪:‬‬
‫‪CISC‬سعی ميکند تا اين‬
‫قسمت کاهش پيدا کند‬
‫‪76‬‬
‫‪RISC‬سعی ميکند تا اين‬
‫قسمت کاهش پيدا کند‬
‫پيشگامان ‪RISC‬‬
‫• ايده ‪ RISC‬در دهه ‪ 80‬معرفی گرديد ‪.‬از جمله‬
‫پيشگامان آن ميتوان به موارد زير اشاره نمود‬
‫‪– IBM 801‬‬
‫‪– Stanford MIPS‬‬
‫‪– Berkeley RISC 1 and 2‬‬
‫‪77‬‬
‫کاربردهای ‪RISC‬‬
‫• عمده پردازنده های کامپيوترهای سرور و ‪ workstarion‬از نوع‬
‫‪RISC‬هستند‪.‬‬
‫• تعدادی از پردازنده های مشهور مبتنی بر ‪ RISC‬عبارتند از‪:‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪78‬‬
‫‪ ARM/StrongARM‬که در تلفنهای همراه استفاده ميشود‬
‫‪ MIPS Rxx00‬که در برخی دستگاه های بازی مورد استفاده است‪.‬‬
‫‪ Hitachi SH‬مورد استفاده در سيستم های ‪embedded‬‬
‫‪ POWER/PowerPC‬مورد استفاده در کامپيوترهای‪MAC‬‬
‫‪Intel Pentium II and III‬اگرچه از معماری ‪ CISC‬پيروی ميکنند‬
‫ولی بسياری از ويژگی های ‪ RISC‬را استفاده ميکنند‪.‬‬
‫‪overlapped register windows‬‬
‫• ديديم که صدا زدن برنامه فرعی و بازگشت از آن بخش مهمی از‬
‫اجرای برنامه را بخود اختصاص ميدهد ‪.‬لذا سرعت بخشيدن به آن‬
‫ميتواند تاثير زيادی در افزايش کارائی پردازنده داشته باشد‪.‬‬
‫• هنگام صدا زدن يک برنامه فرعی دستوراتی استفاده ميشوند که‬
‫مقادير رجيسترها را ذخيره کنند‪ ،‬و پارامترها را انتقال دهند‪.‬‬
‫• برای بازگشت از برنامه فرعی مقدار بازگشتی تابع به برنامه صدا‬
‫زننده منتقل شده و مقادير ذخيره شده رجيسترها بازيابی ميشوند‪.‬‬
‫‪79‬‬
‫‪overlapped register windows‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪80‬‬
‫دربرخی از معمارهای ‪ RISC‬برای سهولت انتقال بين توابع از‬
‫همپوشانی پنجره ای رجيسترها استفاده ميشود تا نياز به ذخيره و‬
‫بازيافت مقادير رجيسترها را حذف نمايند‪.‬‬
‫هر زمان که تابعی که صدا زده ميشود پنجره ای از رجيسترها از‬
‫ميان بانک رجيسترموجود در پردازنده به آن اختصاص ميابد‪.‬‬
‫اينکار از طريق افزايش پوينتری انجام ميشود ‪.‬با برگشت از تابع‬
‫پوينتر به مقدار قبلی آن کاهش داده ميشود‪.‬‬
‫پنجره مورد استفاده برای تواب همجوار همپوشانی دارند تا امکان به‬
‫اشتراک گذاشتن داده ها بين دو تابع وجود داشته باشد‪.‬‬
‫‪overlapped register windows‬‬
‫‪pointer‬‬
‫‪pointer‬‬
‫‪pointer‬‬
‫از قسمت‬
‫مشترک‬
‫برای انتقال‬
‫اطالعات‬
‫استفاده ميشود‬
‫با برگشت تابع پوينتر‬
‫کاهش داده ميشود‬
‫‪81‬‬
‫پنجره رجيستر‬
‫اوليه‬
‫پنجره جديد‬
‫با صدا زدن تابع پنجره جديدی‬
‫از رجيسترها به آن اختصاص‬
‫داده ميشود‪.‬‬
‫بانک رجيستر‬
‫مثال‬
‫• در کتاب سيستمی معرفی شده است که دارای بانک رجيستری با‬
‫مشخصات زير است‪:‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪82‬‬
‫اين بانک دارای ‪ 74‬رجيستر است‪.‬‬
‫رجيستر های ‪ R0‬تا ‪R9‬بعنوان رجيسترهای عمومی قابل استفاده تمامی‬
‫توابع هستند‬
‫بقيه رحيسترها به به ‪ 4‬گروه ‪A,B,C,D‬تقسيم شده اند ‪.‬‬
‫هر پنجره دارای ‪ 10‬رجيستر اختصاصی و دو دسته رجيستر ‪ 6‬تائی‬
‫مشترک با با پنجره های مجاور است‪.‬‬
‫از رجيسترهای اختصاصی برا ذخيره متغيرهای محلی و از رجيسترهای‬
‫مشترک برای انتقال پارامترها استفاده ميشود‪.‬‬
‫به اين ترنيب هر تابع ميتواند از ‪ 32‬رحيستر استفاده نمايد‬
‫مثال‬
Common to D and A
R15
R10
R73
Local to D
R64
R63
Common to D and C
R58
Proc. D
R57
R48
Local to C
R47
R42
Proc. C
Common to B and C
R41
R32
R9
Local to B
R31
R26
Proc.B
R10
Global Registers
Common to B and A
R25
R16
R15
R10
Local to A
Common to D and A
Proc.A
83
‫‪overlapped register windows‬‬
‫• نحوه محاسبه رجيسترهای قابل استفاده برای هر تابع به صورت زير‬
‫است‪.‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪= G‬تعداد رجيسترهای عمومی‬
‫‪= L‬تعداد رجيسترهای اختصاصی هر پنجره‬
‫‪= C‬تعداد رجيسترهای مشترک بين دو پنجره‬
‫‪= W‬تعداد پنجره ها‬
‫‪= L+2C+G‬اندازه پنجره‬
‫‪= (L+C)W+G‬تعداد کل رجيسترها در بانک رجيستری‬
‫‪84‬‬
‫مثالی از پردازنده‪Berekely RISC I: RISC‬‬
‫• يکی از اولين معماری های ‪ RISC‬است که در دانشگاه برکلی‬
‫مطرح شد‪.‬‬
‫• اين پردازنده ‪ 32‬بيتی‪:‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪85‬‬
‫دارای آدرس ‪ 32‬بيتی بوده و ميتواند از داده های‪ 8‬و‪16‬و ‪32‬بيتی استفاده‬
‫نمايد‪.‬‬
‫سه مد آدرس دهی دارد ‪:‬رجيستری‪ ،‬بالدرنگ و نسبی‬
‫يک بانک رجيستری ‪ 138‬تائی شامل ‪ 10‬رجيستر عمومی و ‪ 8‬پنجره ‪32‬‬
‫رجيستری دارد‪.‬‬
‫‪31‬دستورالعمل دارد‬
Brekely RISC I ‫فرمت دستورات‬
31
24 23
Opcode
19 18
14 13
Rs
Rd
0
12
5 4
Not Used
0
S2
Register mode: S2=register
31
24 23
Opcode
19 18
Rs
Rd
14 13
12
0
S2
1
Register Immediate mode: S2=operand
31
24 23
19 18
Opcode COND
0
Y
PC relative Mode
86