You are on page 1of 108

Bi 05: Kin trc MIPS

Phm Tun Sn ptson@fit.hcmus.edu.vn

Mc tiu
Sau bi ny, SV c kh nng:
Gii thch quan im thit k b lnh MIPS C kh nng lp trnh hp ng MIPS

B lnh
Cng vic c bn nht ca b x l l x l cc lnh my (instruction). Tp hp cc lnh m mt b x l no ci t gi l b lnh (Instruction Set). Cc b x l khc nhau ci t cc b lnh khc nhau.
V d: Pentium 4 (Intel), MIPS R3000 (MIPS Technology Inc), ARM2 (ARM), PowerPC 601 (IBM), SPARC V8 (Sun),

Cu hi
Mt chng trnh thc thi (.exe) chy trn b x l Pentium 3 (Intel) c th chy c trn b x l Pentium 4 (Intel) khng ? Mt chng trnh thc thi (.exe) chy trn mt b x l ca Intel c th chy c trn b x l ca AMD ?

Kin trc b lnh


Cc b x l khc nhau c cng kin trc b lnh (Instruction Set Architecture - ISA) c th thc thi cng mt chng trnh x86 (my tnh c nhn PC, laptop, netbook)
x86-32 (IA-32/ i386): Intel 80386, Intel 80486, Intel Pentium, AMD Am386, AMD Am486, AMD K5, AMD K6, x86-64: Intel 64 (Intel Pentium D, Intel Core 2, Intel Core i7, Intel Atom,), AMD64 (AMD Athlon 64, AMD Phenom , )

IA-64: Pentium Itanium (my ch - server) MIPS (h thng nhng embedded system v siu my tnh supercomputer)
MIPS32: R2000, R3000, R6000, MIPS64: R4000, R5000, R8000,

Ngoi ra, PowerPC (my ch, h thng nhng), SPARC 4 (my ch), ARM (h thng nhng),

4 nguyn tc thit k b lnh MIPS Cu trc lnh n gin v c quy tc (Simplicity favors regularity) Lnh v b lnh 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)

Mt s kho st v nhn xt
MIPS ch cn h tr 32 thanh ghi l , nh s t $0 - $31 Mi thanh ghi c kch thc 32 bit (4 byte) Cc php ton lun l v s hc nh
a=b+c a=b&c a = b << 3

gm:
Loi php ton 2 ton hng ngun + 1 ton hng ch
n gin v thao tc nhanh, cc ton hng l a ch thanh ghi (khng l a ch b nh) Trong php dch, ton hng th 2 l hng s

MIPS h tr nhiu loi lnh khc nhau: lnh tnh ton s hc, lun l, lnh thao tc b nh, lnh r nhnh, n gin v d dng trong vic truy xut b nh, tt c cc lnh u c chiu di 32 bit
Trong MIPS, nhm 32 bit c gi l mt t (word)

T , MIPS a ra cu trc lnh nh slide sau

Cu trc lnh R-Format (1/2)


6 opcode 5 rs 5 rt 5 rd 5 6 shamt funct

opcode: m thao tc, cho bit loi lnh g funct: dng kt hp vi opcode xc nh lnh lm g (trng hp cc lnh c cng m thao tc opcode)
Ti sao 2 trng opcode v funct khng nm lin nhau ?

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. Ti sao khng dng rt lm s bit dch ?
7

Cu trc R-Format (2/2)


rs (Source Register): cha a ch thanh ghi ngun th 1 rt (Target Register): cha a ch thanh ghi ngun th 2 (sai tn ?) rd (Destination Register): cha a ch thanh ghi ch
Mi trng c kch thc 5 bit, ngha l biu din c cc s t 0-31 ( biu din 32 thanh ghi ca MIPS)

V d cu trc lnh R-Format


Lnh my (di dng nh phn)

opcode

rs

rt

rd

shamt funct

000000 01001 01010 01000 00000 100000


0 1 2 A 4 0 2 0 hex Gi tr thp phn tng ng ca tng trng

10

32

opcode = 0 Xc nh thao tc cng (cc lnh theo cu trc R-Format c trng m thao tc opcode = 0) funct = 32 rd = 8 (ton hng ch l thanh ghi $8) rs = 9 (ton hng ngun th 1 l thanh ghi $9) rt = 10 (ton hng ngun th 2 l thanh ghi $10) shamt = 0 (khng phi lnh dch)

$8 = $9 + $10

Lnh hp ng s hc v lun l
C php: opt opr, opr1, opr2
Trong : opt Tn thao tc (ton t) 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)

10

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. 8 thanh ghi thng c s dng lu cc bin l $16 - $23, c t tn gi nh nh sau
$16 - $23 ~ $s0 - $s7 (saved register)
11

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)
12

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 trong C) l thao tc trn s c du hay khng du bin dch thnh lnh my tng ng (add hay addu) ?
13

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 my. Ghi ch: k t # dng ch thch trong hp ng cho MIPS Ti sao khng xy dng cc lnh MIPS c nhiu ton hng ngun hn ?
14

Cng, tr s nguyn (4/4)


Lm th no thc hin dy tnh sau? f = (g + h) - (i + j) 8 thanh ghi thng c s dng lu tm kt qu trung gian, nh s $8 - $15
$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)
15

V d m my ca lnh add
add $t0,$t1,$t2 M my (di dng nh phn)

000000 01001 01010 01000 00000 100000


0 1 2 A 4 0 2 0 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)
16

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 ?


17

Tnh ton lun l


Cc lnh:
and, or: ton hng ngun th 2 phi l thanh ghi
and $t0,$t0,$t1 or $t0, $t0, $t1

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, ?
18

Dch
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 = 85 $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)

Ton hng ngun th 2 phi l hng s


19

V d m my ca lnh sll
sll $t2,$s0,4 M my (di dng nh phn)

000000 00000 10000 01010 00100 000000


0 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)
20

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

6 opcode

5 rs

5 rt

5 rd

5 6 shamt funct

Trong cu trc R-format h tr cc lnh s hc v lun l ( tm hiu), cc ton hng rs, rt, td gi a ch cc thanh ghi Lm sao truy xut d liu trong b nh?
Cn ton hng gi a ch nh

C 2 hng gii quyt


Cho php rt, td lu a ch b nh. C kh thi ? To ra cu trc lnh khc thao tc vi b nh

Hi thm: c cn phi lu d liu trong b nh ri mi np vo thanh ghi khng? Ti sao khng np d liu ca 21 chng trnh trc tip vo cc thanh ghi x l ?

Cu trc lnh truy xut b nh


Lnh thao tc vi b nh cn t nht
1 ton hng ngun v 1 ton hng ch

Cu trc R-Format

opcode

rs

rt

rd

shamt funct

To cu trc lnh mi th no gim thiu thay i so vi cu trc R-Format Cu trc I-Format

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 cn 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 ($t0 + 8) (byte)

22

Cu trc I-Format
6 opcode 5 rs 5 rt 16 immediate

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 trong khi kch thc mi trng vn hp l.

rs: cha a ch thanh ghi ngun th 1 rt (register target): cha a ch thanh ghi ch. 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. 23

Lnh thao tc vi b nh
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

Nh vy, b x l np cc d liu (v lnh) vo cc thanh ghi x l ri lu kt qu ngc tr li b nh


24

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

25

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)
Lnh ny np t nh c a ch ($s0 + 12) vo thanh ghi $t0

Lu 1 t d liu thanh ghi (Store Word sw) vo b nh


Data flow

sw $t0,12($s0)
Lnh ny lu gi tr trong thanh ghi $t0 vo vng nh c a ch ($s0 + 12)
26

V d m my ca lnh lw
lw $t0,12($s0) M my (di dng nh phn)

100011 10000 01000 00000 00000 001100


8 E 0 8 0 0 0 Gi tr thp phn tng ng ca tng trng Chex

35

16

12

opcode = 35 (Xc nh thao tc np t nh) rs = 16 (ton hng ch l $16 ~ $s0) rt = 18 (ton hng ngun l $8 ~ $t0) immediate = 12 (hng s l 12)

27

ngha ca ton hng truy xut 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

28

V d truy xut mng


Gi s A l mng cc t nh a ch bt u ca A: $s3 g: $s1 h: $s2 Cu lnh C : g = h + A[5]; c bin dch thnh lnh MIPS nh sau: lw $t0,20($s3) # $t0 = A[5] add $s1,$s2,$t0 # $s1 = h+A[5] Ch :
A[5] l phn t th 5 ca mng A, mi phn t l mt t nh (word). Do , s tng ng vi t nh bt u ti a ch $s3 + 20
29

Nguyn tc lu tr v truy xut d liu trong b nh (1/2)


Nguyn tc Alignment Restriction: cc i tng lu trong b nh phi bt u ti a ch l bi s ca kch thc i tng MIPS lu v cho php truy xut d liu trong b nh theo nguyn tc Alignment Restriction, ngha l t nh phi bt u ti a ch l bi s ca 4 Lnh lw $t0,18($s3) c hp l khng ? K s hex cui 0 1 2 3 trong a ch:

Aligned Not Aligned

0, 4, 8, or Chex 1, 5, 9, or Dhex 2, 6, A, or Ehex 3, 7, B, or Fhex

30

Nguyn tc lu tr v truy xut 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 cao 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
31

Con tr vs. gi tr
Lu phn bit 2 trng hp sau (gi s x: $t0 , y: $t1, z: $t2)
Nu ghi th tng ng Nu ghi th tng ng add $t2,$t1,$t0 $t0 v $t1 lu gi tr z = x + y (trong C) lw $t2,0($t0) $t0 cha mt a ch (vai tr nh mt con tr) z = *x (trong C)
32

Lnh np, lu 1 byte nh


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).
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. 24 bit cn li s c gi tr theo bit du ca gi tr 1 byte (sign-extended) Nu khng mun cc bit cn li c gi tr theo bit du, 33 s dng lnh lbu (load byte unsigned)

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).
load half: lh (lu t nh (2 byte) vo 2 byte thp ca thanh ghi) store half: sh

C php tng t lw, sw Ti sao li h tr loi lnh ny trong khi vn c th s dng cc lnh np byte nh thc hin thay
34

Ton hng thanh ghi v vng nh Trong MIPS, ch c cc lnh np, lu mi s dng ton hng vng nh
Ti sao khng s dng ton hng vng nh trong cc lnh khc nh s hc, lun l,?

Mt nhim v ca trnh bin dch l nh x cc bin c s dng trong chng trnh thnh cc thanh ghi
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

35

Thao tc vi hng s
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 ?

36

V d lnh thao tc hng s


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 c du rs = 17 (ton hng ngun th 1 l $17 ~ $s1) rt = 16 (ton hng ch l $16 ~ $s0) immediate = 10 (hng s l 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?
37

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
38

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
39

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

40

Trn s trong php tnh s hc Nhc li: trn s xy ra khi kt qu php tnh vt qu chnh xc gii hn cho php (ca my tnh). 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 41

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


42

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
43

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
44

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
45

0 0 35 8 0

0 16 0 0 0

0 16 0 0 0

0 16

0 0

32 35 0 35

35

...
MIPS h tr cc nhm lnh x l d liu:
Lnh s hc Lnh lun l Lnh np lu d liu

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 ?
46

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:
47

Cu trc lnh r nhnh c iu kin Lnh r nhnh c iu kin cn


2 ton hng ngun so snh v 1 ton hng cho bit a ch cn nhy ti

Khng cn to cu trc lnh mi S dng cu trc I-Format opcode rs rt immediate


opcode m thao tc, cho bit lnh lm g 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) ?
48

Lnh r nhnh c iu kin


C php 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

V d:
if (b == 0) a = a + 1 else a = a + 2 beq addi hit: addi $t0,$t0,1
49

$t1,$0,hit $t0,$t0,1

Lnh r nhnh c iu kin: nh v theo thanh ghi PC (1/3)


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).
50

Lnh r nhnh c iu kin: nh v theo thanh ghi PC (2/3) 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).
51

Lnh r nhnh c iu kin: nh v theo thanh ghi PC (3/3) 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.
52

V d cu trc I-Format ca lnh r nhnh c iu kin


beq addi hit: addi $t0,$t0,1 Biu din lnh di dng nh phn $t1,$0,hit $t0,$t0,1

000100 01001 00000 0000000000000001


Gi tr thp phn tng ng ca tng trng

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 = 1
53

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 ?

54

Cu trc lnh r nhnh khng iu kin J-Format


Lnh r nhnh khng iu kin cn
1 ton hng cho bit a ch cn nhy ti

Cu trc lnh R-Format v I-Format

opcode opcode

rs rs

rt rt

rd

shamt funct immediate

To cu trc lnh mi th no gim thiu thay i so vi cu trc R-Format v I-Format Cu trc J-Format

opcode

target address

opcode m thao tc, cho bit lnh lm g target address cha a ch (t nh) cn nhy ti
55

Vn ca Cu trc J-Format Nh vy, vi cu trc J-Format, c th nhy trong khong 226 t nh (~228 byte) C ngha l khng th nhy ti cc t nh c 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).

56

Lnh r nhnh khng iu kin


C php 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 V d if (b == 0) beq $t1,$0,hit a = 0 addi $t0,$0,1 else j end a = 1 hit: add $t0,$0,$0 end: 57

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

nh x bin vo thanh ghi:

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

Exit
Chuyn thnh lnh my MIPS:
beq sub j True: add Exit: $s3,$s4,True $s0,$s1,$s2 Exit $s0,$s1,$s2 # branch i==j # f=g-h(false) # goto Exit # f=g+h (true)
58

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);

C th vit li nh sau:
Loop: g = g + A[i]; i = i + j; if (i != h) goto Loop;

nh x bin vo thanh ghi nh sau:

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


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
59

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

60

So snh khng bng trong MIPS (1/3)


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? Hng tip cn
Thm tt c cc lnh so snh khng bng: bgt, blt, ble, bge ? Ch cn thm 1 lnh m c th thc hin cc php so snh khng bng

MIPS h tr lnh:
Set on Less Than C php: slt reg1,reg2,reg3 (Cu trc R-Format) ngha if (reg2 < reg3) reg1 = 1; else reg1 = 0; set ngha l set to 1 reset ngha l set to 0

61

So snh khng bng trong MIPS (2/3)


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: # 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 Cc php so snh cn li >, and th sao?
C th thc hin cch kt hp lnh slt v cc lnh r 62 nhnh c iu kin beq v bne ?

So snh khng bng trong MIPS (3/3)


# 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:
63

# $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

Hng s trong so snh khng bng


MIPS h tr lnh slti thc hin so snh khng bng vi hng s (cu trc I-Format).
Hu ch i vi vng lp for

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

if (g >= 1) goto Loop Loop: . . . # $t0 = 1 if # $s0<1 (g<1) # goto Loop # if $t0==0 # (if (g>=1)) Cp slt v beq tng ng vi if( )goto C th s dng cp lnh add/or v slt thay cho slti. Ti sao phi to ra 1 lnh mi ? Ngoi ra, cn c cc lnh: sltu, sltiu Gi tr ca $t0, $t1 vi ($s0 = FFFF FFFAhex, $s1 = 0000 FFFAhex) ? slt $t0, $s0, $s1 64 sltu $t1, $s0, $s1

I P S

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
65

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

66

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 < < < < < <
67

($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

Tm tt mt s lnh MIPS tm hiu

Hnh 2.13 trang 78, P&H

68

Th tc trong C
Li gi th tc v khai main() { int a,b,c; bo th tc c chuyn ... thnh lnh my nh th c = sum(a,b); no ? ... i s c truyn vo } th tc nh th no ? /* khai bo hm sum */ Kt qu tr v ca th int sum (int x, int y){ tc c truyn ra ngoi return x+y; nh th no ? }

69

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
C sum(a,b); ... int sum (...) MIPS j sum # nhy ti # nhn sum ... sum:

Sau khi thc hin xong th tc phi quay v thc hin tip lnh ngay sau li gi th tc
return ... j ?
70

V d
int main() { ... c=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

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

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# khai bo th tc sum jr $ra # nhy ti a ch # trong $ra

71

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 ?
72

V d
int main() { ... c=sum(a,b);/* a,b:$s0,$s1 */ ... } int sum(int x, int y) { return x+y; } a ch 1000 1004 1008 add add jal $a0,$s0,$zero $a1,$s1,$zero sum # # # # # x = y = lu vo ti a b a ch quay v $ra=1012 v nhy sum

M I P S

1012 2000 2004

... sum: add $v0,$a0,$a1# khai bo th tc sum jr $ra # nhy ti a ch # trong $ra

73

Cc lnh mi
jal (jump and link): J-Format
C php: jal label 1 (link): Lu a ch ca lnh k tip vo thanh ghi $ra 2 (jump): nhy ti nhn label

Lnh jr (jump register): R-Format


C php: jr register Nhy ti a ch nm trong thanh ghi 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
74

Cc thanh ghi mi
MIPS h tr thm mt s thanh ghi lu tr cc d liu phc v cho th tc:
i s Kt qu tr v a ch quay v $a0, $a1, $a2, $a3 $v0, $v1 $ra

Nu th tc s dng 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)
75

Bi tp
main() { int i,j,k,m; ... i = mult(j,k); ... m = mult(i,i); ... } /* khai bo hm mult */ int mult (int mcand, int mlier){ int product; product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; }
76

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.

S dng thanh ghiBao nhiu cho ? S dng ngn xp (stack).


77

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

Static

Code

M ngun chng trnh


78

S dng ngn xp (1/2)


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; }

79

S dng ngn xp (2/2)


# 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
80

Cu trc c bn ca 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

81

Mt s nguyn tc s dng th tc Th tc R (caller) gi th tc E (callee) Trong th tc R


1. Lu a ch tr v (trong $ra) ca R vo ngn xp 2. Gn cc i s (nu c) R truyn vo E 3. Gi lnh jal

Trong th tc E
3. Khi to ngn xp 4. Lu vo ngn xp cc thanh ghi trong R c th b thay i trong E. 5. 6. Khi phc cc d liu lu tm trong ngn xp 7. Phc hi ngn xp 8. Gi lnh jr $ra tr li th tc R

82

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


83

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)


84

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
85

Vai tr 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

86

Nguyn tc s dng thanh ghi (1/2)


$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!
87

Nguyn tc s dng thanh ghi (2/2)


$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.
88

Tm tt cc cu trc lnh MIPS

Hnh 2.26 trang 104, P&H

89

Tm tt mt s lnh MIPS tm hiu

Hnh 2.47 trang 146, P&H

90

Lnh gi
Lnh gi (Pseudo Instruction) l cc lnh hp ng khng c ci t lnh my tng ng, nhm mc ch gip cho vic lp trnh hp ng d dng hn

Hnh 2.47 trang 146, P&H


91

Mt s Syscall thc hin nhp xut

92

Tm hiu thm
Qu trnh bin dch v thc thi chng trnh (phn 2.10, trang 106-115, P&H) + cc khi nim
Symbol table Compiler, Linker, Loader Dynamically Linked Library (DLL) Java bytecode, Java Virtual Machine (JVM), Just In Time Compiler (JIT)

B lnh Intel IA-32 (phn 2.16, trang 134-143, P&H) + cc khi nim
General Purpose Register (GPR) Addressing Modes
93

Tham kho
Chng 2, trang 28, P&H

94

Bi 04: Cu trc v hot ng ca B x l


Phm Tun Sn ptson@fit.hcmus.edu.vn

Cu trc my tnh

My tnh
B x l B nh chnh (Central (Main Processing Memory) Unit) H thng kt ni (Bus) My tnh (Computer) Thit b nhp xut (Input Output)

Thc thi chng trnh

Cu trc b x l
Lu tr tm d liu ALU, CU x l v iu khin
Computer
I/O System Bus Memory CPU

B x l (CPU)
Thanh ghi (Registers)

X l, tnh ton trn d liu lu trong thanh ghi

n v x l (Arithmetic & Logic Unit)

Internal Bus

n v iu khin (Control Unit)

Kt ni gia cc thnh phn CU, ALU v Register trong CPU

iu khin x l ca ALU v d liu trn thanh ghi 4

Lnh my
Lnh my (machine instruction/ instruction/ machine code) l dy bit cha yu cu m b x l phi thc hin Cu trc ca mt lnh my thng gm:
M thao tc (opcode): cho bit lnh thc hin thao tc g (+. , and, or, ) Cc ton hng (operand): cho bit cc i tng b tc ng bi thao tc trong m thao tc (thanh ghi, vng nh, hng s, )

Mi b x l ch hiu c mt s lnh vi mt vi cu trc nht nh

Thc thi chng trnh c th hn

Hot ng ca CPU
X l lnh my qua 2 bc, gi l chu k lnh (instruction cycle)
Np lnh (Fetch)
Di chuyn lnh t b nh vo thanh ghi

Thc thi lnh


Gii m lnh v thc hin thao tc yu cu

Qu trnh np lnh
MAR (PC) MBR Memory IR (MBR) PC (PC) + 1
Thanh ghi MAR (Memory Address Register)
Lu a ch c gi ra/ nhn vo t bus a ch.

Thanh ghi MBR (Memory Buffer Register)


Lu gi tr c gi ra/ nhn vo t bus d liu.

Thanh ghi PC (Program Counter)


Lu a ch ca lnh s c np.

Thanh ghi IR (Instruction Register)


Lu lnh s c x l.

B x l di chuyn lnh t vng nh c a ch trong thanh ghi PC vo thanh ghi IR. Mc nh, gi tr thanh ghi PC c tng 1 lng bng chiu di ca lnh c np.
8

Qu trnh thc thi lnh


B x l gii m lnh trong thanh ghi IR v thc hin thao tc yu cu nh:
Thc hin cc php tnh s hc v lun l Thc hin di chuyn d liu gia thanh ghi v b nh Thc hin di chuyn d liu gia thanh ghi v thit b nhp xut Thc hin cc thao tc iu khin nh r nhnh

V d qu trnh x l lnh ca CPU


Np lnh Cu trc lnh 4 bit M thao tc 12 bit a ch Thc thi lnh

Cc thanh ghi: PC, IR, AC M thao tc 0001 = Np d liu t a ch vo thanh ghi AC 0010 = Lu d liu t thanh ghi AC vo b nh ti a ch 0101 = Cng dn gi tr ti a ch vo thanh ghi AC

10

Chu k lnh tng qut


1. Tnh a ch ca lnh 2. Np lnh 3. Gii m lnh 4. Tnh a ch ca ton hng 5. Np ton hng 6. Thc thi lnh 7. Tnh a ch ca ton hng cha kt qu 8. Ghi kt qu

11

Ngt
Ngt (Interrupt) l c ch cho php ngt qu trnh thc thi tun t thng thng tng lnh ca b x l phc v cng vic khc nh nhp xut. Mt s loi ngt
Ngt chng trnh
Debug chng trnh Trng hp trn s, chia cho 0,

Ngt ng h
c pht sinh bi b nh gi bn trong b x l c s dng trong cc mi trng a nhim

Nhp xut
V d: nhp k t,

Li phn cng
V d: li truyn d liu,..
12

Qu trnh phc v ngt


B x l kim tra ngt mi khi thc thi xong 1 lnh da vo tn hiu ngt Nu khng c ngt, np lnh k tip c a ch trong PC. Nu c ngt:
Tm ngng thc thi tip cc lnh ca chng trnh ang c thc hin. Lu li cc d liu ang thc hin dang d ca chng trnh. t a ch bt u th tc x l ngt vo thanh ghi PC. X l ngt Khi phc cc d liu ang thc hin dang d ca chng trnh b ngt v tip tc thc hin chng trnh ny

13

Tham kho
Chng 12, William Stallings

14

You might also like