پردازنده MIPS

طاهره واحدی

71 صفحه
6 بازدید
20 بهمن 1404

برچسب‌ها

صفحه 1:
پردازنده 0166) مقدمه دستورات & کتاب نوحجوورا 6 مححصسهط)

صفحه 2:
42 ۶ 210) یکیاز اولیپردازندهای۲۵0) لستکه بصورت تجاری‌عرضه و موفقشده لست‌در سال966) توسط تیمی دردانشگام لستانفورد طرلحی‌شدم لستب ۶ پردازنده ای ساده ولی در عین حال قوی است. * در تجهیزات مختلفی بصورت رای استفاده شده است: * ‏نو‎ routers Pro Otsor © Cave warkives the he Oriteuds OF ond Grey Phystaica C 2 0 workgroup printers are \ ۱ 0 0

صفحه 3:
© تعداد زياد رجیسترهای همه منظوره © مجموعه کوچک دستورات سم 199 :02168698 * مس ‎O1IPGOF: CSO‏ © @ اندازه دستورات ثابت ولی فرمت آنها متغیر است ‎٩‏ دسترسی به حافظه محدود به دستورات ,وللج است ‎٩‏ مد های آدرس دهی محدود است.

صفحه 4:
رجیسترها © اين پردازنده دارای 08 رجیستر 0 بیتی است: ‎RO .. ROG ®‏ © رجیستر (0) بصورت سخت افزاری با مقدار صفر پر شده است یعنی هميشه برابر با صفر است © رجیستر 0) برای کار اسمبلر رزرو شده است ‎٩‏ از بقیه رجیستر ها میشود در برنامه ها استفاده نمود. © عملوند ها هميشه باید در یکی از رجیستر ها قرار داشته باشند. 2 ۱ : 25

صفحه 5:
* وقتی تعداد رجیسترها افزایش مییابد آنها بصورت رجیستر فایل ساخته میشوند: 4 Ddata 5 B addres 32 x 32 Register File Adata___Bdata | write 5 Ap address ‎1A address‏ مش ‎ ‎ ‎AP Orite = (1, thea OD data is stored toto D address ‎© You roe nedd Proc tue neyisters ‏اه‎ mare, by supplyiey the widdress und (D oddress taputs. Mke cuguts appear os (Phat wed data. ‎© Revsters we clocked, sequecid devires. © Oe va reed Proc the revister Pie of copy tive. © Date is writes vely oo the postive edye oP te clock. ‎ ‎ ‎

صفحه 6:
* اسایر رجیستر ها © علاوه بر ر جیسترهای فوق 710*09() دارای رجیسترهای دیگری نیز میباشد: ‎revster ued Grotus revster‏ ( امه ی ) 0 ۰ ‎potat neqisters‏ جلدم ۰

صفحه 7:
م انامگذاری رجیسترها برای سهولت استفاده در برای اینکه برنامه نویسی اسعبلی راحت تر باشد به هر رجیستر اسمی

صفحه 8:
Hine avg. ما 7% 80% 0 0 20% مقايسه رجوع به داده ها بر اساس اندازه آنا داده های حمایت شده ‎Integer‏ * ‎s-bitchar‏ * ‎16-bit half-word‏ * ‎32-bit word‏ * ‎64-bit double-word‏ * ‎Floating point‏ * ‎32-bit singleprecision‏ * ‎64-bit singleprecision‏ * ‎pairedsingle precision‏ * 04 4 151:1 *

صفحه 9:
حافظه 2160) 2 ۷ 8 0 0 Operctiocs: ao, | memory 3 GR 84.) ADRS ۰. OUT 0 x |Oouw = ae OD _| Read selevted ‏له‎ ‎"| wr ‏له لاه[‎ © 01060 دارلی26 خط آدرس‌لست ی عنی‌یترلند تا 296 محل‌حافظه را آدرسدهئنمايد. در هر محل‌حافظه ی کب ایندادم قرار میگیرند. ‎Dhis results itt OF? x O ROO, whick would be ۰ 08‏ و oP wewory.

صفحه 10:
33 اسازمان حافظه * هر كلمه داراى *6 بايت ميباشد 32 bits of data] Reysters kok OS bits oF deta 32 bits of datal 32 bits of datal 32 bits of datal 12 ۰ °° bites Wik bye ukesses Prow 0 ‏و‎ 40 © 2° ‏لت روا رن لین‎ 0, ۵, ... 9

صفحه 11:

صفحه 12:
سازمان حافظه : بمب( * توجه داشته باشید که آدرس حافظه بر مبنای بایت ایجاد ميشود. از اینرو یک کلمه 60 بیتی 8 محل حافظه را اشغال خواهد نمود. Address 9 1 2 3 4 5 6 7 8 9 38 8-bit data سس مس سس ‎Word 1 Word 2 Word 3‏ © در معماری 210<689) کلمات باید بصورت !ماه در حافظه قرار گیرند. یعنی یک کلمه 00 بيتى بابد در وى محلى از حافظة قران كيز دكة ادر" آن مضربی از 6 باشد. ‎od 16 oe valid word addresses.‏ 8 ,€ ,0 © ‎S, 8, P, 9, 0 und (0 we wrudd word ukbesses.‏ ,9 ,4,8 © © در صورتی که به اشتباه قصد دسترسی به بک محل حافظه ای داشته باشد یک خطای ‎bus error‏ €5 خواهد داد. ۰ اين محدوديت براى برنامه نويسى با زبان سطح بالا تائير قايل ملاحظه اى ندارد اما به پردازنده کمک میکند تا اندکی سریعتر عمل

صفحه 13:
* ال © بايد هنكام كار با آرايه ها مراقب بود که اگر آرایه ای برای مثال از محل 000000 حافظه شرع شود» عضو اول آن در آدرس 0000000 و عضو دوم آن در آدرس 000006۶ خواهد بود و نه در آدرس 600000 © برای مثال اگر رجیستر 8( دارای مقدار 0006000 باشد: ‎lw 510, 0($a0)‏ به اولین عضو اشاره میکند در حالیکه ‎lw $t0,8($a0)‏ به سومین عضو آرایه که در آدرس 600060 است دسترسی پیدا خواهد نمود. رس سترسی پیدا خواهد نموا

صفحه 14:
ترتیب بایت های یک کلمه در حافظه ‎٩‏ دو روش برای مشخص کردن ترتیب بایتها در حافظه وجود دارد: مزلم رز »© ‎address) is the address oP the‏ و وی تهیه) ‎word address‏ ‎wwost siqeiPiccat byte‏ :كلمج سانانا © ‎byte‏ مامت ها ‎word address is the address oP the‏ ‎ ‎ ‎BigEndianByte Bro Bra Br2 ‏قب‎ ‎ ‎ ‎ ‎

صفحه 15:
memory address B=2001is the base addressin this example در معماری 6/1۳09 میتوان پردازنده را برای هر یک از این دو روش تنظیم کرد.

صفحه 16:
35° اتواع اصلی دستورالعملهای 0108) ‎Orikwetic‏ و ریا © ادنصةا) بحتصوات) © ‏و وه رس( و ‎bowd & Giore‏ © ‎©» Control Pow ۰ ‏یل‎ ‎۰ ‏مین‎ Orcas © Cdl & Reta

صفحه 17:
* دستورات محاسباتی ‎٩‏ چهار دسته دستورات محاسباتی وجود دارند: ‎Odd‏ ° ‎Gubtrant‏ ° رباصتك () »© ‎Divide‏ ©

صفحه 18:
:: ادستورات محاسباتی © تمامی دستورت (),9) نظیر دستورات جمع و ضرب دارای 9 عملوند هستند: یکی برای مقصد و دو تای دیگر برای مبدا داده ها. هر سه عملوند ها باید یکی از رجیستر های ‎MIPS‏ ‏باشند. تمامی محاسبات 00 بیتی هستند. 7 + 8 < ۸ :علس 0 ه زم دع دع 2 ,551 ,950 300 :عل ‎O1PG‏ ‏0 ,555 ,554 طلاد © Ousiqaed arith! uddu/subu ‏(اسستی سلاسی)‎ تم مرا باامسو9) اساي ل ديت يك سيد 2

صفحه 19:
‎٩‏ اصول معماری: ‏۶ تمامی محاسبات بر روی داده های رجیسترها انجام میشود. یعنی نمیتوان عددی را که در حافظه ذخیره شده است با یک رجیستر جمع کرد. برای اینکار ابتدا باید محتوی حافظه به رجیستر به منتقل شده و عملیات بر روی داده های رجیستر ها انجام شود. ‎٩‏ ترتیب اپراندها هميشه ثابت است: اول مقصد نوشته ميشود.

صفحه 20:
نوشتن توضیحات در برنامه نویسی به زبان *7 اسمپلی 216۳8) وی 0۱۵ ۳ لس ‎Wask (#) is‏ © © ‏بمناو‎ Pro kash work to eed oP foe is o poset ord wil be igre

صفحه 21:
دستورات محاسباتی تسه ستلسسه1_ بطق یکعدد 8 بيتويا علاستو يا بدوزعلاستوا با يكواز رجيستر هاى©) بيتىجمع / تفريقمينمايد. ی وه ‎Oroientos Reg = Gource‏ تسم 9-0 a $0, $0, # SO = SO- Orperd/ Deoekgeed Brito: ack, odchs 1 kaxnnie Porcina(Porn): ‏فر‎ erry cera eat tere meee eg ‏سسساسة مالسا‎ 20

صفحه 22:
DIPS ‏تبدیل برنامه ) به اسمبلی‎ ٩ ‏زع - ل +ع + و9 < و‎ © )8 ‏متسه طوزلیت و عادص‎ 200 5۵, 551, 552 # temp = b+ Cc add $t0, $t0, $s3 # temp = temp + d sub $s0, $t0, $54 # a = temp - e ® Optics: O singe tae oP O way bredk up isto severd foes oP OIPG.

صفحه 23:
© ‏رن ول زور‎ do this? f= (9 +h) - )1 + (7 ® Ose itterwediute tewporury reqister # temp = g + hadd $t0,$s1,$s2 # temp = i + jadd $t1,$s3,$s4 # f=(gth)-(i+j)sub $s0,$t0,$t1

صفحه 24:
دستورات منطقی 60108 ‏برخی ازدستورات منطقی موجود در‎ * AND © bruise BOO betwers ‏حور‎ ‎* and $t1, $s0, $s1 OR © bruise OR betwers reqisters ۶ or $t1, $50, $s1 NOR © Outer DOR between reqisters * ‏ممم‎ 561, 550, 1 * ۱0۲ ‏م5‎ 5۲0, 0 # $t1 = NOT($tO) ‏لت للجم‎ © andi wed ori

صفحه 25:
#2 دستورات دسترسی به حافظه * داده هاارا بین خافظه و رجیسترها منتقل میکنند. دازای 2 اپراند میباشند: ‎Lowd/Gtore‏ تمس )را تم( )مس مها لاو مهب _ — ‎Ss‏ ‎wanvber | | Dawe oP revister to yet bose‏ © مس له * آدرس داده در حافظه بصورت زیر محاسبه میشود ‎Ocktress = Gouwve Ouse Oddress + OPPset‏ موی و ‎ ‎

صفحه 26:
lw $s0, 4($s3) oe $S3 kus the vche 100, this wil copy the word ot wewory lovato 104 to the revister $s0. $s® <- Memory[104]

صفحه 27:
Gtore Dord : ‏امثال‎ sw $s0, 4($s3) AP $83 kas the vote 100, this wil copy the word ict reyister $80 to wewwory bovwtivs 104. Memory[104] <- $s0

صفحه 28:
* اخواندن از حافظه lw R6, 0)85( #RO <= weo[OxI] ‎Counter‏ ی یی دج 5 0 ‎0x00000004 4 bytes wide ‎0x00) addi RS RO. 0x14 ‎03:04 1۷ R6,R5 ‏را ‎ ‎ ‎ ‎0x14} 0x12345678 ‎Memory Address Register ‎ ‎ ‎ ‎ ‎Trom memory ‎ ‎ ‎ ‎ ‎(0x00000014. ‏لوا‎ 0x12345678 ‎

صفحه 29:
۰ ‏لسن‎ OO] =k+ OO]; ussuve kia $50 ued bose address of the array in $9) © O1PCG ote: bw $M, OC($s9) add $0, $50, $O ‏رد‎ 50, 55525 اين نحوه أدرس دهى طراحى دستورالعمل ها را ساده كرده و به بياده سازى أرايه ها و استراكجرها كمك ميكند

صفحه 30:
دستورات دسترسی به حافظه Mnemoni 8 LB LBU LH LHU LW SB sw SH Instruction Load Byte Load Byte Unsigned Load Halfword Load Halfword Unsigned Load Word Store Byte Store Word Store Halfword

صفحه 31:
) ‏لو‎ ze ww ty; OPE vote: 50 دم ‎$O, w # put address oP w‏ مط by $50, O($@) # put conics oP w eto 0 ‎#putockbess oP y tots $0‏ | بررلمة ط ‎by $20, O(60) — # put codes oP p tio $51 udd $58, $50, $0 Hud +p, ‏و نح‎ 6 552 $C, z # ‏سول نم‎ oP zi $O ‎sw $0, OSC) # put conteuts oP $50 tio z ‎fod ockbess , koe brad word , sw store word‏ وا عصاطي جم و ‎bration i‏ موه با همطل ببس ‎Qt load ocktress (he) to‏ ‎O($@) cece op O bytes Proxo the address specPied by GD‏

صفحه 32:
انتقال بلادرنگ مقادیر 00 بیتی به رجیسترها © اینکار در دو مرحله با انتقال 46 بیت با ارزش و کم ارزش و ترکیب آنها صورت ۶ 19 بیت با ارزش با دستور علسس ‎upper‏ مدا منتقل ميشود. ‎lui $t0, 1019191010101010 _ ——-_ fated with zeros‏ * |0900000000000000( 1010101010101010 = Then must get the lower order bits right, i.e., ori $t0, $tO0, 1010101010101010 1010161010101018 0 ۳ 0080008880800000 ( 60 ori 1010101010101010 | 1010101010101010

صفحه 33:
این دستورات سیر اجرای برنامه را تغییر میدهند يعنى اينكه دستور بعدی که باید اجرا شود را ‎Bua cued,‏ انواع مختلف دستورات کنترلی ‎poodiiccd brooches‏ © امه لسن و اه لسن و

صفحه 34:
۶ ادستورات انشعاب ‎٩‏ دستورات انشعاب شرطی در ‎MIPG‏ عبارتند از: 06 510, 1, 1 960 510, 1, 1 © ECxavple: PF (FR) 2۱ 1 ,1 ,550 عمط ‎add 553, 550, 1‏ ‎Label: oe‏ © ote the reversed oP the coerdiica Poo equaliy t7 icequatity!

صفحه 35:
ات کنترلی © دستورات انشعاب غیرشرطی در 0/166) عبارتند از: [ 13661 ‏من اجه(‎ ‏ل‎ 580 “ueop reyster”. duc to the iestruniiod speviPied ia reqister 90 960 554, 555, 1 add $s3, $s4, $s5 j Lab2 h=i-j; Labl:sub $s3, $54, $s5 ‏میا‎

صفحه 36:
دستورات کنترلی © اغلب در کنار دو دستور فوق از دستوردیگری نیز استفاده میشود: ‎stood sti // set iP less thoo (vo! od w/o oe coco dict)‏ ا ۳ صمو ريو رموه ۰ وكا © > 80 © از اين دستور اده ميشود:

صفحه 37:
نحوه محاسبه آدرس در دستورات کنترلی bur SPSS Lobel Dent tetrurion is ot Lobel PSP ‏ع‎ 56 bey PSO Lobel ‏ع اما هط صصص 9د(‎ 54 - 86 1 op rs rt 16 bit address PC-rehaive addressing & © فرمت اين دستوراته از نوع ج41-10 است كه در أن أدرس بصورت يك مقدار 8 بيتى نوشته ميشود. اين مقدار بصورت يك افست نسبت به مقدار رجيستر (0©) نوشته ميشود.

صفحه 38:
£ نحوه محاسبه آدرس در دستورات کنترلی ‎ts ot Lobel‏ مصاصصعط! أن ‎ )(‏ اراتراز و ‎ ‎J op 26 bit address ‎ ‎ ‎seudodirent addressing & ‏های با ارزش 6<) استفاده میشود.‎ Cy 5) Lid 5 sis Gul 52 & 98 jusop address = ۶ Dost GigeiPiccat bits oP PC rouritecied wih CO-bit word address (or CO- bit ۳ ‏(علك-‎ ‎Oddress boundaries bP CGO OB Cor torger distraves? duep reyister JP required. ‎ ‎

صفحه 39:
۷ ٠ LOOP: mult $9, $19, $10 # R9 = R19*R10 lw $8, 1000($9) # R8 = @(R9+1000) bne $8, $21, EXIT add $19, $19, $20 #i= i+ j j ۲۴ 211 ‏ع‎ (0000000© مصقدعما نه لصحصام جز 0005)ر| ووصدوو )9‏ »© 8 ۵ 5 8 ع| و °

صفحه 40:
امتالی ازپیاده سازی ‎LOOP‏ O we: vu = 0: Por (=O; 1< ‏بم‎ t+) ane = ane +x; owe: Ovenne: x,y sod wee orem $oD 350 , ceed $98 rewpertvely. (Dil 80 Por 41 ed $40 ‏و ما‎ © - معد # مت سل ,$0 ‎wt‏ ‏0 ‏بسا ‏0 ,50,50 ۷ > لاس9 ,96 ‎tow So +‏ 0و9 و9 ,6و9 له +۷ 90 ,990,۹0 ‎i Loop Beds‏ مسا

صفحه 41:
اصدا زدن توابع و بازگشت ازآن * از این دستور برای صدا زدن برنامه فرعی استفاده میشود: :ادا ۵ مس انز ‎in‏ للم ‎RO ced juspps to‏ و ‎stores the retura address‏ انز 3 اين دستور آدرس بركشت را در رجيستر )9 قرار ميدهد و به آدرس ذكر شده دردستور انشعاب ميكند. © براى بازكشت از برنامه فرعى از دستور زير استفاده ميشود: ‎ir ReefRO‏

صفحه 42:
ذخیره رجیسترها در هنگام صدا زدن توابع تودرتو ‎Giles ©‏ محدودیت رجیسترها لازم است تا محتوی رجیسترهائی را که برای تابع مهم هستند قبل از صدا زدن تابع ذخیره نموده و بعد از بازگشت از تابع آنها را بازیابی نمود. ‏* رجیسترها در پشته ذخیره خواهند شد. برای اینکه برنامه ها مجبور نباشند تمامی رجیسترها را ذخیره نمایند قاعده زیر رعایت میشود: ‏۶ تابع صدا زننده رجیسترهای زیر را ذخیره و بازیابی میکند: ‏50-90۵09100 ‏۶ تابع صدا شونده رجیسترهای زیر را ذخیره و بازیابی میکند: 20-5 م9 ‎

صفحه 43:
دستورت شلف MIPS Shift Instructions >* Format: op code/dest reg/src reg/shift amount sll $t4, $t0, 5 #shift left logical 5 bits (multiply by 32) sra $t5, $t0, 2 #shift right arithmetic 2 bits (divide by 4), #sign extended srl $v0, $t0, 1 #shift right logical 1 bit. Sign bit is now 0 srlv $v0, $t0, $t1 #shift right logical, $t1 says how many bits Type of shift Left Right Logical sll sllv srl srlv Arithmetic (none: use sll) sra srav Rotate rol ror

صفحه 44:
: اخلاصه دستورات ۰ ۵ ‏را ری لا وت رجات‎ ‏امه جمجاطاجم جم جاعوجااتن د‎ * ‏ییا‎ Decry add $s1, $s2, $s3 $s1 = $s2 + $53 sub $51, $52, $s3 551 < 992 - 3 lw $s1, 100($s2) $s1 = Memory[$s2+100] sw $s1, 100($s2) Memory[$s2+100] = $s1

صفحه 45:
مثالی از یک برنامه 0 Explanation: index k: $5 base address of v: $4 address of v[k] is $4 + 4.$5

صفحه 46:
*: افرمت دستورات ‎٩‏ فرمت و طول دستورات کامپیوتر پایه مانو ثابت و یکسان بود. در حالت کلی: * اگر اندازه ‎aS‏ تولید شده مهم باشد از دستوراتی با فرمت متفاوت استفاده میشود * اما اگر کارائی ( سرعت) مهم باشد از دستوراتی با طول یکسان استفاده ميشود. ‎ ‎Out: ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 47:
افرمت دستورات ‎DIPG‏ © طول هر دستور ©© بيت است. © هر دستور به تعدادى [220) تقسيم ميشود. هر فيلد توضيحى در مورد دستور العمل ارائه ميدهد. © از آنجائيكه دستورات مختلف نيازمند ارائه توضيحات مختلفى هستند لذا در 0010208 سه نوع فرمت مختلف ( ولى با طول يكسان) براى دستورات در نظر كرفته شده است. وه ا من بدا * ‏مصحلا‎ 0 thay Decal Shore oper ee 001 م مر ‎dene ol of he ceroperde spam‏ حدس ماص ‎shane‏ سل 0 للها وفص وهر

صفحه 48:
افرمت دستورات ‎O1IPG‏ ‎٩‏ نوع فرمت مختلف بصورت زير هستند: ‎ ‎16 ‎ ‎ ‎ ‎ ‎0 5 ‏ع‎ (0 Note the regularity of instruction encoding. 5 6 Thisisimportant for ‘R-Type rd }hamt} func implementing an efficient pipelinedCPU. ‎ ‎ ‎ ‎26 ‎ ‎ ‎ ‎J-Type| Offset addedtoPC ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 49:
فیلد های مختلف دستورالعمل ها ۱ اوه ‎reqster source‏ پر یر و لمجت جمدم ور لو بر و ‎re ysier desiivciod pperond‏ لس و ‎© shot shift aout ‎©» ‏بورع‎ Pucptivg (select ype oP BLO operation) © ah = 8 ۶ vb = OF

صفحه 50:
» ‏:طامصصع‎ 300 580, 551, 2 © reysters hue unvbers, $t0=8, 551-17, 2-8 ) میسیب و 000000 10001 10010 01000 00000 100000 op rs rt ۳۵0 $hamt Funct

صفحه 51:
R-Typpet| sien opcode | rs | rt | rd samy funct * این ستورات دارای طسب بوده و برای عملیات ()رال) استفاده میشوند. © عمل مورد نظر توسط فیلد مشخ سود 98 :للم ‎wb: OF‏

صفحه 52:
فرمت دستور ‎BOO‏ | جيرا © سمه جيرا © سماد جيرا © | جيرا © سام جيرا © سإ | | op | rs | rt | rd [shame] funct | ۱۳11111111111111 111111 ۱ 80 bis | این فرمت برای تعداد زیادی دستور غیر از ۸00 نیز استفاده میشود. که همه اين نوع دستورات 1-706 نامیده میشوند.

صفحه 53:
؟؟ اندکنیگ دستور ° (or add: * opie ©,, (000000) © funct 90, (100000) ۶ ‏تس ی‎ © $s0500,, (10000), $81 dr, ... * $tO50,, (01000), $t1 ‏,و۹‎ 300 550, 51, 0 000000 10001 01000 10000 00000 0 | op | rs | rt | rd [shame] funct | بصورت 11,027 مقدار اين دستور برابر است با:00 ©6600 ©0098

صفحه 54:
دستورات م۳٩‏ 55 16 rs | rt immediate I-Type Format Similarity in opcode for Cw & sw simplifies hardware Koad (R-T ype etructions opcode ۱ ۰ ‏سا‎ 06 )00000( © aw: PO (aad) © pporde vole dPPercutaes 4 rs? base reqster nt © deviated reioter Por ky source reypter Por store expedite: oPPset Pro base ۰ ‏تومیر‎ 2 (C4)

صفحه 55:
:: افرمت دستور/),ا (50) لین وی )باه ییا سام جيرا © لت ها 9 ۴ | op [rs | rt | address [ ۱1۲1111111111111 1111111111111111 ۱ 90 bite | ۲5 is the base register rt is the destination of a load (source of a store) address isa signed integer

صفحه 56:
lw $s0, 24($t1) 100011 01001 10009 0 | op | rs | rt | address | sw $s0, 24($t1) 101011 01001 10000 0000000000011000 | op [rs | rt | address [

صفحه 57:
فرمت دستورات با آدرس دهی بلادرنگ 6 7 16 L-type Format | opcode | rs | rt immediate ۶ برای دستورات (),ا9) که نیاز به یک اپراند ثابت دارند استفاده میشود. (,..< 02 ۶ همچنین برای لمح کردن مقادیر ثابت از حافظه بکار میرود. © مقادیر ثابت بصورت یک عدد ©0 بیتی کد ميشوند. لذا در رنج -80 ‎fo (OPM)‏ خواهند بود. ۰ مثل: ‎at RF, RO, PO‏ ‎sh RA, RE, SO: sete Regl[RAJ=A F Req[RO]<SO ebe Rey[RA=O‏

صفحه 58:
دستورات حول 6 26 opcode Offset addedtoPC+s J-Type Format © دستورات پرش غیرشرطی به فرم رل کد ميشوند. © ايكد دستور ل برابر با 0 و اپکد دستور ال برابر با 5 می باشد. © مقدار جابجائی نسبت به ۳60+6۴) محاسبه میشود.

صفحه 59:
امد های آدرس دهی ‎Dips‏ سل م + تج سس - مهد ۰ © (O-b1 Pell Por he covet سر ]مه ۵۵ ۵ و ۰ ۱ © by RE, (DORA) Freep[RFFRee[RE]+Oew[Ree[RY+I0O] © (O-bie Por deopkeewect بت سای عونت تمسق ما وود بل ی و ‎Hrepl[RE]-Rep[RE}Oew[Rew[RM]‏ سد » رل ی سوق ی اس( يسم تالت سس و ‎bv RE, OPOO(RO)‏ ©

صفحه 60:

صفحه 61:
ها وه نب ولی‌جو۳) دستورلتک اذب ه ‎thot yiue the tusiod oP‏ بجوم موه ولمم ۱۳۵() ‎٠‏ ‏جصوم هه وه لد لاو ره و نها راو ماو وه و 5 ‏ا ا ا ل ل‎ eck you eee ah ‏وتو جوم وه لو‎ li 520, 2000 # ۱۵۵0 immediate 2000 into $a0 move $al, $t0 # Copy $tO into $al © Dkey we probubly clearer tho their correspond OIPG iestructions: add$a0, $0, 2000 # Initialize $a0 to 2000 200531, 580, 60 # Copy $t0 into 1

صفحه 62:
Grack § aay پشته محلی از حافظه اصلی است که جهت ذخیره داده ها استفاده میشود. © موارد استفاده از پشته ۴ ذخیره متغیرهای یک برنامه * ذخیره محتوی سایر رجیسترها وقتی که یک برنامه فرعی صدا زده میشود ۴ کمک به ترجمه عملیات محاسباتی با روش !3۳ ۴ رجیستر ‎٩‏ محل آخرین داده ذخیره شده در پشته را مشخص میکند * عملیات زیر روی پشته تعریف میشوند: ‎Poe‏ بیج ‎ORDO[GE]‏ موه ‎O[GE]GOR GeICE+‏

صفحه 63:
‎es‏ پشته و برنامه های برگشت پذیر ‏* استفاده از پشته باعث میشود تا امکان پیاده سازی برنامه های برگشت پذیر فراهم گردد. ‏© با استفاده از پشته میتوان برای هر نسخه از تابع صدا زده شده حافظه جداگانه ای در نظر گرفت ‎٩‏ آرگومانها و متغیرهای محلی را میتوان در پشته ذخیره نمود. ‎٩‏ آدرس دهی متغیرهای محلی و آرگومانها نسبت به موقعیت پشته انجام میشود. ‏© بازگشت از توابع عکس حالتی است که صدا زده شده اند ‎

صفحه 64:
»در 0010008 پشته از آدرسهای بالا به سمت آدرسهای پائین رشد میکند. ‎٩‏ هنگام ام کردن داده در پشته بايد مقدار رجیستر 8مو را کاهش داد. High address Stack pointer jgnack 29 (r29) 2 1 ۳ Ttem 1

صفحه 65:
*: استفاده از ‎cols stacks‏ صدا زدن تابع فرعی © قبل از صدا زدن تابع مقادیر رجیسترها در پشته ذخیره میشود ۰ تابع با استفاده ازدستور صدا زده میشود: ‎itl address‏ * در پایان اجرای تابع» برای بازگشت به برنامه اصلی از دستور ‎revister)‏ 0 لغ استفاده میشود. © بعد از بازگشت از تابع مقادیر رجیسترها از پشته خارج میشوند.

صفحه 66:
مثالی از استفاده از پشته Gave $20 urd 0 addi $sp, $sp,8_ tow address high odes Lob Sop

صفحه 67:
مثالی ازپیاده سازی تابع int func(int g, int h, int i, int j) {int f; f=(g+h)-Cit+jd; return ( f } // gyhyi, func = addi $sp, $sp, -12 make room in stack for 3 words sw 9+1, 8($sp) save the regs we want to use sw $t®, 4($sp) sw $50, 0($sp) - $a0,$a1,$a2,$a3, f in $s0 add $t0, $a0, $al #90 - ‏و‎ + 300 561, 582, 3 #4511 - 1 + ‏ژ‎ ‏او‎ 550, 52۵, 1 #$s0 has the result add $v0, $50, $zero —#return reg $v0 has f lw $s0, @($sp) # restore $s0 lw $t0, 4($sp) ۰ # ۳۵۵۵۵۲۵ 0 lw $t1, 8($sp) ۶ ۳۵5۵۵۲۵ 5+1 addi $sp, $sp, 12 # restore sp ir $ra * we ddecthar b reoire $0-SO ) ‏صلم‎ sar) © we db ery revere $o0-$0'? (nwt be preserve by ok)

صفحه 68:
نمایش لهستانی معکوس ‎Reverse Potsk Dvtaion (RPO)| 35°‏ ‎٩‏ روش معمولی نمایش عبارات ریاضی: +۳0 ‎٩‏ روش (0<) برای نمایش عبارات ریاضی: عملگرها قبل از عملوندها قرارمیگیرند. +*000* 606 »روش (0)520) براى نمايش عبارات رياضى: عملكرها بعد از عملوندها قرا ميكيرند 66*00 * +

صفحه 69:
*؟ |استفاده از پشته برای پیاده سازی ‎REO‏ در برخی ماشینهای حساب و کامپیوترها از ترکیب پشته و (۲0برای محاسیه عبارات ریاضی استفاده میکنند. _ ابتدا عبارت بصورت ‎)٩6۳/(‏ نوشته میشود ) معمولا اینکار توسط کامپایلر انجام میشود( ۳-99 هنگام محاسبه © با برخورد به عملوندها آنها را در پشته ر/۳)069) میکنیم * با برخورد با عملگرها » دو داده موجود در بالای پشته 6۳()<)شده و عمل مورد نظر بر روی آنها انجام و حاصل ‎POGAW Abby ya‏ میسود.

صفحه 70:
:: امثال برای محاسبه عبارت زیر یک کامپایلر ممکن است کد زیر را تولید نماید. ‎webto*d‏ عبارت معادل (66) بصورت زير خواهد بود: ‎+*bod‏ as در اینصورت محتوی پشته بصورت زير خواهد بود: d لت 2 2 b b bto*d POGHL ‏ی‎ POGHL d MOL POO poy OCT, POOL ‏تجوهم‎ ‎00۳ ‏ههه‎ ‎POPs b POGW b

صفحه 71:
© با مطالعه پردازنده کمکی 0010305 كزارشى در مورد محاسبات اعشاری و دستورات نسم رن مورد استفاده دراین پردازنده ارائه دهید.

MIPS پردازنده مقدمه دستورات Patterson & Henessi & کتاب Amirkabir University of Technology Computer Engineering & Information Technology Department مقدمه ‏ ‏ ‏ MIPSی55کیاز اولینپ555ردازندهای RISCا5ستک555ه 5ب555صورت 5ست در س55ا55ل 1984ت555وسط ت555یمی ت555جاریع5رضه 5و موفقش55ده 5ا . 5ست دردا5نشگاه 5ا5ستانف5ورد طرا5حیش55ده 5ا . پردازنده ای ساده ولی در عین حال قوی است. در تجهیزات مختلفی بصورت embeddedاستفاده شده است: ‏Various routers from Cisco ‏Game machines like the Nintendo 64 and Sony Playstation 2 ‏ ‏ ویژگیها تعداد زیاد رجیسترهای همه منظوره مجموعه کوچک دستورات ‏MIPS32: 168 instructions ‏MIPS64: 258 instructions اندازه دستورات ثابت ولی فرمت آنها متغیر است دسترسی به حافظه محدود به دستورات load/storeاست مد های آدرس دهی محدود است. ‏ ‏ رجیسترها ‏ این پردازنده دارای 32رجیستر 32بیتی است: ‏R0 .. R31  رجیستر R0بصورت سخت افزاری با مقدار صفر پر شده است یعنی همیشه برابر با صفر است رجیستر R1برای کار اسمبلر رزرو شده است از بقیه رجیستر ها میشود در برنامه ها استفاده نمود. عملوند ها همیشه باید در یکی از رجیستر ها قرار داشته باشند. 0 ‏r0 ‏r1 ° ° ° ‏r31 ‏PC ‏lo ‏hi رجیستر فایل 32 D data 5 وقتی تعداد رجیسترها افزایش مییابد آنها بصورت رجیستر فایل ساخته :میشوند Write D address 32  32 Register File 5 A address A data 32 B address 5 B data 32 .If Write = 1, then D data is stored into D address   You can read from two registers at once, by supplying the A address and B address inputs. The outputs appear as A data and B data. Registers are clocked, sequential devices.   We can read from the register file at any time. Data is written only on the positive edge of the clock. سایر رجیستر ها دارای رجیسترهایMIPS فوق5 عالوه بر ر جیسترهای :دیگری نیز میباشد  PC (program counter) register and Status register  Floating point registers نامگذاری رجیسترها برای سهولت استفاده در نرم افزار 0 zero constant 0 16 s0 callee saves 1 at . . . (callee must save) 2 v0 expression evaluation & 23 s7 3 v1 24 t8 4 a0 arguments 25 t9 5 a1 26 k0 reserved for OS kernel 6 a2 27 k1 7 a3 28 gp Pointer to global area 8 t0 temporary: caller saves 29 sp Stack pointer (callee can clobber) 30 fp frame pointer 31 ra Return Address (HW) ... 15 t7 reserved for assembler function results temporary (cont’d) برای اینکه برنامه نویسی اسمبلی راحت تر باشد به هر رجیستر اسمی داده شده است انواع داده حمایتشده های حمایت دادههای داده شده 0% • Integer • Integer Doubleword 69% • 8-bit char • 8-bit char 74% 16-bithalf-word half-word •• 16-bit Word 31% 32-bitword word •• 32-bit 64-bitdouble-word double-word •• 64-bit 19% Halfword Int Avg. Floatingpoint point •• Floating 0% 32-bitsingle singleprecision precision •• 32-bit FP Avg. 7% Byte 64-bitsingle singleprecision precision •• 64-bit 0% • paired single precision • paired single precision 0% 20% 40% 60% 80% IEEE754 754standard standard •• IEEE مقایسه رجوع به داده ها بر اساس اندازه آنها MIPS حافظه 32 8 232  8 memory ADRS DATA CS WR 8 OUT C S W R Operation 0 1 1 x 0 1 None Read selected address Write selected address 5افظه5 محلح232 ا555ند ت5نیمیتوا5ع55ست ی5 . خط آدرسا32ی5 داراMIPS  .رار میگیرند55 ق5ایتداده555کب55 ی5افظه5 در هر محلح.ماید55را آدرسدهین  This results in a 232 x 8 RAM, which would be 4 GB of memory. سازمان حافظه بایت میباشد4 هر کلمه دارای   0 32 bits of data 4 32 bits of data 8 32 bits of data 12 32 bits of data Registers hold 32 bits of data 232 bytes with byte addresses from 0 to 232-1 230 words with byte addresses 0, 4, 8, ... 232-4  Alignment : سازمان حافظه address 31 23 15 7 0 0 word is aligned; the others are not! this 4 8 12 16 20 24 Words are aligned سازمان حافظه Alignment : ‏ توجه داشته باشید که آدرس حافظه بر مبنای بایت ایجاد میشود .از اینرو یک کلمه 32 بیتی 4محل حافظه را اشغال خواهد نمود. 9 10 11 8 7 6 5 4 3 2 1 0 ‏Address 8-bit data ‏Word 3 ‏ ‏Word 2 ‏Word 1 در معماری MIPSکلمات باید بصورت alignedدر حافظه قرار گیرند .یعنی یک کلمه 32بیتی باید در یک محلی از حافظه قرار گیرد که آدرس آن مضربی از 4باشد. ‏ 0, 4, 8 and 12 are valid word addresses. ‏ 1, 2, 3, 5, 6, 7, 9, 10 and 11 are not valid word addresses. در صورتی که به اشتباه قصد دسترسی به بک محل حافظه unalignedداشته باشد یک خطای bus errorرخ خواهد داد. این محدودیت برای برنامه نویسی با زبان سطح باال تاثیر قابل مالحظه ای ندارد اما به پردازنده کمک میکند تا اندکی سریعتر عمل کند. آرایه ای از کلمات ‏ ‏ باید هنگام کار با آرایه ها مراقب بود که اگر آرایه ای برای مثال از محل 2000حافظه شرع شود ،عضو اول آن در آدرس 2000و عضو دوم آن در آدرس 2004خواهد بود و نه در آدرس 2001 برای مثال اگر رجیستر a0$دارای مقدار 2000باشد: )lw $t0, 0($a0 به اولین عضو اشاره میکند در حالیکه )lw $t0,8($a0 به سومین عضو آرایه که در آدرس 2008است دسترسی پیدا خواهد نمود. ترتیب بایت های یک کلمه در حافظه  :ا در حافظه وجود دارد5دو روش برای مشخص کردن ترتیب بایته Big endian:  word address (lowest numerical byte address) is the address of the most significant byte  Little endian: word address is the address of the least significant byte Big Endian Byte B+0 MSB B+3 B+1 B+2 B+2 B+1 issome somebase baseaddress address BBis B+3 LSB B+0 Little Endian Byte ترتیب بایت های یک کلمه در حافظه Little Endian Big Endian similar to writing English 12 34 56 78 200 201 202 203 memory address 78 56 34 12 B=200is isthe thebase baseaddress addressin inthis thisexample example B=200 . میتوان پردازنده را برای هر یک از این دو روش تنظیم کردMIPS در معماری MIPS انواع اصلی دستورالعملهای  Arithmetic    Memory access instructions   Integer Floating Point Load & Store Control flow    Jump Conditional Branch Call & Return دستورات محاسباتی چهار دسته دستورات محاسباتی وجود دارند: ‏ Add ‏ Subtract ‏ Multiply ‏ Divide دستورات محاسباتی نظیر دستورات جمع و ضرب دارایALU تمامی دستورت یکی برای مقصد و دو تای دیگر برای مبدا: عملوند هستند3 MIPS هر سه عملوند ها باید یکی از رجیستر های.داده ها . بیتی هستند32 تمامی محاسبات.باشند  C code: A = B + C; E = F - A; MIPS code: add $t0, $s1, $s2 sub $s4, $s5, $s0  Unsigned arith: addu/subu (overflow undetected) Assembly language format: label: operation dest reg, first src reg, second src reg # Comment دستورات محاسباتی اصول معماری: تمامی محاسبات بر روی داده های رجیسترها انجام میشود. یعنی نمیتوان عددی را که در حافظه ذخیره شده است با یک رجیستر جمع کرد .برای اینکار ابتدا باید محتوی حافظه به رجیستر به منتقل شده و عم5لیات بر روی داده های رجیستر ها انجام شود. ترتیب اپراندها همیشه ثابت است :اول مقصد نوشته میشود. نوشتن توضیحات در برنامه نویسی به زبان MIPS اسمبلی  Hash  (#) is used for MIPS comments anything from hash mark to end of line is a comment and will be ignored دستورات محاسباتی Add/Sub_Immediate instructions 16کیاز رجیستر های55ا ی555دونعالمترا ب555ا ب55ا عالمتو ی555یتیب555 ب16 دد5کع55ی .فریقمینماید555 ت/ 5یتیجمع555ب Destination Reg = Source Register + Immediate Example: A=A -4 addi $t0, $t0, -4 # $t0 = $t0 –4 Signed/Unsigned Arithm: addi, addiu Assembly language format(I-format): label: operation dest_reg, src_reg, immediate value/constant # Comment مثال MIPS به اسمبلیC تبدیل برنامه a = b + c + d - e;  Break into multiple instructions add $t0, $s1, $s2 # temp = b + c add $t0, $t0, $s3 # temp = temp + d sub $s0, $t0, $s4 # a = temp - e  Notice: A single line of C may break up into several lines of MIPS. مثال  How do we do this? f = (g + h) - (i + j);  Use intermediate temporary register # temp = g + hadd $t0,$s1,$s2 # temp = i + jadd $t1,$s3,$s4 # f=(g+h)-(i+j)sub $s0,$t0,$t1 دستورات منطقی MIPSبرخی ازدستورات منطقی موجود در  AND    OR    bit-wise OR between registers or $t1, $s0, $s1 NOR  Bit-wise NOR between registers  nor $t1, $s0, $s1 nor $t1, $t0, $0   bit-wise AND between registers and $t1, $s0, $s1 Immediate modes  andi and ori # $t1 = NOT($t0)  دستورات دسترسی به حافظه  : اپراند میباشند3 دارای.داده ها را بین حافظه و رجیسترها منتقل میکنند LW/SW instruction: Load/Store  Assembly language format(I-format): label: operation dest_reg, offset ( src_reg) Name of register to put value in A number # Comment Name of register to get base address from آدرس داده در حافظه بصورت زیر محاسبه میشود  Source Address = Source Base Address + Offset  Load Word : مثال lw $s0, 4($s3) If $s3 has the value 100, this will copy the word at memory location 104 to the register $s0. $s0 <- Memory[104] Store Word : مثال sw $s0, 4($s3) If $s3 has the value 100, this will copy the word in register $s0 to memory location 104. Memory[104] <- $s0 خواندن از حافظه ]lw R6, 0(R5) # R6 <= mem[0x14 مثال ‏C ‏code: ;]A[8] = h + A[8 ‏assume h in $s2 and base address of the array A ‏in $s3 )code: lw $t0, 32($s3 ‏add $t0, $s2, $t0 )sw $t0, 32($s3 ‏ MIPS این نحوه آدرس دهی طراحی دستورالعمل ها را ساده کرده و به پیاده سازی آرایه ها و استراکچرها کمک میکند دستورات دسترسی به حافظه Instruction Mnemoni c Load Byte LB Load Byte Unsigned LBU Load Halfword LH Load Halfword Unsigned LHU Load Word LW Store Byte SB Store Word SW Store Halfword SH مثال             C code: z = w + y; MIPS code: la $t0, w # put address of w into $t0 lw $s0, 0($t0) # put contents of w into $s0 la $t1, y # put address of y into $t1 lw $s1, 0($t1) # put contents of y into $s1 add $s2, $s0, $s1 # add w + y, put result in $s2 la $t2, z # put address of z into $t2 sw $s2, 0($t2) # put contents of $s2 into z la= load address , lw= load word , sw= store word Must load address (la) to get the address of the memory location into a register 0($t0)means go 0 bytes from the address specified by$t0 انتقال بالدرنگ مقادیر 32بیتی به رجیسترها اینکار در دو مرحله با انتقال 16بیت با ارزش و کم ارزش و ترکیب آنها صورت میپذیرد 16 بیت با ارزش با دستور load upper immediateمنتقل میشود. ‏filled with zeros ‏lui $t0, 1010101010101010 0000000000000000 ‏ 1010101010101010 ‏Then must get the lower order bits right, i.e., ‏ori $t0, $t0, 1010101010101010 0000000000000000 1010101010101010 1010101010101010 0000000000000000 1010101010101010 1010101010101010 ‏ori ‏ دستورات کنترلی این دستورات سیر اجرای برنامه را تغییر میدهند یعنی اینکه دستور بعدی که باید اجرا شود را .تعیین میکنند انواع مختلف دستورات کنترلی ‏ conditional ‏branches ) jumps (unconditional branch ‏ procedure calls ‏ procedure returns دستورات انشعاب : عبارتند ازMIPS دستورات انشعاب شرطی در bne $t0, $t1, Label beq $t0, $t1, Label  Example: if (i==j) h = i + j;  bne $s0, $s1, Label add $s3, $s0, $s1 Label: .... Note the reversal of the condition from equality to inequality!  دستورات کنترلی : عبارتند ازMIPS دستورات انشعاب غیرشرطی در j label Unconditional jump jr $t0 “jump register”. Jump to the instruction specified in register $t0  Example: if (i!=j) beq $s4, $s5, Lab1 h=i+j; add $s3, $s4, $s5 else j Lab2 h=i-j; Lab1:sub $s3, $s4, $s5 Lab2: ...  دستورات کنترلی ‏ اغلب در کنار دو دستور فوق از دستوردیگری نیز استفاده میشود: ‏ )slt and slti // set if less than (w/ and w/o an immediate ‏ ‏if $s1 < $s2 then $t0 = 1 ‏else $t0 = 0 ‏slt $t0, $s1, $s2 از این دستور به همراه دستورات قبلی استفاده میشود: ‏slti $at, $a0, 5 # $at = 1if $a0 < 5 ‏bne $at, $0, Label #Branch if $a0 < 5 ‏ نحوه محاسبه آدرس در دستورات کنترلی ‏bne $t4,$t5,Label Next instruction is at Label if $t4  $t5 ‏beq $t4,$t5,Label Next instruction is at Label if $t4 = $t5 16 bit address ‏ ‏ ‏rt ‏rs ‏op ‏I ‏PC-relative addressing فرمت این دستورات 5از نوع I-Typeاست که در آن آدرس بصورت یک مقدار 16بیتی نوشته میشود .این م5قدار بصورت یک افست نسبت به مقدار رجیستر PCنوشته میشود. نحوه محاسبه آدرس در دستورات کنترلی  j Label J Next instruction is at Label op 26 bit address Pseudodirect addressing . استفاده میشودPC در این دستور فقط از بیت های با ارزش 32-bit jump address = 4 Most Significant bits of PC concatenated with 26-bit word address (or 28- bit byte address) Address boundaries of 256 MB For larger distances: Jump register jr required.   Example  LOOP: mult $9, $19, $10 # R9 = R19*R10 lw $8, 1000($9) # R8 = @(R9+1000) bne $8, $21, EXIT add $19, $19, $20 #i = i + j j LOOP EXIT: ......  Assume LOOP is placed at location 80000 op rs rt 0 19 10 80004 35 9 8 1000 80008 5 8 21 8 80012 0 19 20 80016 2 80020 ... 80000 9 19 80000 0 0 24 32 LOOP مثالی ازپیاده سازی       C code: sum = 0; for (i = 0; i < y; i++) sum = sum + x; MIPS: Assume: x , y , and sum are in $s0 $s1 , and $s2 respectively. Will use $t0 for I and $t1 for the constant 1 add $s2, $zero, $zero # sum = 0 add $t0, $zero, $zero # i = 0 LoopBegin: slt $t2,$t0, $s1 Beq $t2, $zero, LoopEnd # is i < y ?? add $s2, $s2, $s0 # sum = sum + x add $t0, $t0, $t1 # i++ j LoopBegin LoopEnd: صدا زدن توابع و بازگشت ازآن از این دستور برای صدا زدن برنامه فرعی استفاده میشود: ‏jal: jump & link instruction ‏jal stores the return address in R31 and jumps to address in ‏rt این دستور آدرس برگشت را در رجیستر R31قرار میدهد و به آدرس ذکر شده دردستور انشعاب میکند. برای بازگشت از برنامه فرعی از دستور زیر استفاده میشود: ]jr Reg[R31 ذخیره رجیسترها در هنگام صدا زدن توابع تودرتو ‏ ‏ ‏ بعلت محدودیت رجیسترها الزم است تا محتوی رجیسترهائی را که برای تابع مهم هستند قبل از صدا زدن تابع ذخیره نم5وده و بعد از بازگشت از تابع آنه5ا را بازیابی نمود. رجیسترها در پشته ذخیره خواهند شد .برای اینکه برنامه ها مجبور نباشند تمامی رجیسترها را ذخیره نمایند قاعده زیر رعایت میشود: تابع صدا زننده رجیسترهای زیر را ذخیره و بازیابی م5یکند: $v0-$v1$a0-$a3t0-$t9 ‏ تابع صدا شونده رجیسترهای زیر را ذخیره و بازیابی م5یکند: ‏s0-$s7$ $ra دستورت شیفت MIPS Shift Instructions  Format: op code/dest reg/src reg/shift amount sll $t4, $t0, 5 #shift left logical 5 bits (multiply by 32) sra $t5, $t0, 2 #shift right arithmetic 2 bits (divide by 4), #sign extended srl $v0, $t0, 1 #shift right logical 1 bit. Sign bit is now 0 srlv $v0, $t0, $t1 #shift right logical, $t1 says how many bits Type of shift Left Right Logical sll sllv srl srlv Arithmetic (none: use sll) Rotate rol ror sra srav خالصه دستورات  MIPS — loading words but addressing bytes — arithmetic on registers only  Instruction add $s1, $s2, $s3 sub $s1, $s2, $s3 lw $s1, 100($s2) sw $s1, 100($s2) Meaning $s1 = $s2 + $s3 $s1 = $s2 – $s3 $s1 = Memory[$s2+100] Memory[$s2+100] = $s1 C مثالی از یک برنامه swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: muli add lw lw sw sw jr Explanation: index k : $5 base address of v: $4 address of v[k] is $4 + 4.$5 $2 , $2 , $15, $16, $16, $15, $31 $5, 4 $4, $2 0($2) 4($2) 0($2) 4($2) فرمت دستورات فرمت و طول دستورات کامپیوتر پایه مانو ثابت و یکسان بود. در حالت کلی: ‏ ‏ اگ5ر اندازه ک5د تولید شده م5هم باشد از دستوراتی با فرمت متفاوت استفاده میشود اما اگر ک5ارائی ( سرعت) مهم باشد از دستوراتی با طول یکسان استفاده میشود. ‏Variable: … … ‏Fixed: MIPS فرمت دستورات . بیت است32 طول هر دستور هر فیلد توضیحی در مورد. تقسیم میشودField هر دستور به تعدادی .یدهد5دستور العمل ارائه م ختلف نیازمند ارائه توضیحات مختلفی هستند لذا5 از آنجائیکه دستورات م سه نوع فرمت مختلف ( ولی با طول یکسان) برایMIPS در . در نظر گرفته شده است5دستورات  R-format Register instructions are used for register based ALU operations .  I-format Immediate instructions, can be either Load/Store operations, Branch operations, or Immediate ALU operations.  J-format Jump instructions, devote all of the non-opcode space to a 26-bit jump destination field. MIPS فرمت دستورات : نوع فرمت مختلف بصورت زیر هستند3  6 5 rs rd 6 5 5 I-Type opcode R-Type opcode 6 J-Type opcode rs 5 rt 16 immediate 5 5 rd shamt 26 Offset added to PC 6 func Note the regularity of instruction encoding. This is important for implementing an efficient pipelined CPU. فیلد های مختلف دستورالعمل ها  op operation of the instruction  rs first register source operand  rt second register source operand  rd register destination operand  shamt shift amount  funct function (select type of ALU operation)   add = 32 sub = 34 مثال    Example: add $t0, $s1, $s2 registers have numbers, $t0=8, $s1=17, $s2=18 Instruction Format: 000000 10001 10010 01000 00000 100000 op rs rt rd shamt funct R-Typeدستورات 6 opcode       5 rs 5 rt 5 5 6 rd shamt funct opcode: basic operation to be performed rs: source register 1 rt: source register 2 rd: destination register shamt: shift amount funct: specific variant of opcode opcode=0 دارای دستوراتدارای ایندستورات این opcode=0 استفادهALU ALUعملیات برایعملیات بودهووبرای بوده استفاده .میشوند .میشوند فیلدمشخص توسطفیلد نظر توسط موردنظر عملمورد عمل مشخص :میشود :میشود add:32 32 add: sub: 34 34 sub: فرمت دستور ADD 6 bits 5 bits ‏shamt funct 5 bits 5 bits 5 bits 6 bits ‏rd ‏rt ‏rs ‏op 32 bits این فرمت برای تعداد زیادی دستور غیر از Addنیز استفاده میشود. که همه این نوع دستورات R-typeنامیده میشوند. اندکنیگ دستور   For add:  op is 0 (000000) 10  funct is 32 (100000) 10 Register encodings:  $s0 is 16 (10000), $s1 is 17 , … 10 10  $t0 is 8 (01000), $t1 is 9 , … 10 10 add $s0, $s1, $t0 000000 10001 01000 10000 00000 100000 op rs rt rd shamt funct 02288020: مقدار این دستور برابر است باHEX بصورت I-Type دستورات 6 opcode     rt 16 immediate I-Type Format lw: 35 (100011) Similarity in opcode for lw & sw simplifies hardware sw: 43 (101011) opcode value differentiates I- and R-Type instructions rs: base register rt:    rs 5 Opcode   5 destination register for lw source register for store immediate: offset from base  range: -215 to (215-1) SW LW/فرمت دستور 6 bits 5 bits 5 bits 16 bits op rs rt address 32 bits rs is the base register rt is the destination of a load (source of a store) address is a signed integer lw $s0, 24($t1) 100011 01001 10000 0000000000011000 op rs rt address sw $s0, 24($t1) 101011 01001 10000 0000000000011000 op rs rt address فرمت دستورات با آدرس دهی بالدرنگ 16 ‏immediate ‏ ‏ ‏ ‏ 5 ‏rt 5 ‏rs 6 ‏opcode ‏I-Type Format برای دستورات ALUکه نیاز به یک اپراند ثابت دارند استفاده میشودe.g.,( . )X=X+4 همچنین برای loadکردن مقادیر ثابت از حافظه بکار میرود. مقادیر ثابت بصورت یک عدد 16بیتی کد میشوند .لذا در رنج to (215-1) 215- خواهند بود. مثال: ‏addi R4, R8, 79 ‏slti R1, R2, 56: sets Reg[R1]=1 if Reg[R2]<56 else Reg[R1]=0 دستورات J-Type 26 ‏Offset added to PC+4 ‏J-Type Format 6 ‏opcode دستورات پرش غیرشرطی به فرم J-Typeکد میشوند. اپکد دستور Jبرابر با 2و اپکد دستور Jalبرابر با 3می باشد. مقدار جابجائی نسبت به PC+4محاسبه میشود. Mips مد های آدرس دهی  Immediate    Register   add R4, R3, R2 # Regs[R4]=Regs[R3]+Regs[R2] Displacement    add R4, #7 # Regs[R4]=Regs[R4]+7 16-bit field for the constant lw R4, 100(R1) #regs[R4]=Regs[R4]+Mem[Regs[R1]+100] 16-bits for displacement Special cases of displacement mode  indirect mode: displacement value=0   lw R4, 0(R1) #regs[R4]=Regs[R4]+Mem[Regs[R1]] absolute addressing : R0 as base register (always stores 0)  lw R4, 8769(R0) Mips مد های آدرس دهی 1. Imme d i a t e a d d re ssi n g op rs rt Imme d i a t e 2. Re g i st e r a d d re ssi n g op rs rt rd . .. fu n ct Re g i st e rs Re g i st e r 3. Ba se a d d re ssi n g op rs rt Me mo ry Ad d re ss + Re g i st e r Byt e Ha l fwo rd 4. PC-re l a t i ve a d d re ssi n g op rs rt Me mo ry Ad d re ss PC + W o rd 5. Pse u d o d i re ct a d d re ssi n g op Ad d re ss PC Me mo ry W o rd Wo rd Pseudo-instructions اذب555تک5دستورا   MIPS assemblers support pseudo-instructions that give the illusion of a more expressive instruction set, but are actually translated into one or more simpler, “real” instructions. In addition to the la (load address) we saw on last lecture, you can use the li and move pseudo-instructions: li $a0, 2000 # Load immediate 2000 into $a0 move $a1, $t0 # Copy $t0 into $a1  They are probably clearer than their corresponding MIPS instructions: add$a0, $0, 2000 add$a1, $t0, $0 # Initialize $a0 to 2000 # Copy $t0 into $a1 پشته یا Stack پشته محلی از حافظه اصلی است که جهت ذخیره داده ها استفاده میشود. موارد استفاده از پشته ‏ ‏ ‏ ‏ ‏ ذخیره متغیرهای یک برنامه ذخیره محتوی سایر رجیسترها وقتی که یک برنامه فرعی صدا زده میشود کمک به ترجمه عملیات محاسباتی با روش RPN رجیستر Spمحل آخرین داده ذخیره شده در پشته را مشخص میکند عملیات زیر روی پشته تعریف میشوند: ‏POP ]DRM[SP ‏SPSP+1 ‏Push ‏SPSP-1 ‏M[SP]DR پشته و برنامه های برگشت پذیر استفاده از پشته باعث میشود تا امکان پیاده سازی برنامه های برگشت پذیر فراهم گردد. با استفاده از پشته میتوان برای هر نسخه از تابع صدا زده شده حافظه جداگانه ای در نظر گرفت آرگومانها و متغیرهای محلی را میتوان در پشته ذخیره نمود. آدرس دهی متغیرهای محلی و آرگومانها نسبت به موقعیت پشته انجام میشود. بازگشت از توابع عکس حالتی است که صدا زده شده اند پشته یا Stack در MIPSپشته از آدرسهای باال به سمت آدرسهای پائین رشد میکند. هنگام pushکردن داده در پشته باید مقدار رجیستر sp$را کاهش داد. استفاده از stackبرای صدا زدن تابع فرعی قبل از صدا زدن تابع مقادیر رجیسترها در پشته ذخیره میشود تابع با استفاده ازدستور صدا زده میشودjal address : در پایان اجرای تابع ،برای بازگشت به برنامه اصلی از دستور ) jr (jump registerاستفاده میشود. بعد از بازگشت از تابع مقادیر رجیسترها از پشته خارج میشوند. مثالی از استفاده از پشته Save $s0 and $s1: empty low address $sp subi $sp,$sp,8 sw $s0,4($sp) sw $s1,0($sp) filled Restore $s0 and $s1: high address lw $s0,4($sp) lw $s1,0($sp) addi $sp,$sp,8 مثالی ازپیاده سازی تابع int func(int g, int h, int i, int j) { int f; f = ( g + h ) – ( i + j ) ; return ( f ); } // g,h,i,j - $a0,$a1,$a2,$a3, f in $s0 func : addi $sp, $sp, -12 #make room in stack for sw $t1, 8($sp) #save the regs we want to use sw $t0, 4($sp) sw $s0, 0($sp) add $t0, $a0, $a1 #$t0 = g + h add $t1, $a2, $a3 #$t1 = i + j sub $s0, $t0, $t1 #$s0 has the result add $v0, $s0, $zero #return reg $v0 has f lw $s0, 0($sp) # restore $s0 lw $t0, 4($sp) # restore $t0 lw $t1, 8($sp) # restore $t1 addi $sp, $sp, 12 # restore sp jr $ra   we did not have to restore $t0-$t9 (caller save) we do need to restore $s0-$s7 (must be preserved by callee) 3 words نمایش لهستانی معکوس )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 تولید نماید. ‏b ‏c ‏d عبارت معادل RPNبصورت زیر خواهد بود: +*bcd در اینصورت محتوی پشته بصورت زیر خواهد بود: ‏PUSH ‏PUSH ‏PUSH ‏MUL ‏ADD ‏POPa ‏d ‏b+c*d ‏pop ‏ADD ‏c*d ‏c ‏c ‏b ‏b ‏b ‏MUL ‏PUSH d ‏PUSH c ‏b ‏PUSH b تمرین: با مطالعه پردازنده کمکی MIPSگزارشی در مورد محاسبات اعشاری و دستورات floating pointمورد استفاده دراین پردازنده ارائه دهید.

14,900 تومان