Professional Documents
Culture Documents
kiến trúc bộ lệnh MIPS
kiến trúc bộ lệnh MIPS
kiến trúc bộ lệnh MIPS
Phm Tun Sn
ptson@fit.hcmuns.edu.vn
Mc tiu
Sau bi ny, SV c kh nng:
C kh nng lp trnh hp ng MIPS Gii thch quan im thit k b lnh MIPS Trnh by cc vn cn quan tm khi thit k mt b lnh C kh nng t thit k mt b lnh theo mt quan im no
Ni dung
Kin trc b lnh MIPS Cc vn khi thit k b lnh Quan im thit k b lnh MIPS
Mn hc s s dng kin trc MIPS minh ha. Ti sao s dng MIPS ging dy thay v Intel 80x86?
Trong , 8 thanh ghi thng c s dng thc hin cc php tnh c nh s $16 $23.
$16 - $23 ~ $s0 - $s7 (saved register)
6
(tng ng vi bin C)
Lnh tr:
sub $s3,$s4,$s5 (tr c du trong MIPS) subu $s3,$s4,$s5 (tr khng du trong MIPS) tng ng vi: d = e - f (trong C) trong cc thanh ghi $s3,$s4,$s5 (trong MIPS) tng ng vi cc bin d, e, f (trong C)
8
Ch : mt lnh trong C c th gm nhiu lnh MIPS. Ti sao khng xy dng cc lnh MIPS c nhiu ton hng ngun hn ? Ghi ch: k t # dng ch thch trong hp ng cho MIPS
10
Thao tc lun l
Cc thao tc s hc xem d liu trong thanh ghi nh mt gi tr n (s nguyn c du/ khng du) Cn c cc thao tc trn tng bit d liu thao tc lun l Cc thao tc lun l xem d liu trong thanh ghi l dy 32 bit thay v mt gi tr n. 2 loi thao tc lun l:
Php ton lun l Php dch lun l
13
Lnh lun l
C php:
opt opr,opr1,opr2 Trong : opt Tn thao tc opr Thanh ghi (ton hng ch) cha kt qu opr1 Thanh ghi (ton hng ngun th 1) opr2 Thanh ghi hoc hng s (ton hng ngun th 2)
Ti sao ton hng ngun th 1 khng th l hng s ? Ti sao cc lnh lun l (v hu ht cc lnh ca MIPS s hc) u c 1 thao tc v 3 ton hng (nh cc lnh s hc) ?
14
15
not:
A nor 0 = not (A or 0) = not (A)
Ti sao khng c lnh not m li s dng lnh nor thay cho lnh not ? Ti sao khng c cc lnh tnh ton lun l cn li nh: xor, nand, ?
16
mask:
1011 0110 1010 0100 0011 1101 1001 1010 0000 0000 0000 0000 0000 1111 1111 1111 Kt qu sau khi thc hin and: 0000 0000 0000 0000 0000 1101 1001 1010 mask 12 bit cui
17
S dng cc php ton lun l (2/3) Gi s $t0 gi gi tr ca dy bit u v $t1 cha gi tr mask trong v d trn, ta c lnh sau:
and $t0,$t0,$t1
18
Lnh dch
C php:
opt opr,opr1,opr2 Trong opt Tn thao tc opr Ton hng ch cha kt qu (thanh ghi) opr1 Ton hng ngun th 1 (thanh ghi) opr2 S bit dch (hng s < 32)
Cc lnh:
1. sll (shift left logical): dch tri lun l, thm vo cc bit 0 bn phi 2. srl (shift right logical): dch phi lun l 0 v thm vo cc bit 0 bn tri 3. sra (shift right arithmetic): dch phi s hc, thm vo cc bit du bn tri
20
0
V d
sll $s1,$s2,2 # dch tri lun l $s2 2 bit $s2 = 0000 0000 0000 0000 0000 0000 0101 0101 = 85 $s1 = 0000 0000 0000 0000 0000 0001 0101 0100 = 340 (8522) srl $s1,$s2,2 # dch phi lun l $s2 2 bit $s2 = 0000 0000 0000 0000 0000 0000 0101 0101 = 8 $s1 = 0000 0000 0000 0000 0000 0000 0001 0101 = 21 (85/22) sra $s1,$s2,2 # dch phi s hc $s2 2 bit $s2 = 1111 1111 1111 1111 1111 1111 1111 0000 = -16 $s1 = 1111 1111 1111 1111 1111 1111 1100 0000 = -4 (-16/22)
21
Nhn xt
C th s dng cc php dch tri thc hin php nhn cho 2 m:
a *= 8; Tng ng vi lnh: sll $s0,$s0,3 (trong C) (trong MIPS)
Tng t, s dng php dch phi thc hin php chia cho 2 m i vi s c du, s dng php dch s hc sra
22
23
25
27
10
32
Xc nh thao tc cng (cc lnh theo cu trc opcode = 0 R-Format c trng m thao tc opcode = 0) funct = 32 rd = 8 (ton hng ch l $8 ~ $t0) rs = 9 (ton hng ngun th 1 l $9 ~ $t1) rt = 10 (ton hng ngun th 2 l $10 ~ $t2) shamt = 0 (khng phi lnh dch)
28
0hex
16
10
opcode = 0 Xc nh thao tc dch tri lun l funct = 0 rd = 10 (ton hng ch l $10 ~ $t2) rs = 0 (khng dng trong php dch) rt = 16 (ton hng ngun l $16 ~ $s0) shamt = 4 (s bit dch l 4)
29
Lnh np, lu d liu cn t nht 1 ton hng ngun v 1 ton hng ch Cu trc R-Format
opcode
rs
rt
rd
shamt funct
S dng cu trc R-Format cho cc lnh np, lu d liu ? Nu khng s dng cu trc R-Format, hng gii quyt nhm gim thiu thay i so vi cu trc ny ?
32
Xc nh a ch vng nh
opcode opcode rs rs rt rt rd shamt funct immediate
34
sw $t0,12($s0)
36
Con tr vs. gi tr
Nguyn tc: Mt thanh ghi c th lu bt k gi tr 32 bit no, c th l s nguyn (c du/ khng du), c th l a ch ca mt vng nh Nu ghi add $t2,$t1,$t0 th $t0 v $t1 lu gi tr Nu ghi lw $t2,0($t0) th $t0 cha mt a ch (vai tr nh mt con tr)
37
Not Aligned
Mt s lu v nh v d liu trong b nh MIPS truy xut d liu trong b nh theo nguyn tc Alignment Restriction Tuy nhin, b nh ngy nay li c nh a ch theo tng byte (8 bit). Lu : truy xut vo mt t nh sau mt t nh th cn tng 1 lng 4 byte ch khng phi 1 byte Do , lun nh rng i vi cc lnh lw v sw th di (offset) phi l bi s ca 4
40
V d
Gi s A l mng cc t nh g: $s1, h: $s2, $s3: a ch bt u ca A Cu lnh C : g = h + A[5]; c bin dch thnh lnh my MIPS nh sau: lw $t0,20($s3) # $t0 gets A[5] add $s1,$s2,$t0 # $s1 = h+A[5]
41
Nu khng mun cc bit cn li c gi tr theo bit du, s dng lnh: lbu (load byte unsigned)
43
Lnh np, lu t nh (2 byte) MIPS cn h tr cc lnh np, lu t nh (2 byte) nh nhm h tr cc thao tc vi k t 2 byte (Unicode). Ti sao ?
load half: lh (lu t nh (2 byte) vo 2 byte thp ca thanh ghi) store half: sh
44
Tn d hiu nh sau:
opcode rs rt immediate
Ch : ch c trng immediate l khng nht qun vi cu trc R-format. Tuy nhin, quan trng nht l trng opcode khng thay i so vi cu trc R-Format
46
rs: thanh ghi ngun, thng cha ton hng ngun th 1 rt (register target): thanh ghi ch, thng c dng cha kt qu ca lnh. immediate: 16 bit, c th biu din s nguyn t -215 ti (215-1)
ln cha gi tr di (offset) t a ch trong thanh ghi c s rs nhm phc v vic truy xut b nh trong lnh lw v sw.
47
opcode
rs
rt
immediate
Ti sao li cn cc lnh thao tc vi hng s trong khi cc lnh ny u c th c thc hin bng cch kt hp cc lnh np, lu vi cc thao tc trn thanh ghi ?
48
17
16
10
opcode = 8: xc nh thao tc cng hng s rs = 17 (ton hng ngun th 1 l $17 ~ $s1) rt = 16 (ton hng ch l $16 ~ $s0) immediate = 10
Mun thc hin php tr mt hng s th sao? addi $s0,$s1,-10 Ti sao khng c lnh tr hng s, chng hn subi?
49
Vn ca I-Format (1/3)
Vn :
Cc lnh thao tc vi hng s (addi, lw, sw,) c cu trc I-Format, ngha l trng hng s (immediate) ch c 16 bit. opcode rs rt immediate
Nu mun thao tc vi cc hng s 32 bit th sao ? Tng kch thc immediate thnh 32 bit? tng kch thc cc lnh thao tc vi hng s c cu trc I-Format
50
Vn ca I-Format (2/3)
Gii php:
H tr thm lnh mi nhng khng ph v cc cu trc lnh c
Lnh mi:
lui register, immediate Load Upper Immediate a hng s 16 bit vo 2 byte cao ca mt thanh ghi Gi tr cc bit 2 byte thp c gn 0 Lnh ny c cu trc I-Format
51
Vn ca I-Format (3/3)
Gii php (tt):
Lnh lui gii quyt vn nh th no? V d: mun cng gi tr 32 bit 0xABABCDCD vo thanh ghi $t0
khng th thc hin: addi $t0,$t0, 0xABABCDCD m thc hin nh sau: lui $at, 0xABAB ori $at, $at, 0xCDCD add $t0,$t0,$at
52
Trn s trong php tnh s hc (1/2) Nhc li: trn s xy ra khi kt qu php tnh vt qu chnh xc gii hn cho php (ca my tnh). V d (s nguyn khng du 4-bit):
+15 1111 +3 0011 +18 10010 Nhng khng c ch cha c 5 bit nn ch cha kt qu 4 bit 0010, l +2 sai.
53
Trn s trong php tnh s hc (2/2) Mt s ngn ng c kh nng pht hin trn s (Ada), mt s khng (C) MIPS cung cp 2 loi lnh s hc:
Cng (add), cng hng s (addi) v tr (sub) pht hin trn s Cng khng du (addu), cng hng s khng du (addiu) v tr khng du (subu) khng pht hin trn s
Trc nghim
A. B.
C.
Kiu cn c xc nh khi khai bo bin trong C v khi s dng lnh trong MIPS. Do ch c 8 thanh ghi lu tr ($s) v 8 thanh ghi tm ($t), nn khng th chuyn t chng trnh C c nhiu hn 16 bin thnh chng trnh MIPS. Nu p (lu trong $s0) l mt con tr tr ti mng ints, th p++; s tng ng vi addi $s0 $s0 1
1: 2: 3: 4: 5: 6: 7: 8:
Trc nghim
Hy chuyn lnh *x = *y (trong C) thnh lnh tng ng trong MIPS (cc con tr x, y c lu trong $s0 $s1)
A: B: C: D: E: F: G: H: add add lw lw lw sw lw sw $s0, $s1, $s0, $s1, $t0, $t0, $s0, $s1, $s1, zero $s0, zero 0($s1) 0($s0) 0($s1) 0($s0) 0($t0) 0($t0)
0: 1: 2: 3: 4: 5: 6: 7: 8: 9:
A B C D EF EG FE FH HG GH
56
Trc nghim
Lnh no sau y c biu din tng ng vi 3510?
1. add $0, $0, $0 opcode 2. subu $s0,$s0,$s0 opcode opcode 3. lw $0, 0($0) 4. addi $0, $0, 35 opcode 5. subu $0, $0, $0 opcode 6. Lnh khng phi l dy bit rs rs rs rs rs rt rt rt rt rt rd rd shamt funct shamt funct offset immediate rd shamt funct
S hiu v tn ca cc thanh ghi: 0: $0, .. 8: $t0, 9:$t1, ..15: $t7, 16: $s0, 17: $s1, .. 23: $s7 M thao tc v m chc nng (nu c) add: pcode = 0, funct = 32 subu: opcode = 0, funct = 35 addi: opcode = 8 lw: opcode = 35
57
p n
Lnh no sau y c biu din tng ng vi 3510? 1. add $0, $0, $0 2. subu $s0,$s0,$s0 3. lw $0, 0($0) 4. addi $0, $0, 35 5. subu $0, $0, $0
6. Lnh khng phi l dy bit S hiu v tn ca cc thanh ghi: 0: $0, .. 8: $t0, 9:$t1, ..15: $t7, 16: $s0, 17: $s1, .. 23: $s7 M thao tc v m chc nng (nu c) add: pcode = 0, funct = 32 subu: opcode = 0, funct = 35 addi: opcode = 8 lw: opcode = 35
58
0 0 35 8 0
0 16 0 0 0
0 16 0 0 0
0 16
0 0
32 35 0 35
35
...
Nu ch vi cc lnh x l d liu (thao tc s hc, thao tc lun l, np, lu d liu) th ch dng li vic xy dng 1 calculator. Ngoi cc lnh x l d liu, my tnh (computer) cn phi h tr cc lnh iu khin qu trnh thc thi cc lnh. Trong NNLT C, bn bao gi s dng lnh goto nhy ti mt nhn (labels) cha ?
59
Lnh if trong C
2 loi lnh if trong C
if (condition) clause if (condition) clause1 else clause2
(true) i == j f=g+h
Lnh r nhnh: nh v theo thanh ghi PC (1/4) Cc lnh r nhnh c iu kin c cu trc I-Format
opcode rs rt immediate
opcode xc nh beq hay bne rs v rt cha cc gi tr cn so snh immediate cha a ch (nhn) cn nhy ti ? immediate ch c 16 bit, ngha l ch c th nhy ti a ch t 0 216 (65,535) ?
63
Lnh r nhnh: nh v theo thanh ghi PC (3/4) Ch : mi lnh c kch thc 1 t nh (32 bit) v MIPS truy xut b nh theo nguyn tc nguyn tc Alignment Restriction, do n v ca immediate, khong cch so vi PC, l t nh Nh vy, cc lnh r nhnh c th nhy ti cc a ch c khong cch 215 t nh t PC ( 217 bytes).
65
3
67
Mt s vn ca nh v theo thanh ghi PC Gi tr cc trng ca lnh r nhnh c thay i khng nu di chuyn m ngun ? Nu phi nhy ra ngoi khong 215 lnh t lnh r nhnh th sao ? Tng kch thc trng immediate tng kch thc lnh r nhnh ?
68
Cu trc J-Format
MIPS h tr lnh j (v lnh jal s hc sau) cho php nhy ti bt k ni no trong b nh. Mi lnh 32 bit nn l tng nht l c th nhy trong khong 232 (4 Gi) b nh. Tuy nhin, mi lnh cn c trng opcode (6-bit ?) xc nh chc nng ca lnh. Hnh thnh mt cu trc lnh mi JFormat, nhng vn nht qun vi cc cu trc lnh tn ti R-Format v I-Format
69
Cu trc J-Format
Cu trc lnh J-Format nh sau: 6 + 26 = 32 bit 6 bits 26 bits Tn d nh nh sau opcode target address Ch :
Gi trng opcode ging nh cu trc R-format v Iformat. Kt hp tt c cc trng cn li thnh trng a ch ch (target address) c kch thc ln hn. Tng t lnh r nhnh, a ch ch ca lnh nhy c tnh theo n v t nh
70
Cu trc J-Format
Nh vy, vi cu trc J-Format, c th nhy trong khong 226 C ngha l khng th nhy ti cc a ch t 227 ti 232 ?
Tuy nhin, nhu cu ny l khng cn thit v chng trnh thng khng qu ln nh vy (thng trong gii hn 256 MB) Nu cn nhy ti cc a ch ny, MIPS h tr lnh jr (s c hc sau).
71
C th vit li nh sau:
Loop:
Chuyn thnh lnh MIPS nh sau: Loop: sll $t1,$s3,2 # $t1= 4*i add $t1,$t1,$s5 # $t1=addr A lw $t1,0($t1) # $t1=A[i] add $s1,$s1,$t1 # g=g+A[i] add $s3,$s3,$s4 # i=i+j bne $s3,$s2,Loop # goto Loop if i!=h
72
Vit li di dng goto, chuyn thnh cc lnh MIPS s dng cc lnh r nhnh c iu kin
73
So snh khng bng trong MIPS (3/4) Cc php so snh cn li >, and th sao? C th thc hin php >, , bng cch kt hp lnh slt v cc lnh r nhnh? Ti sao MIPS khng c 3 lnh so snh tng ng, chng hn sgt, sle, sge ?
76
Hng s trong so snh khng bng MIPS h tr lnh slti thc hin so snh khng bng vi hng s. Ti sao?
C C
Hu ch i vi vng lp for
if (g >= 1) goto Loop Loop: . . . # # # # # $t0 = 1 if $s0<1 (g<1) goto Loop if $t0==0 (if (g>=1))
78
80
Trc nghim
Loop:addi slti beq slt bne $s0,$s0,-1 $t0,$s1,2 $t0,$0 ,Loop $t0,$s1,$s0 $t0,$0 ,Loop # # # # # i = i - 1 $t0 = (j < 2) goto Loop if $t0 == 0 $t0 = (j < i) goto Loop if $t0 != 0 0: 1: 2: 3: 4: 5: 6: 7: 8: 9: j j j j j j j j j j < < > < < > 2 2 2 2 2 2 2 2 2 2 && && && && && || || || || || j j j j j j j j j j < < < < < <
81
($s0=i, $s1=j)
Biu thc iu kin (C) no trong cu lnh while (bn di) tng ng vi on lnh MIPS trn?
do {i--;} while(__);
i i i i i i i i i i
Th tc trong C
main() { int a,b; ... ... sum(a,b); ... } /* really dumb mult function */ int sum (int x, int y){ return x+y; } - Th tc c chuyn thnh lnh my nh th no ? - D liu no c lu tr nh th no ?
82
Nhn xt
Khi gi th tc th lnh tip theo c thc hin l lnh u tin ca th tc C th xem tn th tc l mt nhn v li gi th tc l mt lnh nhy ti nhn ny
sum(a,b); ... int sum (...) j ... sum: sum # nhy ti # nhn sum
Sau khi thc hin xong th tc phi quay v thc hin tip lnh ngay sau li gi th tc
return ... j ?
83
V d
C M I P S
... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } a ch 1000 1004 1008 1012 1016 2000 2004 add $a0,$s0,$zero # x = a add $a1,$s1,$zero # y = b addi $ra,$zero,1016 # lu a ch # quay v vo $ra=1016 j sum #nhy ti nhn sum ... sum: add $v0,$a0,$a1 jr $ra # nhy ti a ch # trong $ra
Ghi ch: tt c cc lnh MIPS u c kch thc 4 byte (32 bit). Ti sao ?
84
Lu tr d liu
MIPS h tr thm mt s thanh ghi lu tr cc d liu phc v cho th tc:
i s Kt qu tr v Bin cc b a ch quay v $a0, $a1, $a2, $a3 $v0, $v1 $s0, $s1, , $s7 $ra
Nu c nhiu d liu (i s, kt qu tr v, bin cc b) hn s lng thanh ghi k trn ? S dng thm nhiu thanh ghi hn Bao nhiu thanh ghi cho ? S dng ngn xp (stack).
85
Nhn xt
... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; }
Hi: Ti sao li dng jr ? M khng n gin dng j? Tr li: th tc sum c th c gi nhiu ch khc nhau, do v tr quay v mi ln gi khc nhau s khc nhau.
M I P S
86
Nhn xt
Thay v phi dng 2 lnh lu a ch quay v vo $ra v nhy ti th tc:
1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #goto sum
MIPS cn h tr 1 lnh jal (jump and link) thc hin 2 cng vic trn:
1008 jal sum # $ra=1012,goto sum
Ti sao lai thm lnh jal? (khng cn phi xc nh tng minh a ch quay v trong $ra). L do no khc ?
87
Cc lnh mi
jal (jump and link):
C php: jal label 1 (link): Lu a ch ca lnh k tip vo thanh ghi $ra (ti sao l lnh k tip m khng phi l lnh hin ti?) 2 (jump): nhy ti nhn label C php: jr register Nhy ti a ch nm trong thanh ghi register thay v nhy ti 1 nhn.
$ra
88
Bi tp
- Th tc c chuyn main() { int i,j,k,m; thnh lnh my ... nh th no ? i = mult(j,k); ... - D liu no c m = mult(i,i); ... lu tr nh th no ? } /* really dumb mult function */ int mult (int mcand, int mlier){ int product; product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; }
89
Th tc lng nhau
int sumSquare(int x, int y) { return mult(x,x)+ y; } Th tc sumSquare gi th tc mult. Vn