صفحه 1:
پردازنده 0166) مقدمه دستورات Patersva & Weaessi GUS [

صفحه 2:
© 16۳0() یکی‌از اولین‌پردازندهای/18) لستکه بصورت تجاری‌عرضه و موفق‌شده لست‌در سال900) توسط تیمی دردانشگام لستانفورد طرلحی‌شدم لست * پردازنده ای ساده ولی در عین حال قوی است. * در تجهیزات مختلفی بصورت ساسح استفاده شده است؛ مم05 مما ججفجه ‎Oorious‏ © ع يصتود ب هاة) بجمة) لمجم 902 صلججهز0) عا لا ون موق ۶ 2 Most HP Laserlet ‘workgroup printersace \ ۱ 0 Garbit processors.

صفحه 3:
© تعداد زياد رجیسترهای همه منظوره ۶ مجموعه کوچک دستورات مه 199 :0216۳8698 * ‎O1PGOF: CSO instruntioas‏ © ‎٩‏ اندازه دستورات ثابت ولی فرمت آنها متغیر است ‎٩‏ دسترسی به حافظه محدود به دستورات ‎Saul food/store‏ ‎٩‏ مد های آدرس دهی محدود است.

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

صفحه 5:
© وقتی تعداد رجیسترها افزایش مییابد آنها بصورت رجیستر فایل ساخته میشوند: es Ddata Write ID address 32 x 32 Register File 5 JA address B addres Adata___Bdata “AP Orite = (, thea OD data is stored toto (D address © You ces read Proc tue reysters of vane, by supplier the (D uiddress und (D address foputs. Nhe vulputs uppear us (D dota wed @ data. +4 V4 © Revysters we clocked, sequeutdl devices. © Oe vac reed Prow the reqister Pile of copy te. © Date is writes valy vo the postive edye oP the clock.

صفحه 6:
* اسایر رجیستر ها © علاوه بر ر جیسترهای فوق 710*09() دارای رجیسترهای دیگری نیز میباشد: ‎revister urd Grotus revster‏ ( امه ی ) قن ‎Phiten pot ۲‏ ©

صفحه 7:
انامگذاری رجیسترها برای سهولت استفاده در 46 ۵ ‏موه له‎ ves (Soke wnt swe) 6 0۵ ‏موم‎ coder vary ۳ 16 © 90 ‏ده مسب _ بر‎ )۵( براى اينكه برنامة نويسى اسمبلى راحت تر باشد به هر رجيستر اسمى

صفحه 8:
داده های حمایت شده “Integer *s-bit char *76-bit half-word 2 "64-bit double-word “Floating point °32-bit singleprecision “64-bit singleprecision *pairedsingle precision 40% 60% 80% مقايسه رجوع به داده ها بر اساس اندازه آنها ‎“IEEE 754 standard‏

صفحه 9:
حافظه 2160) 2 8 Opercters © © memory ‏ره‎ 8 ©» © ‏لیبق‎ ۸۵85 ۰. 07۲ One x @O = Bara Rew ocevidaktess [Od wR Orie selected ‏له‎ 2 0 ‏دارلی06 خط آدرس‌لستٍ ی عنی‌میتولند تا 066 محل‌حافظه‎ )106 ٩ را آدرس‌دهینماید. در هر محل‌حافظه ی کب ایندادم قرار میگيرند. ‎x O ROO, whick would be F CO‏ 95 و و ‎Dhis results‏ و 7 ۰

صفحه 10:
:: اسازمان حافظه * هر کلمه دارای "0 بایت میباشد 32 bits of data] Reysters kok OS bits oF deta 32 bits of datal 32 bits of datal 32 bits of datal 12 © 6°? bytes with byte adresses Prow O tr G°°-1 © 6 Words wih bye addresses O, , O, ... 9506-4:

صفحه 11:

صفحه 12:
سازمان حافظه : ‎Oliqevect‏ © توجه داشته باشید که آدرس حافظه بر مبنای بایت ایجاد ميشود. از اینرو یک کلمه 66 بیتی 6 محل حافظه را اشغال خواهد نمود. ‎Address O12 34 5 6 7 & 9 10 11‏ 8-bit data Word 1 Word 2 Word 3 * در معماری 10<69() کلمات باید بصورت اوه در حافظه قرار گيرند. یعنی یک کلمه 0 بیتی باید در یک محلی از حافظه قرار گیرد که آدرس آن مضربی از * باشد. © 0, , © od 08 we vod word ‏ج وو لله‎ ۰ 4,8, 9,8, 9, ?, 9, (0 oad ae atudd word ukbesses. © در صورتی که به اشتباه قصد دسترسی به بک محل حافظه ‎raked‏ داشته باشد يك خطای ‎error‏ سا رخ خواهد داد. © این محدودیت برای برنامه نویسی با زبان سطح بالا تاثیر قابل ملاحظه ای ندارد اما به پردازنده کمک میکند تا اندکی سریعتر عمل کند.

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

صفحه 14:
ترتیب بایت های یک کلمه در حافظه ‎٩‏ دو روش برای مشخص کردن ترتیب بایتها در حافظه وجود دارد: :كملع بز و ‎byte address) ts the address oP the‏ اوستصووكي اوجنيصا) جوجسلله لويد ‎ost siquiPiccat byte‏ ‎Liths eric:‏ © ‎word uddtess is the uddress oP the beast siqaiPizcat byte‏ ‎ ‎ ‎BigEndianByte Bro Bra B+2 ‏قب‎ ‎ ‎ ‎ ‎

صفحه 15:
ترتیب بایت های یک کلمه در حافظه memory address B=200is the baseaddressin this example در معماری 00710505 میتوان پردازنده را برای هر یک از اين دو روش تنظیم کرد.

صفحه 16:
|انواع اصلی دستور العملهای 0168) ° Orikwetic ۰ ‏ریا‎ ‎© Ploaticry Prict © Qewory wees iestruntivas * bowd & tore ربا اون و 8 ‎Cocctiiccal Broads‏ © ‎Ol & Reta‏ ©

صفحه 17:
* دستورات محاسباتی ‎٩‏ چهار دسته دستورات محاسباتی وجود دارند: )۶ ‎Gubirant‏ © ‎Dutiphy‏ © ‎Divice‏ ©

صفحه 18:
*: ادستورات محاسباتی ‎٩‏ تمامی دستورت (),9) نظیر دستورات جمع و ضرب دارای 9 عملوند هستند: یکی برای مقصد و دو تای دیگر برای مبدا داده ها. هر سه عملوند ها باید یکی از رجیستر های ‎DIPS‏ ‏باشند. تمامی محاسیات 0 بیتی هستند. ‎°Core: ۸ 2 8 + ۶ E=F-A; OIG code: add $t0, 551, 2 sub $54, $55, $s0 © ‏لول اه لبون‎ (verti unkered) Osseubly hrocuece Porat ‏تن پر ‎poder‏ سح سا سر و یت

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

صفحه 20:
نوشتن توضیحات در برنامه نویسی به زبان *7 اسمپلی 216۳8) وی 0۱۵ ۲ لس ‎Wask (#) is‏ © لحه هه ۱ لمحي سا ‎wll‏

صفحه 21:
دستورات محاسباتی Odd Gub ‏یه لس‎ یکعدد 18 ببیتییا علاهتو یا بمدون‌عااهتوا با ییکی‌از رجیستر های‌18) بیتی‌جمم / تفریق‌مینماید. لها + وه سوق ۶ و یل تسم ۵-0-0 ‎wht SD, 90 # SM = SO‏ تلم ,له ‎Brita:‏ هطلس :مسا اس سم تسه ‎bet ry, worry, Krordar vdeo #Orword‏ مهو تا

صفحه 22:
DIPS ‏تبديل برنامه 0 به اسمبلى‎ © a=b+¢+d = 6; © Oreck ioto wotiple ‏مس‎ ‎add $t0, $sl, $s2 # temp =b+c add $t0, $t0, $s3 # temp = temp + d sub $s0, $t0, $s4 # a = temp - e © ‏:صصح(‎ O since tae oP OC way bredk up isto sever foes oP OIPG.

صفحه 23:
© Wow do we do this? f= (gi ceih)) = (Ge DN ® Ose itterwediute tewporury reuster add $t0,$s1,$s2 # temp =g +h add $t1,$s3,$s4 # temp = i+ 7 sub $s0,$t0,$tl # f=(gth) -(i+j)

صفحه 24:
دستورات منطقی 607168 ‏برخی ازستورلت منطقی موجود در‎ * AND © biwise BOO betwers revises * and $t1, $s0, $s1 OR © biwise OR betwerc reisters * or $t1, $50, $s1 NOR ۶ Otwee DOR betwers registers ۰ ۱۵۲ 51, 550, 1 * nor $t1, $t0, $0 # $t1 = NOT($tO) ‏لین للجم‎ © andi wd ori

صفحه 25:
: دستورات دسترسی به حافظه © داده:هاارا بین خافظه و رجیسترها منتقل میکنند. دازای 2 اپراند. میباشند: ‎bowd/Gtore‏ تمس )را ‎Porerat( Foret):‏ ما لاو ‎oe # Oxowed‏ مهس ‎kebet‏ ‎Nes‏ ‎wanvber | | Dawe oP revister to yet bose‏ © ‎undress Prow‏ ‎ ‎ ‎ ‎ ‏* آدرس داده در حافظه بصورت زیر محاسبه میشود ‏ین + لد ‎Ocktress = Gouwve Ouse‏ موی و ‎ ‎

صفحه 26:
Lod Oprd : ‏مثال‎ lw $s0, 4($s3) AP $83 kos the vote 100, this wil copy the word ot wewory lovato 104 to the revister ۰ $s0 <- Memory[104]

صفحه 27:
sw $s0, 4($s3) ٩1۳ 553 kas the vole 100, this wil copy the word ia revister $SO0 ‏میا روج صا‎ 104. Memory[104] <- $s0

صفحه 28:
* اخواندن از حافظه lw R6, O(R5) #RO <= weo[OxIF] 4 bytes wide 0x12345678 Program Col 0x00000004 struction register 0x00 ‘0x00000014

صفحه 29:
© Out: [OE] =k + O[O]; ussuve kia $50 ued base address of the ora in $9) © O1PC ote: ‏سا‎ $1, OE($s9) add $0, $50, $O so $0705 ($20) این نحوه آدرس دهی طراحی دستورالعمل ها را ساده کرده و به پیاده سازی آرایه ها و استراکچرها کمک میکند

صفحه 30:
دستورات دسترسی به حافظه Mnemoni 2 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:
O code ze ty; O1PG ode: b$O, w # pu ‏دم رب ۴و له‎ 500 by $50, O($) # pul contents Pw tio $oD 0 صم بر خاد وسسطله انح # بر ,لم8 ط 2-0 صم بر خام صصص نج 4# (0)50 ,$20 ‎by‏ 526 م تحص م ‎ty,‏ للك # 20 ,520 ,596 لد ‎k$O,z # prt kdoos of zt $O‏ sw $50, O($C) # put cocteuts oF $50 tio z ‎tod ockbess koe brad word , sw store word‏ وا و ‎iy‏ مق رورت با اه وله ببس ‎Det load ackdress (ha) to‏ 0 اه له مت جعاررا () مر صحدجب (500) 0

صفحه 32:
انتقال بلادرنگ مقادیر 00 بیتی به رجیسترها ۶ اینکار در دو مرحله با انتقال 40 بيت با ارزش و کم ارزش و ترکیب آنها صورت میپذیرد ۶ 60 بیت با ارزش با دستور ملسم جد لما منتقل ميشود. * lui $t0, 1010101010101010 ae ae 1010101010101019] 2 0 filled with zeros = Then must get the lower order bits right, i.e., ‏1ه‎ 560, 50, 10 0 ا/ 1010101010101010 ۳ 8088008800800000 ( 60 ori 1010101010101010 | 1010101010101010

صفحه 33:
این دستورات سیر اجرای برنامه را تغییر میدهند یعنی اينکه دستور بعدی که باید اجرا شود را مين متك انواع مختلف دستورات كنترلى ‎broackes‏ لیس و ‎broach)‏ امملمیمی) عون و اه لسن و اه لسن و

صفحه 34:
*: ادستورات انشعاب ‎٩‏ دستورات انشعاب شرطی در 0010008 عبارتند از: 086 510, $t1, Label 060 500, 1, 1 ‎Cxanvple: P (Fa) kK =it+5‏ و ‎bne $s0, $51, Label add 553, 550, 1 Label: a eee ‎© ote the reversdl oP the coerdiica Prove equaliy te icequtity!

صفحه 35:
۶ دستورات انشعاب غيرشرطى در 0040008 عبارتند از: j label Oucoediticcd jc jr $t® “ueop reyster”. dup to the iestruniiod speviPied ia reyister $O © ‏:میج‎ ‎if (i!=j) beq $s4, $s5, Labl h=itj; 2300 553, 554, 5 else j Lab2 h=i-j; Labl:sub $23: ee $s5 Lab ۰

صفحه 36:
دستورات کنترلی © اغلب در کنار دو دستور فوق از دستوردیگری نیز استفاده میشود: ۰ ‏اد ای اد‎ I] set P tess thoa (vo! ord w/o oe cove dite) * $00, $00, ‏ا‎ ‎se ‎80 20 ‏از اين دستور اده میشود:‎ ۶

صفحه 37:
نحوه محاسبه آدرس در دستورات کنترلی bee SPSS Lobel Dent tetuntion is ot Lobel PGP 4 $C ‏ودط‎ 302,56 Lobel ‏ع اما هط مصتصصصم 9د(‎ 542 - 56 1 op rs rt 16 bit address PO-retaive uddressicny * * فرمت این دستورات از نوع ‎Dye‏ است که در آن آدرس بصورت یک مقدار 48 بیتی نوشته میشود. اين مقدار بصورت یک افست نسبت به مقدار رجیستر (۳6) نوشته میشود.

صفحه 38:
£ نحوه محاسبه آدرس در دستورات کنترلی © jj Lubel Ora iestruntivg is ut babel J op 26 bit address Pseudodirent addressing ®& ‏در اين دستور فقط از بیت های با ارزش (6*) استفاده میشود.‎ # 90 -bi juwp address = F Oost GiguiPiccat bits oP PO pourdteoied wih CO-bit word address (or CO- bit byte address) Oddress bounties ve CGO OO Cor torqer distraves! dup reyster JP required.

صفحه 39:
۷ ٠ LOOP: mult Fi $19, $10 # RO = R19*R10 $8, 1000($9) # R8 = @(R9+1000) ins $8, $21, EXIT add $19, $19, $20 #i = i+ j j LOOP EXE e ois © Osenve LOOP te phaoed uf bouts OOOOO covop o | | w | o | o ۴ ‏مممه‎ 00] 0 | © 000 cooop 0 | 0 | a 9 coo o | | co] ©] ‏ه‎ [ © ooo 0. 20000 ‏همه‎

صفحه 40:
:؛ امتالی ازپیاده سازی ‎LOOP‏ لو و ‎wane = 0;‏ ‎Por (= ©; 1 <p; ++)‏ pane = sur + x} owe: ‏ده و اج ند توق‎ 390 390 , ond $58 reeprowel). Dib aoe $M Por 1 ocd $4 ‏لصي جا وذ‎ qa whl $50, $2erv, Sere #am =O kt $0, $zerv, $2ero #۱20 21 $0,500, $24 eq $0, $2erv, LoopPad #1 <p 2? uk! $50, $50, $-D # vn = nw tx wet GO, $0, $0 + ميدقا سار :بسا

صفحه 41:
:* اصدا زدن توابع و بازگشت ازآن ۶ از این دستور برای صدا زدن برنامه فرعی استفاده میشود: ‎jolt jusop & bok fostruvtioa‏ ‎jl stores the netura address it (RO ued jusops to address fo‏ 3 اين دستور آدرس بركشت را در رجيستر )9 قرار ميدهد و به آدرس ذكر شده دردستور انشعاب ميكند. * برای بازگشت از برنامه فرعی از دستور زیر استفاده میشود: ‎ir Rey[ROG]‏

صفحه 42:
ذخیره رجیسترها در هنگام صدا زدن توابع تودرتو © بعلت محدودیت رجیسترها لازم است تا محتوی رجیسترهائی را که برای تابع مهم هستند قبل از صدا زدن تابع ذخیره نموده و بعد از بازگشت از تابع آنها را بازیابی نمود. ۶ رجیسترها در پشته ذخیره خواهند شد. برای اينکه برنامه ها مجبور نباشند تمامی رجیسترها را ذخیره نمایند قاعده زیر رعایت میشود: ‎٩‏ تابع صدا زننده رجیسترهای زیر را ذخیره و بازیابی میکند: 5۵0-5090-80-0 © تابع صدا شونده رجیسترهای زیر را ذخیره و بازیابی میکند: 50-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:
: اخلاصه دستورات ۰ ۵ ‏هوا ب‎ words but addresstay byes ‏مه ات‎ reysters vol و مها ۰ 300 551, 552, 3 591 - 552 + 3 ‏طلاد‎ 551, 552, 3 551 < 992 - 3 lw $s1, 100($s2) $s1 = Memory[$s2+100] sw $51, 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:
*: افرمت دستورات ‎٩‏ فرمت و طول دستورات کامپیوتر پایه مانو ثابت و یکسان بود. در حالت کلی: * اگر اندازه کد تولید شده مهم باشد از دستوراتی با فرمت متفاوت استفاده میشود * اما اگر کارائی ( سرعت) مهم باشد از دستوراتی با طول یکسان استفاده ميشود. ‎ ‎Out: ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 47:
افرمت دستورات ‎DIPG‏ * طول هر دستور ©© بيت است. ۴ هر دستور به تعدادی لاج:۳) نقسیم ميشود. هر فیلا توضیحی در مورد دستور العمل ارائه میدهد. * از آنجائیکه دستورات مختلف نیازمند ارائه توضیحات مختلفی هستند لذا در 16۳08) سه نو ع فرمت مختلف ( ولی با طول یکسان) برای دستورات در نظر گرفته شده است. ‎LD operatic:‏ اما و لت بو سس و وخ( و ۰ | میج ۰ سمل ۰ 06 و وا سره طسوت سل تاه له عمط و ول اس ‎jacop deviate‏

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

صفحه 49:
فیلد های مختلف دستورالعمل ها ۱ operciiva oF the icstruciiva © ‏ور‎ First reqster source ‏اوه‎ امه سوه زو لو بر و ‎reqsier destivaiod pperond‏ لس و ‎© shot shift aout ‏را را 9 ‎ah = OC‏ ® 2 وله ۶

صفحه 50:
2 ,551 ,580 300 :طامصصع » 952-8 , 851217 ,98028 امه ما ویر و ) میسیب © 000000 10001 10010 01000 00000 100000 H shat func iS 0 ۳5 3

صفحه 51:
R-Typetl sis opcode | rs | rt | rd samy funct * این دستورات دارای ‎pporde=O‏ ‏بوده و برای عملیات ()را9) استفاده میشوند. ۴ عمل مورد نظر توسط فیلد مشخص امس در wnt: OC wb: OF

صفحه 52:
فرمت دستور ‎BOO‏ | | | op | rs | rt | rd [shame] funct | ۱۳111111111111 111111 111 ۱ 8 bts | این فرمت برای تعداد زبادی دستور غیر از ۸010 نیز استفاده ميشود. که همه اين نوع دستورات 1-3706 نامیده میشوند.

صفحه 53:
؟؟ اندکنیگ دستور Por add: ۶ Ops ®,, (000000) * funct 296, (100000) لس ی موی 851 ,(10060) م46 550 * ...ريركت 581 ,(01000) يروك ‎٩0‏ ۶ 300 550, 51, 0 000000 10001 01000 10000 00000 100000 | op | rs | rt | rd shame] Funct | بصورت 11,027 مقدار اين دستور برابر است با:00 ©6600 ©0686

صفحه 54:
دستورات م۳٩‏ immediate rt rs I-Type Format Similarityin opcode for Cw & sw simplifieshardware opcode Oped: ۰ W198 (oom) * ‏و‎ 0۵ )00000( هه ۲ اج ۱ سا سل لسن ۰ rst base reqister rt © deviraioa reyister Por bu * source revipter Por store ieediate: OPP set Prow base ۰ : 26 ‏و‎ )60-0(

صفحه 55:
GO LO] ss ‏افرمت‎ :: لین ‎I+ S bie -S bits ++ 3 bis‏ جيرا © مز | op [rs | rt | address [ ۱۲1۲۲11111 11111111 1111111111111111 ۱ 8 bts | ۲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:
فرمت دستورات با آدرس دهی بلادرنگ 03 ee 16 T-Type Format | opcode | rs | rt immediate * برای دستورات ()را9) که نیاز به یک اپراند ثابت دارند استفاده میشود. (,.ب.ج ‎(acer‏ ‏© همجنين براى سما كردن مقادير ثابت از حافظه بكار ميرود. © مقادير ثابت بصورت يك عدد 10 بيتى كد ميشوند. لذا در رنج -66© ‎ty (CPC)‏ خواهند بود. © مثال: aki RF, (RO, PO sh RI, RE, GO: see Rey[RYJHC F [> ‏سا‎ Rey[RIYJ=O

صفحه 58:
دستورات حول 6 26 opcode Offset added toPcra J-Type Format © دستورات پرش غیرشرطی به فرم سر" کل کد ميشوند. © ايكد دستور ل برابر با 2 و اپکد دستور ال برابر با 5 می باشد. ‎٩‏ مقدار جابجانی نسبت به ۳60+6۴) محاسبه میشود. ‎ ‎

صفحه 59:
:3 امد های آدرس دهی ‎Dips‏ موی ی ۱ ی ‎ki RF, RO, REO # Rew[RE]=Rep[RO]+Reww[RE]‏ © متسس فيه ‎by RE, (DORA) Freep[RE Ree [RE]+Dew[Rere[RY] +10]‏ © مسلط ۲ دو) ‏ ۰ مت ] ۱ © WRF, OR) ‏دزم( ]مس‎ ]0[ dee he ent wate | RO) vey bre ‏زرح وف سيب‎ © WRF, OPOO(RO)

صفحه 60:

صفحه 61:
عو صناص وص و كن جع 12) ٠ )(۱۳۵ ‏جوم سوه امیس‎ thot que the tusiod oP ot wore expressive ‏جموم و سوه و لصا باه و نا راو ماس‎ siopler, “red” instructive. ‎to the bo (ood ockdress) we saw oo leet lecture, you cos use the fi‏ له و و :صصص احا ولت جوم عي كمه ‎ae $a0, 2000 # Load immediate 2000 into $a0 move 521, 0 # Copy $tO into $al ‎© Dkey we probubly clewrer thew their correspoudiay OIPG iestructions: ‎add $a0, $0, 2000 # Initialize $a0 to 2000 add $al, $t0, $0 # Copy $t® into $al

صفحه 62:
Grack § aay ‎٩‏ پشته محلی از حافظه اصلی است که جهت ذخیره داده ها استفاده میشود. ‎٩‏ موارد استفاده از پشته ‏* ذخیره متفیزهای یک برنامه ‏ذخیره محتوی سایر رجیسترها وقتی که یک برنامه فرعی صدا زده میشود ‏؟ کمک به ترجمه عملیات محاسباتی با روش ‎RPN‏ ‏* رجیستر 0[ محل آخرین داده ذخیره شده در پشته را مشخص میکند ‎at ah : ۰‏ وخ ‎Se‏ ‏عملیات زیر روی پشته تعریف میشوند: ‎Ook ‏هو‎ ‎GPECOA ORCEO[CO] ۵۵۸ +0

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

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

صفحه 65:
*: استفاده از ‎cols stacks‏ صدا زدن تابع فرعی ؟ قبل از صدا زدن تابع مقادیر رجیسترها در پشته ذخیره میشود ‎e‏ تابع با استفاده ازدستور صدا زده میشود: حوح(» ل ‏© در پایان اجرای تابع» برای بازگشت به برنامه اصلی از دستور ‎(juny reqipter)‏ مز استفاده ميشود. ‏© بعد از بازكشت از تابع مقادير رجيسترها از يشته خارج ‏ميشوند.

صفحه 66:
مثالی از استفاده از پشته Gave $20 ud $54: tow address bach ‏ای‎ Sev,

صفحه 67:
مثالی ازپیاده سازی تابع int func(int g, int h, int i, int j) int f; f=(g+h)-(it+j); return ( f ); // aching - $a0,$a1,$a2,$a3, f in $50 #make room in stack for 3 words #save the regs we want to use + و < #910 ز + 21 ۸961 #$s0 has the result #return reg $v0 has f # restore $s0 # restore $to # restore $t1 # restore sp (caller var) $sp, -12 8($sp) 4($sp) ‏(م0)55‎ ‎920, 1 922, 3 90, 1 $50, $zero 0($sp) 4($sp) 8($sp) $sp, 12 $sp, $tl, 560, 550, 560, 51 $s0, $vo, $s0, $to, 51, $sp, $ra lw lw lw addi ir ‎ue ddl oot have b restore $D-$O‏ و ‎revere SoD-$o'P (sawt be prevenied by cole)‏ وا لت و رن و

صفحه 68:
نمایش لهستانی معکوس ‎Reverse Potsk Dvtation (RPO)| 32°‏ ‎٩‏ روش معمولی نمایش عبارات ریاضی: ‏+۳0 ‏»روش (00 برای نمایش عبارات ریاضی: عملگرها قبل از عملوندها قرارمیگیرند. ‎@O*CO*+‏ ‏»روش (8020) براى نمايش عبارات ریاضی: عملگرها بعد از عملوندها قرا ميكيرند ‏* 06ت *+

صفحه 69:
:: استفاده از پشته برای پیاده سازی ‎REPO‏ در برخی ماشینهای حساب و کامپیوترها از ترکیب پشته و 00 رای محاسبه عبارات ریاضی استفاده میکنند. * ابتدا عبارت بصورت (6۳6) نوشته میشود ) معمولا اینکار توسط کامپایلر انجام میشود( © در هنكام محاسبه © با برخورد به عملوندها آنها را در يشته 201)8/1) ميكنيم © با برخورد با عملكرها » دو داده موجود در بالاى يشته <000©)شده و عمل مورد نظر بر روى آنها انجام و حاصل دريشته ,//5)0)8) میشود.

صفحه 70:
:: امثال برای محاسبه عبارت زیر یک کامپایلر ممکن است کد زیر را تولید نماید. ‎webto*d‏ ‏عبارت معادل 860) بصورت زیر خواهد بود: و 1 مس ‎coor‏ ‏0 ‎ah 9 ” ۰ 1‏ م۰ : { ۳ 5 ‎eee‏ ‏در اینصورت محتوی پشته بصورت زیر خواهد بود: ‎d‏ ‎ES‏ 8 5 ‎b 3 ۳۳‏ 3 b POGW ۶ POGHL ‏ی‎ POGHL d MOL COO por

صفحه 71:
© با مطالعه پردازنده كمكى 0010205 كزارشى در مورد محاسبات اعشارى و دستورات يونصم بج#دصا! مورد استفاده دراين يردازنده ارائه دهيد.

MIPS پردازنده مقدمه دستورات Patterson & Henessi کتاب Amirkabir University of Technology Computer Engineering & Information Technology Department مقدمه ‏ ‏ ‏ MIPSیکی از اولین پردازندهای RISCاست که بصورت تجاری عرضه و موفق شده است .در سال 1984توسط تیمی دردانشگاه استانفورد طراحی شده است. پردازنده ای ساده ولی در عین حال قوی است. در تجهیزات مختلفی بصورت 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 ° ° ° ‏r 31 ‏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 عالوه بر ر جیسترهای فوق :دیگری نیز میباشد  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) برای اینکه برنامه نویسی اسمبلی راحت تر باشد به هر رجیستر اسمی داده شده است انواع داده حمایتشده هایحمایت دادههای داده شده Integer ••Integer 8-bitchar char ••8-bit 16-bithalf-word half-word ••16-bit 32-bitword word ••32-bit 64-bitdouble-word double-word ••64-bit Floatingpoint point ••Floating 32-bitsingle single ••32-bit precision precision 64-bitsingle single ••64-bit precision precision pairedsingle single ••paired precision precision IEEE754 754standard standard ••IEEE 0% 69% Doubleword 74% Word Halfword Byte 31% 19% 0% Int Avg. FP Avg. 7% 0% 0% 20% 40% 60% مقایسه رجوع به داده ها بر اساس اندازه آنها 80% MIPS حافظه 32 8 232  8 memory ADRS DATA CS WR Operation W R C S None Read selected address Write selected address x 0 1 0 1 1 8 OUT محل حافظه را232 یعنی میتواند تا. خط آدرس است32 دارایMIPS . در هر محل حافظه یک بایت داده قرار میگیرند.آدرس دهی نماید  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است دسترسی پیدا خواهد نمود. ترتیب بایت های یک کلمه در حافظه  :دو روش برای مشخص کردن ترتیب بایتها در حافظه وجود دارد 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 is some some base base address address BB is Big Endian Byte B+0 B+1 B+2 MSB B+3 B+3 LSB B+2 B+1 B+0Little Endian Byte ترتیب بایت های یک کلمه در حافظه Little Endian Big Endian similar to writing English 12 34 56 78 200 201 202 203 78 56 34 12 memory address B=200 is is the the base base address address in in this this example 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 دستورات محاسباتی اصول معماری: تمامی محاسبات بر روی داده های رجیسترها انجام میشود. یعنی نمیتوان عددی را که در حافظه ذخیره شده است با یک رجیستر جمع کرد .برای اینکار ابتدا باید محتوی حافظه به رجیستر به منتقل شده و عملیات بر روی داده های رجیستر ها انجام شود. ترتیب اپراندها همیشه ثابت است :اول مقصد نوشته میشود. نوشتن توضیحات در برنامه نویسی به زبان 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 بیتی با عالمت و یا بدون عالمت را با یکی از رجیستر های16 یک عدد . تفریق مینماید/ بیتی جمع 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 add $t0,$s1,$s2 # temp = g + h add $t1,$s3,$s4 # temp = i + j sub $s0,$t0,$t1 # f=(g+h)-(i+j) دستورات منطقی  AND     bit-wise OR between registers or $t1, $s0, $s1 NOR     bit-wise AND between registers and $t1, $s0, $s1 OR   MIPSبرخی ازدستورات منطقی موجود در Bit-wise NOR between registers nor $t1, $s0, $s1 nor $t1, $t0, $0 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 $t0  “jump register”. Jump to the instruction specified in register Example: if (i!=j) h=i+j; else h=i-j; beq $s4, $s5, Lab1 add $s3, $s4, $s5 j Lab2 Lab1:sub $s3, $s4, $s5 Lab2: ...  دستورات کنترلی ‏ اغلب در کنار دو دستور فوق از دستوردیگری نیز استفاده میشود: ‏ )// set if less than (w/ and w/o an immediate ‏ ‏if $s1 < $s2 then $t0 = 1 ‏else $t0 = 0 ‏slt and slti ‏slt $t0, $s1, $s2 از این دستور به همراه دستورات قبلی استفاده میشود: # $at = 1if $a0 < 5 #Branch if $a0 < 5 $at, $a0, 5 $at, $0, Label ‏slti ‏bne ‏ نحوه محاسبه آدرس در دستورات کنترلی ‏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 فرمت این دستورات از نوع I-Typeاست که در آن آدرس بصورت یک مقدار 16بیتی نوشته میشود .این مقدار بصورت یک افست نسبت به مقدار رجیستر 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 add $t0, $zero, $zero LoopBegin: slt $t2,$t0, $s1 Beq $t2, $zero, LoopEnd add $s2, $s2, $s0 add $t0, $t0, $t1 # i++ j LoopBegin LoopEnd: # sum = 0 #i=0 # is i < y ?? # sum = sum + x صدا زدن توابع و بازگشت ازآن از این دستور برای صدا زدن برنامه فرعی استفاده میشود: ‏jal: jump & link instruction ‏jal stores the return address in R31 and jumps to address in ‏rt این دستور آدرس برگشت را در رجیستر R31قرار میدهد و به آدرس ذکر شده دردستور انشعاب میکند. برای بازگشت از برنامه فرعی از دستور زیر استفاده میشود: ]jr Reg[R31 ذخیره رجیسترها در هنگام صدا زدن توابع تودرتو ‏ ‏ ‏ بعلت محدودیت رجیسترها الزم است تا محتوی رجیسترهائی را که برای تابع مهم هستند قبل از صدا زدن تابع ذخیره نموده و بعد از بازگشت از تابع آنها را بازیابی نمود. رجیسترها در پشته ذخیره خواهند شد .برای اینکه برنامه ها مجبور نباشند تمامی رجیسترها را ذخیره نمایند قاعده زیر رعایت میشود: تابع صدا زننده رجیسترهای زیر را ذخیره و بازیابی میکند: $v0-$v1$a0-$a3t0-$t9 ‏ تابع صدا شونده رجیسترهای زیر را ذخیره و بازیابی میکند: ‏s0-$s7$ $ra دستورت شیفت MIPS Shift Instructions • Format: op code/dest reg/src reg/shift amount sll $t4, $t0, 5 by 32) sra $t5, $t0, 2 (divide by 4), #shift left logical 5 bits (multiply #shift right arithmetic 2 bits #sign extended #shift right logical 1 bit. Sign bit srl $v0, $t0, 1 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 خالصه دستورات  MIPS — loading words but addressing bytes — arithmetic on registers only  Instruction Meaning add $s1, $s2, $s3 sub $s1, $s2, $s3 lw $s1, 100($s2) sw $s1, 100($s2) $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) فرمت دستورات فرمت و طول دستورات کامپیوتر پایه مانو ثابت و یکسان بود. در حالت کلی: ‏ ‏ اگر اندازه کد تولید شده مهم باشد از دستوراتی با فرمت متفاوت استفاده میشود اما اگر کارائی ( سرعت) مهم باشد از دستوراتی با طول یکسان استفاده میشود. ‏Variable: … … ‏Fixed: MIPS فرمت دستورات . بیت است32 طول هر دستور هر فیلد توضیحی در مورد. تقسیم میشودField هر دستور به تعدادی .دستور العمل ارائه میدهد از آنجائیکه دستورات مختلف نیازمند ارائه توضیحات مختلفی هستند لذا سه نوع فرمت مختلف ( ولی با طول یکسان) برایMIPS در .دستورات در نظر گرفته شده است  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 I-Type opcode 6 R-Type opcode 6 J-Type opcode 5 5 16 rs rd immediate 5 5 5 rs rt rd shamt func 5 6 26 Offset added to PC 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 5 5 5 6 rs rt 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 5 5 16 rs rt immediate I-Type Format  Opcode      rs: base register rt:    lw: 35 (100011) Similarity in opcode for lw & sw simplifies hardware sw: 43 (101011) opcode value differentiates I- and R-Type instructions 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 5 5 ‏immediate ‏rt ‏rs 6 ‏I-Type Format opcode برای دستورات 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 6 ‏opcode ‏J-Type Format دستورات پرش غیرشرطی به فرم 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 + Wo 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 Wo rd Wo rd Pseudo-instructions   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: $a0  li $a0, 2000 # Load immediate 2000 into move $a1, $t0 # Copy $t0 into $a1 They are probably clearer than their corresponding MIPS instructions: add add $a0, $0, 2000 $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 3 words 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 lw lw addi jr   $s0, $t0, $t1, $sp, $ra 0($sp) 4($sp) 8($sp) $sp, 12 we did not have to restore $t0-$t9 we do need to restore $s0-$s7 # # # # restore restore restore restore $s0 $t0 $t1 sp (caller save) (must be preserved by callee) نمایش لهستانی معکوس )Reverse Polish Notation (RPN روش معمولی نمایش عبارات ریاضی: ‏A*B+C*D روش PNبرای نمایش عبارات ریاضی :عملگرها قبل از عملوندها قرارمیگیرند. ‏AB*CD*+ روش RPNبرای نمایش عبارات ریاضی :عملگرها بعد از عملوندها قرا میگیرند +*AB*CD استفاده از پشته برای پیاده سازی RPN در برخی ماشینهای حساب و کامپیوترها از ترکیب پشته و ‏RPNبرای محاسبه عبارات ریاضی استفاده میکنند. ابتدا عبارت بصورت RPNنوشته میشود ) معموال اینکار توسط کامپایلر انجام میشود( در هنگام محاسبه ‏ ‏ با برخورد به عملوندها آنها را در پشته PUSHمیکنیم با برخورد با عملگرها ،دو داده موجود در باالی پشته POPشده و عمل مورد نظر بر روی آنها انجام و حاصل درپشته PUSH میشود. مثال برای محاسبه عبارت زیر یک کامپایلر ممکن است کد زیر را ;a= b + c * d تولید نماید. ‏b ‏c ‏d عبارت معادل RPNبصورت زیر خواهد بود: +*bcd ‏a در اینصورت محتوی پشته بصورت زیر خواهد بود: ‏PUSH ‏PUSH ‏PUSH ‏MUL ‏ADD ‏POP ‏d ‏b+c*d ‏pop ‏ADD ‏c*d ‏c ‏c ‏b ‏b ‏b ‏MUL ‏PUSH d ‏PUSH c ‏b ‏PUSH b تمرین: با مطالعه پردازنده کمکی MIPSگزارشی در مورد محاسبات اعشاری و دستورات floating pointمورد استفاده دراین پردازنده ارائه دهید.

51,000 تومان