صفحه 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
]DRM[SP
SPSP+1
Push
SPSP-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مورد استفاده
دراین پردازنده ارائه دهید.