Chöông 6: Sinh Maõ Ñoái Töôïng

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 45

CHNG 6

SINH MA OI TNG

1
Chng Bien Ma Ma Chng
Bo toi Bo sinh
trnh dch trung u trung ma trnh
nguon pha gian ma gian oi tng dch
trc
Bang danh bieu

Hnh 6.1. V tr cua bo sinh ma oi tng

6.1. Cac van e thiet ke bo sinh ma


au vao cua bo sinh ma
Chng trnh ch
S la chon ch th
Gia s oi vi phat bieu ba a ch co dang x := y + z
vi x, y, z tng trng cho cac v tr nh. Chung ta co the
dch sang chuoi ma oi tng:
MOV y, Ro /* cat y vao thanh ghi Ro */
ADD z, Ro /* cong z vao noi dung Ro, ket qua cha
trong Ro */
MOV Ro, x /* cat noi dung Ro vao x */
Tuy nhien viec sinh ma cho chuoi cac phat bieu se dan
en s d tha ma. Nh th du sau:
a := b + c; d := a + e
Chung ta chuyen sang ma oi tng:
(1) MOV b, R0
(2) ADD c. R0
(3) MOV R0, a
(4) MOV a, R0
(5) ADD e, R0
(6) MOV R0, d
Ch th th t la tha.
Chat lng ma c tao ra, c xac nh bang toc o
cua ma va kch thc tap ma. Th du:
MOV a, R0
ADD # 1, R0
MOV R0, a
Cap phat thanh ghi
S la chon cho viec anh gia th t
6.2. May ch
Chung ta se dung may ch nh la may thanh ghi (register
machine). May ch co moi t gom bon byte va co n
thanh ghi: R0, R1 Rn-1, co ch th hai a ch, vi dang
tong quat: op source, destination
Th du mot so ch th:
MOV: chuyen tr cua source en destination
ADD: cong noi dung source va destination
SUB: tr noi dung source cho destination
Mode a ch
Th du: Module Dang a ch Gia
1 Absolute M M 1
2 Register R R 0
3 indexed c (R) c + contents (R) 1
4 indirect *R contents (R) 0
register
5 inderect *c (R) contents (c + contents 1
indexed (R))
6 literal #C 1
hang C
Gia ch th (instruction cost)
Gia ch th c tnh bang mot cong gia ket hp trong
bang mode a ch nguon va ch tren.
Qua cac th du tren chung ta thay muon sinh ma tot th
lam sao phai ha gia cua cac ch th.
Sinh ma e quan ly cac ban ghi hoat ong trong thi
gian thc thi. Cac ma quan ly nay phai ap ng c
hai ky thuat quan ly bo nh tnh va cap phat bo nh
theo c che stack.
Viec cap phat va giai toa v tr nh cho ban ghi hoat
1. call 2. return
3. halt 4. action /* tng trng cho cac phat bieu
khac */
Th du:

/*ma cho c*/


action 1
call p
action 2
a ch kh 0: a ch kh
halt 0:
hoi hoi
/*ma cho p*/ 8: arr 4: buf
action 3 56 i
return 60 j 84: n
Bang ma Bang ghi Bang ghi
hoat ong hoat ong
Cap phat tnh
Phat bieu call c hien thc bang hai ma oi tng
MOV va GOTO.
MOV # here + 20, callee.static - area
GOTO callee. code rea
Th du 9.1.
Mo phong 9.1. Ma oi tng cho chng trnh con c va p
/* ma cho c */
100: action
120: MOV 140, /* cat a ch kh hoi 140 */
364 /* goi p */
132: GOTO 200
140: action2
160: halt
/* ma cho p */
200: action3
220: GOTO * 364 /* tr ve a ch c cat tai v tr
364 */
300: /* 300 - 364 cat ban ghi hoat ong
304: cua c */
/* cha a ch kh hoi */
364: /* d lieu cuc bo cua c */
368: /* 364 - 451 cha ban ghi hoat ong
cua p*/
Cap phat theo c che /* cha
stack a ch kh hoi */
/* d
Ma cho chng trnh au lieu
tien lacuc
mabo cua
khi p */ stack, cat
ong
a ch bat au stack vao sp bang ch th MOV #
stackstart, SP. Nh vay ma oi tng cho chng trnh con
au tien bao gom:
MOV # stackstart, SP /* khi ong stack */
oan ma cho chng trnh con
ADD # caller.recordsize, SP
MOV # here + 16, * SP /* lu a ch kh hoi */
GOTO callee.code-area
Chuoi tr ve gom hai ch th:
GOTO *0 (SP) /* tr ve chng trnh goi */
SUB # callee.recordsize, SP
Ch th GOTO *0 (SP)
Th du 9.2
/* ma cho s /* ma cho q
*/ */
action1 action4
callq callp
action2 action5
halt callq
/* ma cho p action6
*/ callq
action3 return
Hnh 9.3. Ma trung gian cua chng trnh mo phong 9.1
Mo phong 9.2. Ma oi tng cho ma trung gian (H.9.3)
/* ma cho */
100: MOV # 600, SP /* khi ong stack */
108: action1
128: ADD # ssize, SP /* chuoi goi bat au */
136: MOV 152, * SP /* cat a ch kh hoi */
144: GOTO 300 /* goi q */
152: SUB # ssize, SP /* giam tr cua SP mot
khoang ssize */ 160: action2
180: HALT
/* ma cho p */
200: action3
220: GOTO * 0(SP) /* tr ve chng trnh goi */
/* ma cho q */
300: action4 /* nhay co ieu kien ve 456 */
320: ADD # qsize, SP
328: MOV 344, * SP /* cat a ch kh hoi */
336: GOTO 200 /* goi P */
344: SUB # qsize, SP
352: action5
372: ADD # qsize, SP
380: MOV 396, * SP /* cat a ch kh hoi */
388: GOTO 300 /* goi q */
396: SUB # qsize, SP
304: action6
424: ADD # qsize, SP
432: MOV 440, * SP /* cat a ch kh hoi */
440: GOTO 300 /* goi q */
448: SUB # qsize, SP
456: GOTO *0 (SP) /* tr ve chng trnh goi */

600: /* a ch bat au cua stack


trung tam */
Xac nh a ch cho ten danh bieu trong thi gian
thc thi
Neu chung ta dung c che cap phat tnh, vung d lieu
c cap phat tai a ch static, co phat bieu x := 0. a
ch tng oi cua x la 12. Vay a ch cua x trong bo
nh la static + 12. Neu static la 100. a ch cua x trong
bo nh la 112. Phat bieu x := 0 c dch sang ma oi
tng vi a ch tuyet oi la: MOV # 0, 112.
Gia s x la bien cuc bo cua chng trnh con hien
hanh, thanh ghi R3 lu gi a ch bat au cua ban ghi
hoat ong th chung ta se dch phat bieu x := 0 sang ma
trung gian.
t1 := 12 + R3
* t1 := 0
Chuyen sang ma oi tng:
MOV # 0, 12 (R3)
Gia tr trong R3 ch co the c xac nh trong thi gian
9.3. Khoi c ban va lu o
Khoi c ban (basic block)
t1 := a * a;
t2 := a * b;
t3 := 2 * t2
t4 := t1 + t2
t5 := b * b;
t6 := t4 + t5
Giai thuat 9.1. Phan chia cac khoi c ban
Nhap: cac phat bieu ba a ch
Xuat: danh sach cac khoi c ban vi tng chuoi cac
phat bieu ba a ch cho tng khoi.
Phng phap:
1. Xac nh tap cac phat bieu dan au cua cac khoi
chung ta dung cac quy tac sau ay:
i) Phat bieu au tien la phat bieu dan au
(leader) (t ay ta se dung t leader thay cho cum
t tieng Viet phat bieu dan au).
ii) Bat ky phat bieu nao la ch nhay en cua
phat bieu GOTO co ieu kien hoac khong ieu kien
eu la leader.
iii) Bat ky phat bieu nao i ngay sau phat bieu goto
hoac khong ieu kien co ieu kien eu la leader.
2. Vi moi leader th khoi c ban gom co no va tat ca
cac phat bieu nhng khong bao gom mot leader nao
khac hay la lenh ket thuc chng trnh.
Th du 9.3.
Mo phong 9.3. Chng trnh tch tch vect vo hng
begin
prod := 0
i := 1
repeat
prod := prod + a1 * b1;
i := i + 1
until i > 20
end
Mo phong 9.4. Ma trung gian e tnh tch vect vo hng

(1) prod :=0


(2) i := 1
(3) t1 := 4 * i
(4) t2 := at1 /* tnh ai
(5) t3 := 4 * I
(6) t4 := bt3
(7) t5 := t2 * t4
(8) t6 := prod + t5
(9) prod := t6
(10) t7 := i + 1
(11) i := t7
(12) if i <= 20 goto (3)

S luan chuyen tren cac khoi


Lu chuyen bao ton cau truc
1. Loai bo cac bieu thc con chung.
Th du: a := b + c; b := a d; c := b + c; d := a d
Nh vay ta chuyen bon phat bieu tren thanh:
a := b + c; b := a d; c := b + c; d := b
2. Loai bo ma chet
Gia s x la chet, neu xuat hien phat bieu x := y + z
trong khoi c ban th se b loai ma khong lam thay oi
gia tr cua khoi.
3. at ten lai bien tam
t := b + c vi t la bien tam.
u := b + c ma u la bien tam mi ta cung phai thay t
bang u bat c cho nao xuat hien t.
4. Hoan oi phat bieu
t1 := b + c
t2 := x + y
Co the hoan oi th t hai phat bieu neu x va y eu
khong phai t1 ong thi b va c eu khong phai la t2.
Chuyen oi ai so
Lu o (flow graph)
o th trc tiep c goi la lu o. Cac nut cua lu o
la khoi c ban. Mot nut c goi la khoi iem, neu
no co cha phat bieu au tien cua chng trnh.
prod := 0
i := 1 B1

t1 := 4 * I
t2 := a [t1]
t3 := 4 * i
t4 := b [t3] B2
t5 := t2 * t4
t6 := prod + t5
prod := t6
Hnh 9.4. Lu o cua
t7 := i + 1 chng
I := t7 trnh
if I < = 20 goto B2
Vong lap
9.4. Bo sinh ma n gian
Bo sinh ma nay se sinh ma oi tng cho cac ma trung
gian ba a ch.
ac ta thanh ghi va a ch
1. Bo ac ta thanh ghi se lu gi nhng g ton tai trong
tng thanh ghi.
2. Bo ac ta a ch se lu gi cac v tr nh cha tr
cua cac danh bieu.

Giai thuat sinh ma oi tng


Nhan vao chuoi ma trung gian ba a ch cua mot khoi
c ban. Vi moi phat bieu ba a ch co dang x := y
op z chung ta thc thi cac bc sau:
1. Goi ham getreg e xac nh L.
2. Xac nh a ch ac ta cho y.
3. Tao ch th OP z,.
Ham getreg
1. Neu y ang trong thanh ghi va y se khong c dung
na sau phat bieu x := y op z.
2. Ngc lai.
3. Neu khong co thanh ghi rong.
4. Neu X se khong c dung tiep va cung khong the
tm c mot thanh ghi nh a noi bc 3.

Th du 9.3. Ta co phat bieu gan d := (a b) + (a c) + (a


c)
Chuyen thanh ma trung gian
t := a b; u := a c; v := t + u; d := v + u
Bang 9.1. Chuoi ma oi tng sinh ra cho th du 9.3

Ma Ma oi Gia Bo ac ta Bo ac ta
trung tng thanh ghi a ch
gian
t := a b MOV a, R0 2 Thanh ghi rong, t trong R0
R0
SUB b, R0 2 cha t
u := a c MOV a, R1 2 t trong R0
SUB c, R1 2 R0 cha t u trong R1
v := t + u ADD R1, R0 1 R1 cha u u trong R1
R0 cha v v trong R0
d := v + u ADD R1, R0 1 R1 cha u d trong R0
MOV R0, d 2 R0 cha d d trong bo
nh
Sinh ma cho loai phat bieu khac

Bang 9.2. Chuoi ma oi tng cho phat bieu xac nh


ch so va gan.
(1) (2) (3)
i trong thanh ghi i trong bo nh i tren stack
Phat
R1 M1
bieu
ma gia ma gia ma gia

a := MOV b (Ri), R 2 MOV Mi , R 4 MOV Si (A), 4
b1 MOV b(R), R R
MOV b, a (R1) 3 MOV Mi , R 5 MOV b(R), R 5
a1 := MOV b, a(R) MOV Si (A),
b R
MOV b, a(R)
Bang 9.3. Ma oi tng cho phep gan con tro

p trong thanh ghi p trong bo nh +


Rp p trong stack
Phat M p
bieu
ma gia ma gia ma gia

a := * p MOV * Rp , 2 MOV Mp , R 3 MOV Sp(A), R 4
a MOV * R, R MOV * R , R
* p := a 2 MOV Mp , R 4 MOV a , R 5
MOV a * Rp MOV a , * R MOV R , *
Sp(A)
Sinh ma cho phat bieu ieu kien
if x < y goto z. Ch th so sanh CMP. Th du CMP x, y neu x >
y th ma ieu kien se c xac lap dng. Ch th
nhay co ieu kien c thc thi neu ieu kien c
xac lap <, =, >, > =, < >, < = chung ta dung ch th nhay
co ieu kien CJ < = z. Nh vay phat bieu ieu kien if x
< y goto z c dch sang ma may nh sau:
CMP x, y; CJ < z

9.5. Dag bieu dien khoi c ban


Dag la cau truc d lieu rat thch hp e hien thc viec
chuyen oi cac khoi c ban.
1. Cac la c at ten bang cac danh bieu duy nhat,
hoac la ten bien hoac hang so. Hau het cac la la
r-value.
2. Cac nut trung gian c at ten bang ky hieu phep
toan.
3. Cac nut cung co the la chuoi cac danh bieu cho
Th du 9.4.
Mo phong 9.5. Ma trung gian cua khoi B2

(1) t1 := 4 * i
(2) t2 := a t1
(3) t3 := 4 * 1
(4) t4 := b 3
(5) t5 := t2 * t4
(6) t6 := prod + t5
(7) prod := t6
(8) t7 := i + 1
(9) i := t7
(10) if i < = 20 goto (1)
t6 , (1)
+ prod t5

t4
prod0 [
[ + 20
] t1, t3 t7 ,
]
i
a 1
b i0
4

Hnh 9.5. Dag cho khoi B2 mo phong 9.5

Xay dng dag


Giai thuat 9.2. Xay dng dag.
Nhap: khoi c ban
Xuat: dag cho khoi c ban, cha cac thong tin sau:
1. Ten cho tng nut.
2. Moi nut eu co danh sach cac danh bieu gan vao
Phng phap: Gia s ton tai ham node indentifier, ham
nay khi ta xay dng dag, se tra ve nut mi nhat co
lien quan vi identifier.
Cac dang phat bieu ba a ch nh sau (i) x := y op z, (ii) x
:= op y, (iii) x := y co trng hp phat bieu ieu kien, th
du if i < = 20 goto ta coi la trng hp (i) ma x khong
c nh ngha.
1. Neu node (y) khong c nh ngha, ta tao la co ten y
va node (y) chnh la nut o. Trong trng hp (i) neu
node (z) khong c nh ngha, ta tao la ten z va la
chnh la node (z).
2. Trong trng hp (i), xac nh xem tren dag co nut nao
co ten op ma con trai la node (y) va con phai la node
(z). Trong trng hp (ii) ta xac nh xem co nut nao
co ten op, ma no ch co mot con duy nhat la node
(y). Trng hp th (iii) th at n la node (y).
3. Loai x ra khoi danh sach bieu gan vao nut node (x).
Them x vao danh sach cac danh bieu gan vao nut
t5
t2 *
t4 a)
[ [
] ] t 1, t 3
a

b
i0
4
t6
+ t5
t4
prod0 t2
[ [ b)
] ] t 1, t 3

a
b i0
4
t6, prod
+ t5
t4 c)
prod0 t2
[ [
] ] t 1, t 3

a
b i0
4
t6, prod
+
t5
t2
prod0 t4 d)
[
[
] t1, t3
]
a + t7
b
4 i0 1
t6, prod
+
t5
t2 (1)
prod0 t4
[
[ t 1, t 3 t 7, i
]
]
a + 20
b
4 i0 1

e)

Hnh 9.7. Cac bc xay dng dag cua khoi B2 th du


9.5.
ng dung cua dag
th du 9.5 chung ta a xay dng dag, no giup cho
viec t ong loai bo cac bieu thc con giong nhau. No
xac nh nhng bien ma tr cua chung c s dung
trong khoi c ban. Dag con giup ta xac nh nhng phat
bieu ma tr cua chung c s dung ngoai pham vi
cua khoi c ban.

Th du 9.6. Chung ta se xay dng lai khoi c ban t dag


cua (H.9.7e).
Day, con tro va lenh goi chng trnh con
Chung ta khao sat khoi c ban sau ay:
x := ai
aj := y
z := ai
Giai thuat 9.2 th ai se tr thanh bieu thc chung. T
dag chung ta tao lai khoi c ban cua no se toi u va
co dang:
Nhng khoi (9.1) va (9.2) se tnh tr z khac nhau neu j = I
va y ai.
oi vi con tro cung xay ra van e khi ta co phat bieu
gan * p := w. Neu ta khong biet p se ch en oi tng
nao, th phai loai tat ca cac nut co dang tren.
Viec goi chng trnh con se giet tat ca cac nut bi v ta
cha biet g ve chng trnh b goi, nen ta buoc phai gia
s rang bat c bien nao cung co the b thay oi tr
do hieu ng le.

9.6. Tao ma oi tng t dag


Sap xep lai th t
t1 := a + c
t2 := c + d
t3 := e t2
t4 := t1 t3
Ta co the sap xep lai chuoi ma trung gian sao cho viec
tnh toan t1 ch xay ra ngay trc t4.
Mo phong 9.6. Ma oi tng Mo phong 9.7. Chuoi
cho chuoi phat bieu (H.9.8) ma sau khi a sap xep
lai ma trung gian
MOV a, R0 MOV c, R0
ADD b, R0 ADD d, R0
MOV c, R1 MOV e, R1
ADD d, R1 SUB R0 , R1
MOV R0 , t1 MOV a, R0
MOV e, R0 ADD b, R0
SUB R1, R0 SUB R1 , R0
MOV t1, R1 MOV R0 , t4
SUB R0 , R1
MOV R1 , t4
Heuristics dung e sap xep dag
Mo phong 9.8. Giai thuat sap xep cac nut cua dag

(1) While neu con cac nut trung gian cha c liet ke
ra
do begin
(2) Chon nut cha liet ke n; tat ca cac nut cha me cua
no a liet ke
(3) liet ke n;
(4) While con m tan cung ben trai cua n, co cac cha
me a liet ke va no khong phai la nut la do begin
(5) liet ke m;
(6) n := m;
end;
end
Th du 9.7. Giai thuat mo phong 9.8 e tao s sap
xep cua cac ma trung gian (H.9.9).
1

3
+ 2

+
8
5
+ 6
c d e 12
a
7 11
9 b
10

Hnh 9.9. Dag cho th du


t8 := d + e
t6 := a + b
t5 := t6 - c
t4 := t5 * t8
t3 := t4 - e
t2 := t6 + t4
t1:= t2 * t3

Sap xep toi u cho cay


Giai thuat co hai phan: phan au anh ten cho cac
nut cua cay, phan th hai cua giai thuat mieu ta lo
trnh tren cay. Ma oi tng se sinh ra trong qua trnh
thc hien lo trnh tren cay.
Mo phong 9.9. Giai thuat tnh ten cua nut
label (n) = m a x (l1 , l2) neu l1 l2
l1 + 1 neu l1 = l2

(1) if n la la then
(2) if n la con tan cung ben trai cua nut cha
cua no
then
(3) label (n) := 1
(4) else label (n) := 0
else begin /* n la nut trung gian */
(5) gia s n1 , n2 , , nk la con cua nut n, c
sap theo th t cua ten, sao cho
label (n1) > label (n2) label (nk )
(6) label (n) := max (label (ni ) + i 1)
1<i<k
Th du 9.8. Chung ta xet cay (H.9.8)

t4
2
2
t1 1 t3

a b e t2 1
1
0 1

c d
1 0

Hnh 9.10. Cay c xac nh ten

Sinh ma oi tng t cay co ten


Mo phong 9.10. Giai thuat cua thu tuc gencode

procedure gencode (n);


begin
/* trng hp 0 */
if n la la ben trai bieu th cho toan hang name
and n la con tan cung ben trai cua nut cha cua
no
then print MOV name , top (rstack)
else if n la nut trung gian vi toan t la op, con ben
trai la n1 va con ben phai la n2 then
/* trng hp th nhat */
if label (n2) = 0 then begin
at name la toan hang c bieu th bang n2.
gencode (n1);
print op name , top (rstack)
/* trng hp th hai */
else if 1 label (n1) < label (n2) and
label (n1) < r then begin
swap (rstack);
gencode (n2);
R := pop (rstack); /* n2 a c tnh, nam trong
R */
gencode (n1);
print op R , top (rstack);
push (rstack, R);
swap (rstack)
end
/* trng hp th ba */
else if 1 label (n2) label (n1) and label (n2) < r then
begin gencode (n1);
R := pop (rstack); /* n1 a c tnh, nam trong
gencode (n2);
print op top (rstack) , R;
push (rstack, R);
end
/* trng hp th t, ca hai ten r, r la so lng toi
a cua thanh ghi */
else begin
gencode (n2);
T := pop (rstack);
print MOV top (rstack) , T;
gencode (n1)
push (tstack, T);
print op T , top (rstack)
end
end;
Mo phong 9.11. Chuoi cac lenh goi thu tuc gencode va
cac lenh print cua cac trng hp
gencode (t4) [R1R0] /* trng hp 2
*/
gencode (t3) [R0R1] /* trng hp 3
*/
gencode (e) [R0R1] /* trng hp 0
*/
print MOV e, R1
gencode (t2) [R0) /* trng
hp 1 */
gencode (c) [R0] /* trng hp 0
*/
print MOV c, R0
print ADD d, R0
print SUB R0 , R1
gencode (t1) [R0] /* trng hp 1
1. Tac vu (toan t phep toan) cho moi nut trung gian.
2. Cat moi nut la la nut con tan cung ben trai vao
thanh ghi.
3. Lu gi cho tng nut ca hai con ma chung co ten
bang hoac nhieu hn r.
Cac tac vu vi nhieu thanh ghi
Cac tnh chat ai so
+ l
+
max (2, l)

l 0
1
T1
T1 b)
a) +
+
+

+ ti4
T1 + +

+
ti3
T4
d)
Ti1 Ti3
T2 T3
Hnh 9.11. Chuyen oi cay bang phep
c) hoan v, ket hp
Cac bieu thc chung

1 4

3 5 8
2

6 4 4 1 6 7 1 1
2 1 2

6
1
2
9 1
8
0

Hnh 9.12. Phan chia thanh cac cay con

You might also like