فصل دوم
معماری مجموعه دستورالعملها

مراحل اجرای یک دستورالعمل

واکشی دستورالعمل: برداشت دستورالعمل بعدی از حافظه

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

  چه عملی باید توسط دستورالعمل انجام گیرد (به عنوان مثال جمع)

  چه عملوندهایی مورد نیازند، و نتایج باید کجا قرار گیرند.

واکشی عملوندها: عملوندها برداشت می شوند.

اجرا: اجرای عملیات بر روی عملوندها

بازنویسی نتیجه: نوشتن نتیجه در محل مخصوص

دستورالعمل بعدی: تعیین اینکه دستورالعمل بعدی از کجا گرفته شود.

 

چه چیزی در یک ISA(معماری مجموعه دستورالعمل) مشخص می شود؟

کدبرداری از دستورالعمل: اعمال و عملوندها چگونه تعیین می گردند؟

واکشی عملوندها: عملوندها ممکن است کجا باشند؟ چه تعداد؟

اجرا: چه اعمالی می تواند انجام گیرد؟ چه نوع داده و چه اندازه هایی؟

بازنویسی نتایج: نتایج کجا نوشته می شوند؟ چه تعداد؟

دستورالعمل بعدی: دستورالعمل بعدی را چگونه می توان انتخاب نمود؟

 

یک ISA ساده:حافظه به حافظه

چه عملیاتی می تواند اجرا شود؟ عملیات پایه ریاضی (برای این لحظه)

چه نوع داده و چه اندازه ای؟ نوع داده صحیح 32 بیتی (integer 32)

عملوندها و نتایج کجا می توانند قرار گیرند؟ حافظه

چه تعداد عملوند و نتیجه؟ 2 عملوند، 1 نتیجه

اعمال و عملوندها چگونه مشخص می شوند؟

OP DEST,SRC1,SRC2  عمل مقصد,منبع1,منبع2

چگونه می توانیم دستورالعمل بعدی را انتخاب کنیم؟ بعدی به ترتیب

 

مدل حافظه

حافظه را به عنوان یک آرایه بزرگ از n عدد صحیح در نظر بگیرید، که بوسیله اندیس قابل دستیابی است.(حافظه با دستیابی تصادفی موسوم به ram)

به عنوان نمونه ، M[1] شامل مقدار 3 است. ما می توانیم در این مکانها نوشتن و خواندن را انجام دهیم. این مکانها صرفا در دسترس ماست. تمام مکانهای “مجرد” (از قبیل متغیرها در C) باید مکانهایی را در M تعیین کنند.

 

Address    Contents

14

13

99

.

.

.

0

 

0

 

1

 

2

.

.

.

N - 1

 


ترجمه کد ساده

 کد C مفروض

 

  A = B + C;

 

ما می توانیم تصمیم بگیریم که متغیر A مکان 100 ، B مکان 48 و C مکان 76 را

 

 اشغال می کند. کد بالا را به معادل کد اسمبلی آن تبدیل می کنیم:

 

 ADD M[100], M[48], M[76]

 

چگونه می توانیم عبارت زیر را تبدیل کنیم  

 A = (B + C) * (D + E);

 

استفاده از یک مکان موقتی

فرض کنید ما A را در 100، B را در 48 ، C را در 76، D را در 20 و E را

 در32 قرار می دهیم.

 

 اکنون یک مکان بدون استفاده را انتخاب می کنیم (مثلا 84)

 

 

 ADD M[100], M[48], M[76] # A = B + C

 ADD M[84], M[20], M[32] # temp = D + E

 MUL M[100], M[100], M[84] # A = A * temp

 

 

مشکلات در معماری حافظه به حافظه

حافظه اصلی خیلی کندتر از مدارات محاسباتی است

 - این مطلب از سال 1950 تا 2003 درست است!

خانه های زیادی برای مشخص نمودن آدرسهای حافظه گرفته می شوند.

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

 

به خاطر داشته باشید: بخشهای اشتراکی را سریعتر نمائید!

راه حل: نتایج میانی یا موقتی را در حافظه های سریع و نزدیک به واحد محاسبه ذخیره نمائید.

 

ماشینهای مبتنی بر انباشتگر(Accumulator)

یک ماشین انباشتگر، یک بافر پرسرعت واحد (مانند یک مجموعه از D latchها یا فلیپ فلاپها ، هر کدام برای یک بیت داده) را نزدیک واحد محاسبه منطق نگهداری می کند.

در ساده ترین حالت، فقط یک عملوند می تواند مشخص گردد; انباشتگر به صورت مجازی به مفهوم “OP Operand” می باشد یعنی:

   acc. = acc. OP operand

 

 Example:

 LOAD M[48]   # Load B into acc.

 ADD M[76]  # Add C to acc. (now has B+C)

 STORE M[100] # Write acc. To A

 

 LOAD M[20]   # Load D into acc.

بارگذاری D در انباشتگر

 ADD M[32] # Add E to acc. (now has D+E)

جمع E با انباشتگر.(اکنون داریم D+E)

 STORE M[100] # Write acc. To A

نوشتن محتوای انباشتگر در A.

 LOAD M[48]  # Load B into acc.

بارگذاری Bدر انباشتگر.

 ADD M[76]  # Add C to acc. (now has B+C)

جمع نمودن Cبا انباشتگر.(اکنون داریم B+C)

 MUL M[100] # Multiply A to acc.

ضرب کردن A در انباشتگر.

 STORE M[100] # Write (B+C) * (D+E) to A

نوشتن نتیجه در A

 

ضعف ماشینهای مبتنی بر انباشتگر

هنوز نیازمند ذخیره سازی بسیاری مقادیر موقتی و میانی در حافظه می باشیم

 

در واقع انباشتگر فقط برای یک ترتیب از محاسبات که در آن نتیجه یکی، ورودی برای بعدی است، مفید می باشد.

 

ماشینهای مبتنی بر انباشتگر هنوز در کامپیوترهای اولیه معمول بودند

یک طراحی ساده، و بنابراین محبوب ، مخصوص برای

 - کامپیوترهای اولیه

 - میکروپروسسرهای اولیه (4004 ، 8008)

 - مدلهای Low-end (ارزان)

پیشنهادات برای ماشینهای مبتنی بر انباشتگر

اگر منابع سخت افزاری بیشتری در دسترس است، مکانهای ذخیره سازی سریع را در کنار انباشتگر قرار دهید:

ماشینهای مبتنی بر پشته

ماشینهای مبتنی بر ثبات

 - خاص منظوره

 - عام منظوره

 

ماشینهای مبتنی بر پشته

ایده: یک ستون از مکانهای ذخیره سازی سریع دارای یک بالا(top) و یک پایین (bottom)

یک دستورالعمل فقط از مقدار بالای پشته(top) قابلیت برداشت دارد، یا شاید دو یا سه مقدار به عنوان بالای پشته در نظر گرفته شوند.

ما می توانیم مقادیر جدید را در بالای پشته قرار دهیم (“push”) یا از بالای پشته برداریم (“pop”) اما فقط همین. ما نمی توانیم به مکانهایی در زیر پشته دسترسی داشته باشیم مگر اینکه هر چیز بالای آن را خارج کنیم.

  

Address Contents

14

3

99

.

.

.

0

Top

 

2nd from top

 

3rd from top

.

.

.


bottom


 

 

معماری مجموعه دستورالعمل ماشینهای مبتنی بر پشته

اعمال اصلی شامل:

بارگذاری: برداشت مقدار از حافظه و قرار دادن آن بر روی پشته

 

ذخیره سازی: برداشت مقدار از پشته و ذخیره آن در حافظه

 

حسابی: خارج کردن یک یا دو مقدار از پشته؛ قرار دادن نتیجه روی پشته

 

دونسخه ای (Dup): گرفتن مقدار از بالای پشته بدون حذف آن؛ قرار دادن یک کپی جدید از آن در روی پشته (چرا این عمل کاربردی است؟)

 

 

ماشین مبتنی بر پشته که  A=(B+C)*(D+E) را انجام می دهد

Image and video hosting by TinyPic

 

ماشین مبتنی بر پشته

Image and video hosting by TinyPic

کاربرد ماشینهای مبتنی برپشته

بسیاری از کامپیوترهای اولیه

واحد ممیز شناور در 8086 (تقریبا)

ماشین مجازی جاوا

 

ماشینهای مبتنی بر ثبات

ایده:به کار بردن مکانهای ذخیره سازی زیاد(”ثباتها“)نزدیک انباشتگر

 ثبات ها نام / شماره های مشخصی دارند که می توانند به جای حافظه استفاده می شوند

دستیابی نسبت به حافظه اصلی

  خیلی سریعتر است

(1-2 CPU cycles vs. ~ 100 CPU cycles on PC)_ 

 

ثبات ها نسبت به مکان های حافظه خیلی نزدیک ترند

MIPS_  32 تا ثبات 32 بیتی دارد

_ثبات های کمتر آدرس های کوچکتر وتعداد بیتهای کمتر برای نام گذاری آنها

_منابع استفاده کمتر است و باید با دقت ار آنها استفاده شود!

 

ثباتهای عام منظوره_خاص منظوره

یک ثبات خاص_ منظوره برای اهداف مشخص استفاده می شود و ممکن است عملیاتی را که استفاده می شود را محدودکند

طراحی آسانتر سخت افزار: ثبات را در جایی که دقیقا نیازاست قرار بده

به منظور استفاده موثر برای کامپایلر خیلی سخت تر است.

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

 

ثبات های خاص منظوره The z_80 cpu 

هفت تا ثبات 8 بیتی: (می توانند جفت شوند A,B,C,D,E,H,LBC,DE,HL).

سه تا ثبات 16 بیتی:62 PC (شمارنده برنامه).

جمع ,تفریق, شیفت تنها با A می تواند انجام شود (شمارنده 8 بیتی ).

افزایش و کاهش می تواند با تمام ثبات ها وجفتهای ثبات انجام شود .

می توانند از حافظه  آدرس (HL)را واکشی کنند و در هر8بیت ثبات قرار دهند.

یک واکشی از آدرس(BC)یا(DE)تنها می تواند به Aبرود.

واکشی ها از (BC),(HL)و (IX) تعداد چرخه های متفاوتی می گیرد

چه کسی می خواهد برای این یک کامپایلر بنویسد؟

 

 

ثبات عام منظوره ماشین های (GPR)

 MIPS(وپردازشگرهای مشابه)32تا ثبات عمومی دارند (GPRs)هر32بیتlongهستند.همه می توانند نوشته یا خوانده شوند به جز ثبات صفر که همیشه صفراست ونمی تواند تغییر کند.زمان دستیابی به ثبات ثابت است.

 

Address Contents

0

3

99

.

.

.

14

$0

 

$1

 

$2

 

 

 

$31


ماشین GPR A=(B+C)*(D+E) راانجام می دهد

ADD  $1 M[48], M[76] #R1 = B + C

 

ADD $2 M[20], M[32] #R2 = D + E

 

MUL  M[100], $1, $2 #A = R1 * R2

 

اندازه های داده های متفاوت

چطورباید با اندازه های داده های متفاوت رفتارکنیم؟

انتخاب یک اندازه برای یک واحد ذخیره شده در یک آدرس تنها

 

ذخیره کردن داده بزرگ در یک مجموعه از مکانهای همجوارحافظه

ذخیره کردن داده کوچک در یک مکان:

use shift & mask ops

امروزه تقریبا همه ماشینها(شاملMIPS)دارای آدرس دهی بایتی

 “Byte_Adressable”هستند هر مکان آدرس دهی ،  در حافظه 8بیتی نگهداری می شود.

 

حافظهMIPS

روی یک ماشین قابل آدرس دهی بایتی ازقبیلMIPS اگرما بگوییم یک کلمه (32بیت) درآدرس80 ذخیره شده به این معنااست که مکانهای 80تا83را اشغال کرده.(کلمه بعدی از84 شروع می شود).

 

به طور نرمال بارگذاری وذخیره چندین بیت باید ”تنظیم“ شود.آدرس nبایتی بارگذاری یا ذخیره باید مضربی ازnباشد.برای نمونه نیم کلمه تنها در آدرسهای زوج ذخیره میشود.

 

MIPS اجازه بارگذاری شدن و ذخیره شدن برای استفاده مخصوص دستورالعمل ها را نمی دهند اما آنها ممکن است کندترشوند(بیشتر پردازشگرها این را برای همیشه اجازه نمی دهند!).

 

Byte-Order (“Endianness”)

برای یک داده چند بایتی کدام قسمت به کدام بایت می رود؟

اگر$1محتوی1000000(F4240H )و ما آن را در آدرس 80 ذخیره کنیم :

در یک ماشین “Big Endian” “Big End” به آدرس 80 می رود

در یک ماشین “Little Endian” از سوی دیگر است.

Image and video hosting by TinyPic

 

Big-Endian vs. Little-Endian

ماشینهای Big Endian:MIPS,SPARC,68000

ماشینهای :Little Endianبیشتر پردازشگر های intel,Alpha,Vax

سازگاری مشکلات انتقال چندین بایت داده بین ماشینهای Big Endian,Little Endian