CHƯƠNG IX
SINH MÃ ÐÍCH
Ni dung chính:
Giai đon cui ca quá trình biên dch là sinh mã đích. D liu nhp ca b sinh mã đích là
biu din trung gian ca chương trình ngun và d liu xut ca nó là mt chương trình đích
(hình 9.1). K thut sinh mã đích được trình bày trong chương này không ph thuc vào vic
dùng hay không dùng giai đon ti ưu mã trung gian .
Hình 9.1- V trí ca b sinh mã đích
Biên dch
k đầu
B ti ưu
B sinh mã
đích
Bng danh
biu
Chương trình
ngun
Mã trung
gian
Mã trung
gian Chương
trình đích
Nhìn chung mt b sinh mã đích phi đảm bo chy hiu qu và phi to ra chương trình đích
đúng s dng hiu qu tài nguyên ca máy đích. V mt lý thuyết, vn đề sinh mã ti ưu là
không thc hin được. Trong thc tế, ta có th chn nhng k thut heuristic để to ra mã tt
nhưng không nht thiết là mã ti ưu. Chương này đề cp đến các vn đề cn quan tâm khi
thiết kế mt b sinh mã. Bên cnh đó mt b sinh mã đích đơn gin t chui các lnh ba địa
ch cũng được gii thiu.
Mc tiêu cn đạt:
Sau khi hc xong chương này, sinh viên phi:
Nm được các vn đề cn chú ý khi thiết kế b sinh mã đích.
Biết cách to ra mt b sinh mã đích đơn gin t chui các mã lnh ba đi ch. T đó
có th m rng b sinh mã này cho phù hp vi ngôn ng lp trình c th.
Kiến thc cơ bn:
Sinh viên phi có kiến thc v kiến trúc máy tính đặc bit là phn hp ng (assembly
language) để thun tin cho vic tiếp nhn kiến thc v máy đích.
Tài liu tham kho:
[1] Compilers : Principles, Technique and Tools - Alfred V.Aho, Jeffrey D.Ullman -
Addison - Wesley Publishing Company, 1986.
[2] Design of Compilers : Techniques of Programming Language Translation -
Karen A. Lemone - CRC Press, Inc, 1992.
187
I. CÁC VN Ð THIT K B SINH MÃ
Trong khi thiết kế b sinh mã, các vn đề chi tiết như qun tr b nh, chn ch th cp
phát thanh ghi và đánh giá th t thc hin ... ph thuc rt nhiu vào ngôn ng đích và h
điu hành.
1. D liu vào ca b sinh mã
D liu vào ca b sinh mã gm biu din trung gian ca chương trình ngun, cùng
thông tin trong bng danh biu được dùng để xác định địa ch ca các đối tượng d liu trong
thi gian thc thi. Các đối tượng d liu này được tượng trưng bng tên trong biu din trung
gian. Biu din trung gian ca chương trình ngun có th mt trong các dng: Ký pháp hu
t, mã ba địa ch, cây cú pháp, DAG.
2. D liu xut ca b sinh mã – Chương trình đích
Ging như mã trung gian, d liu xut ca b sinh mã có th mt trong các dng:
Mã máy tuyt đối, mã máy kh định v địa ch hoc hp ng .
Vic to ra mt chương trình đích dng mã máy tuyt đối cho phép chương trình này
được lưu vào b nhđược thc hin ngay.
Nếu chương trình đích dng mã máy kh định v địa ch (module đối tượng) thì h
thng cho phép các chương trình con được biên dch riêng r. Mt tp các module đối tượng
có th được liên kết và ti vào b nh để thc hin nh b ti liên kết (linking loader). Mc
dù ta phi tr giá v thi gian cho vic liên kết và ti vào b nh các module đã liên kết nếu
ta to ra các module đối tượng kh định v địa ch. Nhưng bù li, ta có s mm do v vic
biên dch các chương trình con riêng r th gi mt chương trình con đã được biên dch
trước đó t mt module đối tượng. Nếu mã đích không t động tái định v địa ch, trình biên
dch phi cung cp thông tin v tái định cho b ti (loader) để liên kết các chương trình đã
được biên dch li vi nhau.
Vic to ra chương đích dng hp ng cho phép ta dùng b biên dch hp ng để
to ra mã máy.
3. La chn ch th
Tp các ch th ca máy đích s xác định tính phc tp ca vic la chn ch th. Tính
chun và hoàn chnh ca tp ch th là nhng yếu t quan trng. Nếu máy đích không cung
cp mt mu chung cho mi kiu d liu thì mi trường hp ngoi l phi x lý riêng. Tc độ
ch th và s biu din ca máy cũng là nhng yếu t quan trng. Nếu ta không quan tâm đến
tính hiu qu ca chương trình đích thì vic la chn ch th s đơn gin hơn. Vi mi lnh ba
địa ch ta có th phác ha mt b khung cho mã đích. Gi s lnh ba địa ch dng x := y + z,
vi x, y, z được cp phát tĩnh, có th được dch sang chui mã đích:
MOV y, R0 /* Lưu y vào thanh ghi Ro */
ADD z, R0 /* cng z vào ni dung Ro, kết qu cha trong Ro */
MOV R0, x /* lưu ni dung Ro vào x */
Tuy nhiên vic sinh mã cho chui các lnh ba địa ch s dn đến s dư tha mã. Chng
hn vi:
a:= b + c
d:= a + e
188
ta chuyn sang mã đích:
MOV b, Ro
ADD c, Ro
MOV Ro, a
MOV a, R0
ADD e,Ro
MOV Ro, d
và ta nhn thy rng ch th th tư là tha.
Cht lượng mã được to ra được xác định bng tc độ và kích thước ca mã. Mt máy
đích có tp ch th phong phú có th s cung cp nhiu cách để hin thc mt tác v cho trước.
Ðiu này có th dn đến tc độ thc hin ch th rt khác nhau. Chng hn, nếu máy đích có
ch th INC thì câu lnh ba địa ch a := a + 1 có th được cài đặt ch bng câu lnh INC a.
Cách này hiu qu hơn là dùng chui các ch th sau:
MOV a, Ro
ADD # 1, Ro
MOV Ro ,a
Như ta đã nói, tc độ ca ch th là mt trong nhng yếu t quan trng để thiết kế
chui mã tt. Nhưng, thông tin thi gian thường khó xác định.
Vic quyết định chui mã máy nào là tt nht cho câu lnh ba đi ch còn ph thuc
vào ng cnh ca nơi chưá câu lnh đó.
4. Cp phát thanh ghi
Các ch th dùng toán hng thanh ghi thường ngn hơn và nhanh hơn các ch th dùng
toán hng trong b nh. Vì thế, hiu qu ca thanh ghi đặc bit quan trng trong vic sinh mã
tt. Ta thường dùng thanh ghi trong hai trường hp:
1. Trong khi cp phát thanh ghi, ta la chn tp các biến lưu trú trong các thanh ghi ti
mt thi đim trong chương trình.
2. Trong khi gán thanh ghi, ta ly ra thanh ghi đặc bit mà biến s thường trú trong đó.
Vic tìm kiếm mt lnh gán ti ưu ca thanh ghi, ngay vi c các giá tr thanh ghi đơn,
cho các biến là mt công vic khó khăn. Vn đề càng tr nên phc tp hơn vì phn cng và /
hoc h điu hành ca máy đích yêu cu qui ước s dng thanh ghi.
1. La chn cho vic đánh giá th t
Th t thc hin tính toán có th nh hưởng đến tính hiu qu ca mã đích . Mt s
th t tính toán có th cn ít thanh ghi để lưu gi các kết qu trung gian hơn các th t tính
toán khác. Vic la chn được th t tt nht là mt vn đề khó. Ta nên tránh vn đề này
bng cách sinh mã cho các lnh ba địa ch theo th t mà chúng đã được sinh ra bi b
trung gian.
2. Sinh mã
Tiêu chun quan trng nht ca b sinh mã là phi to ra mã đúng. Tính đúng ca mã
có mt ý nghĩa rt quan trng. Vi nhng quy định v tính đúng ca mã, vic thiết kế b sinh
mã sao cho nó được thc hin, kim tra, bo trì đơn gin là mc tiêu thiết kế quan trng .
189
II. MÁY ÐÍCH
Trong chương trình này, chúng ta s dùng máy đích như máy thanh ghi (rigister
machine). Máy này tượng trưng cho máy tính loi trung bình. Tuy nhiên, các k thut sinh mã
được trình bày trong chương này có th dùng cho nhiu loi máy tính khác nhau.
Máy đích ca chúng ta là máy tính địa ch byte vi mi t gm bn byte và có n thanh
ghi : R0, R1 ... Rn-1 . Máy đích gm các ch th hai địa ch có dng chung:
op source, destination
Trong đó op mã tác v. Source (ngun) và destination (đích) là các trường d liu.
Ví d mt s mã tác v:
MOV chuyn source đến destination
ADD cng source và destination
SUB tr source cho destination
Source và destination ca mt ch th đưc xác định bng cách kết hp các thanh ghi
và các v trí nh vi các mode địa ch. Mô t content (a) biu din cho ni dung ca thanh ghi
hoc đi ch ca b nh được biu din bi a.
mode địa ch cùng vi dng hp ng và giá kết hp:
Mode Dng Ða ch Giá
Absolute
Register
Indexed
Indirect register
Indirect indexed
M
R
c(R)
*R
*c(R)
M
R
c + contents ( R)
contents ( R)
contents (c+ contents ( R))
1
0
1
0
1
V trí nh M hoc thanh ghi R biu din chính nó khi đưọc s dng như mt ngun
hay đích. Ð di địa ch c t giá tr trong thanh ghi R được viết là c( R).
Chng hn:
1. MOV R0, M : Lưu ni dung ca thanh ghi R0 vào v trí nh M .
2. MOV 4(R0), M : Xác định mt địa ch mi bng cách ly độ di tương đối
(offset) 4 cng vi ni dung ca R0, sau đó ly ni dung ti địa ch này,
contains(4 + contains(R0)), lưu vào v trí nh M.
3. MOV * 4(R0) , M : Lưu giá tr contents (contents (4 + contents (R0))) vào v
trí nh M.
4. MOV #1, R0 : Ly hng 1 lưu vào thanh ghi R0.
Giá ca ch th
Giá ca ch th (instrustion cost) được tính bng mt cng vi giá kết hp mode địa
ch ngun và đích trong bng trên. Giá này tượng trưng cho chiu dài ca ch th. Mode địa
ch dùng thanh ghi s có giá bng không và có giá bng mt khi nó dùng v trí nh hoc
hng. Nếu vn đề v trí nh là quan trng thì chúng ta nên ti thiu hóa chiu dài ch th. Ði
vi phn ln các máy và phn ln các ch th, thi gian cn để ly mt ch th t b nh bao
190
gi cũng xy ra trước thi gian thc hin ch th. Vì vy, bng vic ti thiu hóa độ dài ch th,
ta còn ti thiu hoá được thi gian cn để thc hin ch th.
Mt s minh ha vic tính giá ca ch th:
1. Ch th MOV R0, R1 : Sao chép ni dung thanh ghi R0 vào thanh ghi R1. Ch th
này có giá là mt vì nó ch chiếm mt t trong b nh .
2. MOV R5, M: Sao chép ni dung thanh ghi R5 vào v trí nh M. Ch th này có giá
tr là hai vì địa ch ca v trí nh M là mt t sau ch th.
3. Ch th ADD #1, R3: cng hng 1 vào ni dung thanh ghi R3. Ch th có giá là hai
vì hng 1 phi xut hin trong t kế tiếp sau ch th.
4. Ch th SUB 4(R0), *12 (R1) : Lưu giá tr ca contents (contents (12 + contents
(R1))) - contents (4 + contents (R0)) vào đích *12( R1). Giá ca ch th này là ba vì hng 4 và
12 được lưu tr trong hai t kế tiếp theo sau ch th.
Vi mi câu lnh ba địa ch, ta có th có nhiu cách cài đặt khác nhau. Ví d câu lnh
a := b + c - trong đó b và c là biến đơn, được lưu trong các v trí nh phân bit có tên b, c - có
nhng cách cài đặt sau:
1. MOV b, Ro
ADD c, R0 giá = 6
MOV Ro, a
2. MOV b, a giá = 6
ADD c, a
3. Gi s thanh ghi R0, R1, R2 gi địa ch ca a, b, c. Chúng ta có th dùng hai địa
ch sau cho vic sinh mã lnh:
a := b + c =>
MOV *R1, *Ro giá = 2
ADD * R2, *Ro
4. Gi s thanh ghi R1 và R2 cha giá tr ca b và c và tr ca b không cn lưu li sau
lnh gán. Chúng ta có th dùng hai ch th sau:
ADD R2, R1 giá = 3
MOV R1, a
Như vy, vi mi cách cài đặt khác nhau ta có nhng giá khác nhau. Ta cũng thy
rng mun sinh mã tt thì phi h giá ca các ch th . Tuy nhiên vic làm khó mà thc hin
được. Nếu có nhng quy ước trước cho thanh ghi, lưu gi địa ch ca v trí nh cha giá tr
tính toán hay địa ch để đưa tr vào, thì vic la chn ch th s d dàng hơn.
III. QUN LÝ B NH TRONG THI GIAN THC HIN
Trong phn này ta s nói v vic sinh mã để qun lý các mu tin hot động trong thi
gian thc hin. Hai chiến lược cp phát b nh chun được trình bày trong chương VII là cp
phát tĩnh và cp phát Stack. Vi cp phát tĩnh, v trí ca mu tin hot động trong b nh được
xác định trong thi gian biên dch. Vi cp phát Stack, mt mu tin hot động được đưa vào
Stack khi có s thc hin mt th tc và được ly ra khi Stack khi hot động kết thúc. đây,
ta s xem xét cách thc mã đích ca mt th tc tham chiếu ti các đối tượng d liu trong
191