You are on page 1of 107

TH028 Kin trc my tnh v hp ng Bi 6.

Kin trc b lnh 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

Kin trc b lnh


Cng vic c bn nht ca CPU l thc thi cc lnh (instruction). Cc CPU khc nhau ci t cc tp lnh khc nhau. Tp hp cc lnh m mt CPU no ci t gi l kin trc b lnh (Instruction Set Architecture ISA).
V d: Intel 80x86 (Pentium 4), IBM/Motorola PowerPC (Macintosh), MIPS, Intel IA64, ...

Mn hc s s dng kin trc MIPS minh ha. Ti sao s dng MIPS ging dy thay v Intel 80x86?

Lnh s hc trong MIPS


C php:
opt opr,opr1,opr2 trong : opt Tn thao tc (ton t, tc t) opr Thanh ghi (ton hng, tc t ch) cha kt qu opr1 Thanh ghi (ton hng ngun th 1) opr2 Thanh ghi hoc hng s (ton hng ngun th 2)
5

Ton hng thanh ghi


MIPS h tr 32 thanh ghi nh s t $0 - $31. Ti sao l 32 ? d s dng, cc thanh ghi cn c th c truy xut thng qua tn ca n. Mi thanh ghi c kch thc 32 bit. Ti sao l 32 ?
Trong MIPS, nhm 32 bit c gi l mt t (word)

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)

Mt s c im ca ton hng thanh ghi


ng vai tr ging nh bin trong cc NNLT cp cao (C, Java). Tuy nhin, khc vi bin ch c th gi gi tr theo kiu d liu c khai bo trc khi s dng, thanh ghi khng c kiu, thao tc trn thanh ghi s xc nh d liu trong thanh ghi s c i x nh th no. u im: b x l truy xut thanh ghi nhanh nht (hn 1 t ln trong 1 giy) v thanh ghi l mt thnh phn phn cng thng nm chung mch vi b x l. Khuyt im: do thanh ghi l mt thnh phn phn cng nn s lng c nh v hn ch. Do , s dng phi kho lo.

Cng, tr s nguyn (1/4)


Lnh cng:
add $s0,$s1,$s2 (cng c du trong MIPS) addu $s0,$s1,$s2 (cng khng du trong MIPS) tng ng vi: a = b + c (trong C) trong cc thanh ghi $s0,$s1,$s2 (trong MIPS) tng ng vi cc bin a, b, c (trong 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

Cng, tr s nguyn (2/4)


Lu : ton hng trong cc lnh trn phi l thanh ghi Trong MIPS, lnh thao tc vi s khng du c k t cui l u unsigned. Cc thao tc khc l thao tc vi s c du. S nguyn c du c biu din di dng b 2. Lm sao bit c mt php ton (v d a = b+c) l thao tc trn s c du hay khng du ? C th s dng 1 ton hng ng 2 vai tr va l ton hng ngun, va l ton hng ch lnh ch cn 2 ton hng. Ti sao khng ?
9

Cng, tr s nguyn (3/4)


Lm th no thc hin cu lnh C sau y bng lnh my MIPS? a=b+c+d-e Chia nh thnh nhiu lnh my
add $s0, $s1, $s2 add $s0, $s0, $s3 sub $s0, $s0, $s4 # a = b + c # a = a + d # a = a - e

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

Cng, tr s nguyn (4/4)


Lm th no thc hin dy tnh sau? f = (g + h) - (i + j) MIPS h tr thm 8 thanh ghi tm nh s $8 $15 lu cc kt qu trung gian $8 - $15 ~ $t0 - $t7 (temporary register) Nh vy dy tnh trn c th c thc hin nh sau:
add $t0,$s1,$s2 # temp = g + h add $t1,$s3,$s4 # temp = i + j sub $s0,$t0,$t1 # f=(g+h)-(i+j)
11

Thanh ghi Zero


Lm sao thc hin php gn trong MIPS ? MIPS nh ngha thanh ghi zero ($0 hay $zero) lun mang gi tr 0 nhm h tr thc hin php gn v cc thao vi 0. V d:
add $s0,$s1,$zero (trong MIPS) tng ng vi f = g (trong C) Trong cc thanh ghi $s0,$s1 (trong MIPS) tng ng vi cc bin f, g (trong C) Lnh add $zero,$zero,$s0 Hp l ? ngha ?

Ti sao khng c lnh gn trc tip gi tr ca 1 thanh ghi vo 1 thanh ghi ?


12

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

Php ton lun l


2 php ton lun l c bn: AND v OR Bng chn tr:
A B A AND B A OR B 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 AND: kt qu l 1 ch khi tt c u vo u bng 1 OR: kt qu l 0 ch khi tt c u vo u bng 0

15

Lnh tnh ton lun l


Cc lnh:
and, or: ton hng ngun th 2 phi l thanh ghi nor: ton hng ngun th 2 phi l thanh ghi
nor $t0, $t1, $t3 # $t1 = ~($t1 | $t3)

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

S dng cc php ton lun l (1/3)


Nhn xt: bit no and vi 0 s ra 0, and vi 1 s ra chnh n. Php and c s dng gi li gi tr 1 s bt, trong khi xa tt c cc bit cn li. Bit no cn gi gi tr th and vi 1, bit no khng quan tam th and vi 0. Dy bit c vai tr ny gi l mt n (mask).
V d:

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

S dng php and chuyn t k t thng thnh k t hoa; t k t s thnh s

18

S dng cc php ton lun l (3/3)


Nhn xt: bit no or vi 1 s ra 1, or vi 0 s ra chnh n. Php or c s dng bt ln 1 s bt, trong khi gia nguyn gi tr tt c cc bit cn li. Bit no cn bt ln th or vi 1, bit no khng quan tm th or vi 0. V d, nu $t0 c gi tr 0x12345678, v $t1 c gi tr 0xFFFF th sau lnh: or $t0, $t0, $t1 $t0 s c gi tr 0x1234FFFF (ngha l gi li 16 bit cao v bt tt c 16 bit thp).
19

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

Biu din lnh


My tnh, hay ni chnh xc l CPU, hiu c cc lnh nh add $t0,$0,$0 ? Khng. Cc lnh nh add $t0,$0,$0 l mt cch th hin d hiu, gi l hp ng (Assembly) My tnh (CPU) ch hiu c cc bit 0 v 1. Dy bit m my tnh hiu c thc hin 1 cng vic gi l lnh my (machine language instruction). Mi lnh my MIPS c kch thc 32 bit (Ti sao ?), c chia lm cc nhm bit, gi l trng (field), mi nhm bit c mt vai tr trong lnh my.

23

Cu trc lnh MIPS


Cc lnh hc (add, addu, sub, subu, add, or, nor, sll, srl, sra) u c cu trc nh sau: 6 + 5 + 5 + 5 + 5 + 6 = 32 (bit) 6 5 5 5 5 6

d hiu, mi trng c t tn nh sau: opcode rs rt rd shamt funct

Cu trc trn c gi l R-Format Ti sao mi trng c kch thc nh vy ?


24

Cu trc R-Format (1/3)


opcode: m thao tc, cho bit lnh lm g funct: dng kt hp vi opcode xc nh lnh lm g (trng hp cc lnh c cng m thao tc opcode) Ti sao mi trng c kch thc 6 bit? Ti sao khng kt hp 2 trng opcode v funct thnh 1 trng duy nht 12-bit ?

25

Cu trc R-Format (2/3)


rs (Source Register): thanh ghi ngun, thng c dng cha ton hng ngun th 1 rt (Target Register): thanh ghi ngun, thng c dng cha ton hng ngun th 2 (misnamed) rd (Destination Register): thanh ghi ch, thng c dng cha kt qu ca lnh. Mi trng c kch thc 5 bit, ngha l biu din c cc s t 0-31 ( biu din 32 thanh ghi ca MIPS)
26

Cu trc R-Format (3/3)


shamt: trng ny cha s bit cn dch trong cc lnh dch. Trng ny c kch thc 5 bit, ngha l biu din c cc s t 0-31 ( dch cc bit trong 1 thanh ghi 32 bit). Nu khng phi lnh dch th trng ny c gi tr 0.

27

V d cu trc R-Format (1/2)


add $t0,$t1,$t2 Biu din lnh di dng nh phn

000000 01001 01010 01000 00000 100000


0 1 2 A 4 0 2 0 hex
hex

Gi tr thp phn tng ng ca tng trng

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

V d cu trc R-Format (2/2)


sll $t2,$s0,4 Biu din lnh di dng nh phn

000000 00000 10000 01010 00100 000000


hex

0 1 0 5 1 0 Gi tr thp phn tng ng ca tng trng

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

Ton hng vng nh (1/2)


Cc lnh hc ch thao tc trn d liu l s nguyn v dy bit nm trong cc thanh ghi D liu thc t khng n gin nh vy. Lm sao thao tc trn cc kiu d liu phc tp hn nh mng hay cu trc? Cn b nh lu mi d liu v lnh B x l np cc d liu v lnh ny vo cc thanh ghi x l ri lu kt qu ngc tr li b nh
30

Ton hng vng nh (2/2)


MIPS h tr cc lnh di chuyn d liu (Data transfer instructions) chuyn d liu gia thanh ghi v vng nh:
Vng nh vo thanh ghi (np - load) Thanh ghi vo vng nh (lu - store) Computer Processor Control (brain) Datapath Registers Memory Devices Input

Store (to) Load (from)


Output

Ti sao li khng h tr cc lnh thao tc trc tip trn vng nh ?


31

Thao tc trn vng nh


B nh l mng 1 chiu cc nh c a ch
. . . 3 2 1 0 a ch . . . 100 10 101 1 D liu

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

xc nh 1 vng nh trong lnh, cn 2 yu t:


Mt thanh ghi cha a ch 1 vng nh (xem nh con tr ti vng nh) Mt s nguyn (xem nh di (tnh theo byte) t a ch trong thanh ghi trn). Ti sao li c gi tr ny ?

a ch vng nh s c xc nh bng tng 2 gi tr ny. V d: 8($t0)


Xc nh mt vng nh c a ch bng gi tr trong thanh ghi $t0 cng thm 8 (byte)
33

Lnh di chuyn d liu (1/2)


C php:
opt opr,opr1(opr2) trong : opt - Tn thao tc opr - Thanh ghi lu t nh opr1 - Hng s nguyn opr2 - Thanh ghi cha a ch vng nh

34

Lnh di chuyn d liu (2/2)


Np 1 t d liu b nh (Load Word lw) vo thanh ghi
Data flow

lw $t0,12($s0) Lu 1 t d liu thanh ghi (Store Word sw) vo b nh


Data flow Lnh ny lu gi tr trong thanh ghi $t0 vo vng nh c a ch ($s0 + 12)
35

Lnh ny np t nh c a ch ($s0 + 12) vo thanh ghi $t0

sw $t0,12($s0)

Di chuyn d liu: Thanh ghi vo B nh


Ch : $s0 c gi l thanh ghi c s (base register) thng c dng lu a ch bt u ca mng hay cu trc 12 c gi l di (offset) thng c s dng truy cp cc phn t mng hay cu trc

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

Nguyn tc lu d liu trong b nh (1/2)


MIPS lu d liu trong b nh theo nguyn tc Alignment Restriction, ngha l cc i tng lu trong b nh phi bt u ti a ch l bi s ca kch thc i tng Nh vy, t nh phi bt u ti a ch l bi s K s hex cui ca 4 0 1 2 3 trong a ch: Aligned 0, 4, 8, or C
hex

Not Aligned

1, 5, 9, or Dhex 2, 6, A, or Ehex 3, 7, B, or Fhex


38

Nguyn tc lu d liu trong b nh (2/2)


MIPS lu tr d liu trong b nh theo nguyn tc Big Endian, ngha l i vi gi tr c kch thc ln hn 1 byte th byte s lu ti a ch thp, (vs. Little Endian trong kin trc x86) V d: lu tr gi tr 4 byte 12345678h trong b nh: a ch Big Endian Little Endian 0 12 78 1 34 56 2 56 34 3 78 12
39

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

Lnh np, lu 1 byte nh (1/2)


Ngoi cc lnh np, lu t nh (lw, sw), MIPS cn cho php np, lu tng byte nh nhm h tr cc thao tc vi k t 1 byte (ASCII). Ti sao ? load byte: lb store byte: sb C php tng t lw, sw V d
lb $s0, 3($s1) Lnh ny np gi tr byte nh c a ch ($s1 + 3) vo byte thp ca thanh ghi $s0.
42

Lnh np, lu 1 byte nh (2/2) 24 bit cn li s c gi tr theo bit du ca gi tr 1 byte (sign-extended)


xxxx xxxx xxxx xxxx xxxx xxxx xzzz zzzz byte gi tr theo bit du c np Bit du

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

C php tng t lw, sw

44

Vai tr ca thanh ghi vs. vng nh


Ti sao khng s dng ton b ton hng vng nh ? Ti sao khng xy dng tht nhiu thanh ghi khng phi dng ton hng vng nh ? Mt chng trnh trn my tnh cho d c vit bng bt c NNLT no, thc thi c trn my tnh, th u phi bin dch thnh cc lnh my iu g xy ra nu bin s dng trong cc chng trnh nhiu hn s lng thanh ghi?
Nhim v ca trnh bin dch: spilling
45

Cu trc I-Format (1/2)


Nh vy MIPS h tr thm 1 cu trc lnh mi: 6 + 5 + 5 + 16 = 32 bits
6 5 5 16

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

Cu trc I-Format (2/2)


opcode: m thao tc, cho bit lnh lm g (tng t opcode ca R-Format, ch khc l khng cn thm trng funct)
y cng l l do ti sao R-format c 2 trng 6-bit xc nh lnh lm g thay v mt trng 12-bit: nht qun vi cc cu trc lnh khc (I-Format) trong khi kch thc mi trng vn hp l.

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

Ton hng Hng s (1/2)


Cc hng s xut hin trong cc lnh dch v lnh di chuyn c gi l cc ton hng hng s Cc thao tc vi hng s xut hin rt thng xuyn, do , MIPS h tr mt lp cc lnh thao tc vi hng s (tn lnh kt thc bng k t i - immediate): addi, andi, ori, Cc lnh thao tc vi hng s c cu trc I-Format

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

Ton hng Hng s (2/2)


Lnh cng vi hng s (tng t nh lnh add, ch khc ton hng cui cng l mt hng s thay v l thanh ghi):
addi $s0,$s1,10 (cng hng s c du) addiu $s0,$s1,10 (cng hng s khng du) Biu din lnh di dng nh phn

001000 10001 10000 0000000000001010


Gi tr thp phn tng ng ca tng trng

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

Trnh bin dch s la chn cc lnh s hc tng ng


Trnh bin dch C trn kin trc MIPS s dng addu, addiu, subu
54

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:

ABC FFF FFT FTF FTT TFF TFT TTF TTT


55

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

Lnh if th 2 c th c din gii nh sau:


if (condition) goto L1; clause2; goto L2; L1: clause1; L2:
60

Lnh r nhnh ca MIPS


R nhnh c iu kin beq register1, register2, L1 beq ngha l Branch if (registers are) equal tng ng vi lnh if trong C nh sau: if (register1 == register2) goto L1 bne register1, register2, L1 bne ngha l Branch if (registers are) not equal tng ng vi lnh if trong C nh sau: if (register1 != register2) goto L1 R nhnh khng iu kin j label ngha l jump to label tng ng vi lnh trong C sau: goto label C th vit di dng lnh r nhnh c iu kin nh sau: beq $0,$0,label
61

Bin dch lnh if thnh lnh my MIPS


V d if (i == j) f=g+h; else f=g-h; V lc

(true) i == j f=g+h

(false) i == j? i != j f=g-h Exit

nh x bin vo thanh ghi:

f: $s0 g: $s1 h: $s2 i: $s3 j: $s4

Chuyn thnh lnh my MIPS:


beq sub j True: add Fin: $s3,$s4,True $s0,$s1,$s2 Fin $s0,$s1,$s2 # # # # branch i==j f=g-h(false) goto Fin f=g+h (true)
62

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 (2/4)


immediate cha khong cch so vi a ch nm trong thanh ghi PC (Program Counter), thanh ghi cha a ch lnh ang c thc hin Cch xc nh a ch ny gi l: PC-Relative Addressing (nh v theo thanh ghi PC) Lc ny trng immediate c xem nh 1 s c du cng vi a ch trong thanh ghi PC to thnh a ch cn nhy ti. Nh vy, c th nhy ti, lui 1 khong 215 (byte ?) t lnh s c thc hin, p ng hu ht cc yu cu nhy lp ca chng trnh (thng ti a 50 lnh).
64

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

Lnh r nhnh: nh v theo thanh ghi PC (4/4) Cch tnh a ch r nhnh:


Nu khng thc hin r nhnh: PC = PC + 4 PC+4 = a ch ca lnh k tip trong b nh Nu thc hin r nhnh: PC = (PC + 4) + (immediate * 4) Ti sao cng immediate vi (PC+4), thay v vi PC ? Nhn xt: trng immediate cho bit s lnh cn nhy qua ti c nhn.
66

V d cu trc I-Format ca lnh r nhnh


Loop:beq $t1,$0,End add $t0,$t0,$t2 addi $t1,$t1,-1 j Loop End: opcode = 4 (m thao tc ca lnh beq) rs = 9 (ton hng ngun th 1 l $t1 ~ $9) rt = 0 (ton hng ngun th 1 l $0) immediate = 3 ??? Biu din lnh di dng nh phn

000100 01001 00000 0000000000000011


Gi tr thp phn tng ng ca tng trng

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

Lp trong MIPS (1/2)


Lp trong C; A[] l mt mng cc s nguyn int
do { g = g + A[i]; i = i + j; } while (i != h); g = g + A[i]; i = i + j; if (i != h) goto Loop;

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

g, h, i, j, base of A $s1, $s2, $s3, $s4, $s5

nh x bin vo thanh ghi nh sau:

Lp trong MIPS (2/2)


3 kiu lp trong C:
while do while for

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 (1/4)


beq v bne dc s dng trong trng hp so snh bng (== v != trong C). Cn nhng trng hp so snh khng bng < v > th sao? MIPS h tr lnh:
Set on Less Than C php: slt reg1,reg2,reg3 Ngha l: reg1 = (reg2 < reg3); if (reg2 < reg3) reg1 = 1; Same thing else reg1 = 0; set ngha l set to 1, reset ngha l set to 0.
74

So snh khng bng trong MIPS (2/4)


Cu lnh sau: if (g < h) goto Less; #g:$s0, h:$s1 c chuyn thnh lnh MIPS nh sau slt $t0,$s0,$s1 # $t0 = 1 if g<h bne $t0,$0,Less # goto Less # if $t0!=0 # (if (g<h)) Less: Thanh ghi $0 lun cha gi tr 0, nn lnh bne v beq thng c dng so snh sau lnh slt. Cp slt bne tng ng if( < )goto
75

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

So snh khng bng trong MIPS (4/4)


# a:$s0, b:$s1 slt $t0,$s0,$s1 beq $t0,$0,skip <stuff> skip: # a:$s0, b:$s1 slt $t0,$s0,$s1 bne $t0,$0,skip <stuff> skip: # a:$s0, b:$s1 slt $t0,$s1,$s0 beq $t0,$0,skip <stuff> skip: # a:$s0, b:$s1 slt $t0,$s1,$s0 bne $t0,$0,skip <stuff> skip: # $t0 = 1 if a<b # skip if a >= b # do if a<b

# $t0 = 1 if a<b # skip if a<b # do if a>=b

# $t0 = 1 if a>b # skip if a<=b # do if a>b

# $t0 = 1 if a>b # skip if a>b # do if a<=b


77

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

M M slti $t0,$s0,1 I I P P beq $t0,$0,Loop S S


Cp slt

if (g >= 1) goto Loop Loop: . . . # # # # # $t0 = 1 if $s0<1 (g<1) goto Loop if $t0==0 (if (g>=1))
78

beq tng ng vi if( )goto

V d: lnh switch trong C (1/2)


switch (k) { case 0: f=i+j; break; /* k=0 */ case 1: f=g+h; break; /* k=1 */ case 2: f=gh; break; /* k=2 */ case 3: f=ij; break; /* k=3 */ } Vit li di dng cc lnh if nh sau:
if (k==0) f=i+j; else if (k==1) f=g+h; else if (k==2) f=gh; else if (k==3) f=ij;

nh x bin vo thanh ghi:


f:$s0, g:$s1, h:$s2, i:$s3, j:$s4, k:$s5
79

V d: lnh switch trong C (1/2)


Chuyn thnh lnh MIPS nh sau:
bne $s5,$0,L1 add $s0,$s3,$s4 j Exit L1: addi $t0,$s5,-1 bne $t0,$0,L2 add $s0,$s1,$s2 j Exit L2: addi $t0,$s5,-2 bne $t0,$0,L3 sub $s0,$s1,$s2 j Exit L3: addi $t0,$s5,-3 bne $t0,$0,Exit sub $s0,$s3,$s4 Exit: # # # # # # # # # # # # # # branch k!=0 k==0 so f=i+j end of case so Exit $t0=k-1 branch k!=1 k==1 so f=g+h end of case so Exit $t0=k-2 branch k!=2 k==2 so f=g-h end of case so Exit $t0=k-3 branch k!=3 k==3 so f=i-j

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

2000 sum: add $v0,$a0,$a1 2004 jr $ra # lnh mi

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.

Lnh jr (jump register)

2 lnh ny c s dng hiu qu trong th tc:


jal lu a ch quay v vo thanh ghi $ra v nhy ti th tc jr $ra Nhy ti a ch quay v c lu trong

$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

a ch quay v ca th tc sumSquare trong thanh ghi $ra s b ghi bi a ch tr v ca th tc mult khi th tc ny c gi Nh vy cn phi lu li a ch quay v ca th tc sumSquare (trong thanh ghi $ra ) trc khi gi th tc mult.

Trnh bin dch gii quyt vn ny

90

M hnh cp pht b nh ca C
Mt chng trnh C thc thi s c cp pht cc vng nh sau: a ch Vng nh c s dng trong qu trnh
$sp Con tr ngn xp Stack thc thi th tc nh lu cc bin cc b, lu a ch tr v,

Heap

Vng nh cha cc bin cp pht ng. V d: con tr C c cp pht ng bi hm malloc() Vng nh cha cc bin cp pht tnh ca mi chng trnh. V d: bin ton cc ca C M ngun chng trnh
91

Static

Code

S dng ngn xp
Con tr ngn xp, thanh ghi $sp, c s dng nh v vng ngn xp. s dng ngn xp, cn khai bo kch thc vng ngn xp bng cch tng gi tr con tr ngn xp. Lnh MIPS tng ng vi
int sumSquare(int x, int y) { return mult(x,x)+ y; }
92

S dng ngn xp
# x,y : $a0,$a1 sumSquare: addi $sp,$sp,-8 # # sw $ra, 4($sp) # # # # push sw $a1, 0($sp) add $a1,$a0,$zero # jal mult # lw $a1, 0($sp) # # # add $v0,$v0,$a1 # pop lw $ra, 4($sp) # # # # addi $sp,$sp,8 # jr $ra mult: ... khai bo kch thc ngn xp cn dng ct a ch quay v ca th tuc sumSquare vo ngn xp ct y vo ngn xp gn x vo $a1 gi th tc mult sau khi thc thi xong th tc mult, khi phc y t ngn xp mult()+y ly li a ch quay v ca th tc sumSquare lu vo ngn xp, a vo thanh ghi $ra kt thc dng ngn xp
93

Cc bc thc thi mt th tc
1) Lu tm cc d liu cn thit vo ngn xp. 2) Gn cc i s (nu c). 3) Gi lnh jal 4) Khi phc cc d liu lu tm vo ngn xp.

94

Cu trc c bn ca vic thc thi th tc


u th tc
entry_label: addi $sp,$sp, -framesize sw $ra, framesize-4($sp) # # # # ct a ch tr v ca th tc trong $ra vo ngn xp ra

Lu tm cc thanh ghi khc nu cn

Thn th tc
(c th gi cc th tc khc)

Cui th tc
Phc hi cc thanh ghi khc nu cn lw $ra, framesize-4($sp) addi $sp,$sp, framesize jr $ra # khi phc $ra

memory

95

Mt s nguyn tc khi thc thi th tc


Gi th tc bng lnh jal v quay v t li gi th tc bng lnh jr $ra 4 thanh ghi cha i s $a0, $a1, $a2 v $a3 Kt qu tr v cha trong thanh ghi $v0 (v $v1 nu cn) Phi tun theo nguyn tc s dng cc thanh ghi (register conventions)

96

Vai tr ca 32 thanh ghi ca MIPS


The constant 0 Reserved for Assembler Return Values Arguments Temporary Saved More Temporary Used by Kernel Global Pointer Stack Pointer Frame Pointer Return Address $0 $1 $2-$3 $4-$7 $8-$15 $16-$23 $24-$25 $26-27 $28 $29 $30 $31 $zero $at $v0-$v1 $a0-$a3 $t0-$t7 $s0-$s7 $t8-$t9 $k0-$k1 $gp $sp $fp $ra

97

Nguyn tc s dng thanh ghi (1/3)


$0: Khng thay i. Lun bng 0. $s0-$s7: Khi phc nu thay i. Rt quan trng. Nu th tc c gi (callee) thay i cc thanh ghi ny th n phi phc hi cc thanh ghi ny trc khi kt thc. $sp: Khi phc nu thay i. Thanh ghi con tr ngn xp phi c gi tr khng i trc v sau khi gi lnh jal , nu khng th tc gi (caller) s khng quay v c. D nh: tt c cc thanh ghi ny u bt u bng k t s!
98

Nguyn tc s dng thanh ghi (2/3)


$ra: C th thay i. Li gi lnh jal s lm thay i gi tr thanh ghi ny. Th tc gi lu li thanh ghi ny vo ngn xp nu cn. $v0-$v1: C th thay i. Cc thanh ghi ny cha cc kt qu tr v. $a0-$a3: C th thay i. y l cc thanh ghi cha i s. Th tc gi cn lu li gi tr nu n cn sau khi gi th tc. $t0-$t9: C th thay i. y l cc thanh ghi tm nn c th b thay i bt k lc no. Th tc gi cn lu li gi tr nu n cn sau cc li gi th tc.
99

Nguyn tc s dng thanh ghi (3/3) Tm tt nguyn tc s dng thanh ghi trong th tc
Nu th tc R gi th tc E, th th tc R phi lu vo ngn xp cc thanh ghi tm c th b s dng trc khi gi lnh jal. Th tc E phi lu li cc thanh ghi lu tr nu n dng cc thanh ghi ny. Nh: th tc gi/ th tc c gi ch cn lu cc thanh ghi tm/ thanh ghi lu tr n dng, khng phi tt c thanh ghi.
100

Trc nghim

int fact(int n){ if(n == 0) return 1; else return(n*fact(n-1));}

Khi chuyn sang MIPS A. C TH sao lu $a0 vo $a1 (v sau khng lu li $a0 hay $a1 vo ngn xp) lu li n qua nhng li gi qui. B. PHI lu $a0 vo ngn xp v n s thay i. C. PHI lu $ra vo ngn xp do cn bit a ch quay v

0: 1: 2: 3: 4: 5: 6: 7:

ABC FFF FFT FTF FTT TFF TFT TTF TTT


101

Trc nghim
r: ... ... jal e ... jr $ra # c ghi $s0,$v0,$t0,$a0,$sp,$ra,mem ### ct cc thanh ghi vo ngn xp? # gi th tc e # c ghi $s0,$v0,$t0,$a0,$sp,$ra,mem # quay v th tc gi r

e: ... # c ghi $s0,$v0,$t0,$a0,$sp,$ra,mem jr $ra # quay v th tc r Th tc r cn ct cc thanh ghi no vo ngn xp trc khi gi jal e? 0: 1: 2: 3: 4: 5: 6:

0 1 2 3 4 5 6

of of of of of of of

($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra)


102

p n
r: ... ... jal e ... jr $ra # c ghi $s0,$v0,$t0,$a0,$sp,$ra,mem ### ct cc thanh ghi vo ngn xp? # gi th tc e # c ghi $s0,$v0,$t0,$a0,$sp,$ra,mem # quay v th tc gi r

e: ... # c ghi $s0,$v0,$t0,$a0,$sp,$ra,mem jr $ra # quay v th tc r Th tc r cn ct cc thanh ghi no vo ngn xp trc khi gi jal e? 0: 1: 2: 3: 4: 5: 6:

0 1 2 3 4 5 6

of of of of of of of

($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra) ($s0,$sp,$v0,$t0,$a0,$ra)


Khng cn ct vo ngn xp Cn ct vo ngn xp
103

Mt s vn thit k b lnh
Thao tc
Nhng loi thao tc no? Bao nhiu thao tc? Thc hin cng vic g? phc tp ca cng vic?

Thanh ghi
S lng thanh ghi? Thao tc no thc hin trn thanh ghi no?

nh dng lnh
Kch thc lnh Kch thc cc trng S lng ton hng Cc kiu nh v ton hng
104

Kch thc lnh


Lnh cng di th cng c th c nhiu m thao tc, nhiu ton hng, truy xut c a ch vng nh ln hn, ngha l cng c kh nng thc hin c nhiu cng vic hn nhng Kch thc lnh nh hng v b nh hng bi:
Cu trc ng truyn bus
Chiu di lnh nn bng hoc l bi s ca ng truyn d liu t b nh ( rng bus d liu)

Kch thc v t chc b nh


Kch thc lnh sao cho c th truy xut c ton b nh. Kch thc lnh nn bng, t nht bi s ca mt n v b nh.

Tc CPU
Chnh lnh gia tc x l ca CPU v tc c b nh c th lm gim hiu nng ca ton b h thng (thc thi lnh nhanh hn np lnh nhiu) Gii php:
Dng lnh c kch thc ngn Dng b nh cache

Trong cng b lnh, cc lnh c kch thc khc nhau, m thao tc c kch thc khc nhau ?
105

RISC vs. CISC


Xu hng ban u l xy dng b lnh theo kin trc CISC, ngha l a vo CPU cng nhiu lnh cng tt v c th thc hin cc thao tc phc tp
Kin trc VAX c cc lnh thc hin nhn cc a thc !

RISC - Reduced Instruction Set Computing (Cocke IBM, Patterson, Hennessy, 1980s)
Gi b lnh nh v n gin d dng xy dng nhanh chng phn cng. Phn mm s thc hin cc thao tc phc tp t cc thao tc n gin hn ca phn cng.
106

4 nguyn tc thit k b lnh MIPS B lnh MIPS c xy dng theo kin trc RISC vi 4 nguyn tc sau:
n gin v c quy tc (Simplicity favors regularity) Cng nh gn cng x l nhanh (Smaller is faster) Tng tc x l cho nhng trng hp thng xuyn xy ra (Make the common case fast) Thit k tt i hi s tha hip tt (Good design demands good compromises)
107

You might also like