CHÖÔNG 9<br />
SINH MAÕ ÑOÁI TÖÔÏNG<br />
Chöông<br />
<br />
Bieân dòch<br />
trình nguoàn phía tröôùc<br />
<br />
Maõ<br />
trung<br />
gian<br />
<br />
Boä toái öu<br />
maõ<br />
<br />
Maõ<br />
trung<br />
gian<br />
<br />
Chöông<br />
Boä sinh maõ<br />
ñoái töôïng trình dòch<br />
<br />
Baûng danh bieåu<br />
<br />
Hình 9.1. Vò trí cuûa boä sinh maõ ñoái töôïng<br />
9.1. Caùc vaán ñeà thieát keá boä sinh maõ<br />
Ñaàu vaøo cuûa boä sinh maõ<br />
Chöông trình ñích<br />
<br />
Söï löïa choïn chæ thò<br />
Giaû söû ñoái vôùi phaùt bieåu ba ñòa chæ coù daïng x := y + z vôùi x, y, z töôïng<br />
tröng cho caùc vò trí nhôù. Chuùng ta coù theå dòch sang chuoãi maõ ñoái<br />
töôïng:<br />
MOV y, Ro<br />
<br />
/* caát y vaøo thanh ghi Ro */<br />
<br />
ADD z, Ro<br />
<br />
/* coäng z vaøo noäi dung Ro, keát quaû chöùa trong Ro */<br />
<br />
MOV Ro, x<br />
<br />
/* caát noäi dung Ro vaøo x */<br />
<br />
Tuy nhieân vieäc sinh maõ cho chuoãi caùc phaùt bieåu seõ daãn ñeán söï dö thöøa<br />
maõ. Nhö thí duï sau:<br />
a := b + c; d := a + e<br />
Chuùng ta chuyeån sang maõ ñoái töôïng:<br />
(1)<br />
<br />
MOV b, R0<br />
<br />
(2)<br />
<br />
ADD c. R0<br />
<br />
(3)<br />
<br />
MOV R0, a<br />
<br />
(4)<br />
<br />
MOV a, R0<br />
<br />
(5)<br />
<br />
ADD e, R0<br />
<br />
(6)<br />
<br />
MOV R0, d<br />
<br />
Chæ thò thöù tö laø thöøa.<br />
Chaát löôïng maõ ñöôïc taïo ra, ñöôïc xaùc ñònh baèng toác ñoä cuûa maõ vaø kích<br />
thöôùc taäp maõ. Thí duï:<br />
MOV a, R0<br />
ADD # 1, R0<br />
MOV R0, a<br />
Caáp phaùt thanh ghi<br />
Söï löïa choïn cho vieäc ñaùnh giaù thöù töï<br />
<br />
9.2. Maùy ñích<br />
Chuùng ta seõ duøng maùy ñích nhö laø maùy thanh ghi (register machine).<br />
Maùy ñích coù moãi töø goàm boán byte vaø coù n thanh ghi: R0, R1 … Rn-1, coù<br />
chæ thò hai ñòa chæ, vôùi daïng toång quaùt: op source, destination<br />
Thí duï moät soá chæ thò:<br />
MOV: chuyeån trò cuûa source ñeán destination<br />
ADD: coäng noäi dung source vaø destination<br />
SUB: tröø noäi dung source cho destination<br />
Mode ñòa chæ<br />
Thí duï:<br />
1<br />
2<br />
3<br />
<br />
Mode<br />
Absolute<br />
Register<br />
indexed<br />
<br />
Daïng<br />
M<br />
R<br />
c (R)<br />
<br />
Ñòa chæ<br />
M<br />
R<br />
c + contents (R)<br />
<br />
Giaù<br />
1<br />
0<br />
1<br />
<br />
4<br />
5<br />
6<br />
<br />
indirect<br />
register<br />
inderect<br />
indexed<br />
literal<br />
<br />
*R<br />
<br />
contents (R)<br />
<br />
0<br />
<br />
*c (R)<br />
<br />
contents (c + contents (R))<br />
<br />
1<br />
<br />
#C<br />
<br />
haèng C<br />
<br />
1<br />
<br />
Giaù chæ thò (instruction cost)<br />
Giaù chæ thò ñöôïc tính baèng moät coâng giaù keát hôïp trong baûng mode ñòa<br />
chæ nguoàn vaø ñích ôû treân.<br />
Qua caùc thí duï treân chuùng ta thaáy muoán sinh maõ toát thì laøm sao phaûi<br />
haï giaù cuûa caùc chæ thò.<br />
Sinh maõ ñeå quaûn lyù caùc baûn ghi hoaït ñoäng trong thôøi gian thöïc thi.<br />
Caùc maõ quaûn lyù naøy phaûi ñaùp öùng ñöôïc hai kyõ thuaät quaûn lyù boä nhôù<br />
tónh vaø caáp phaùt boä nhôù theo cô cheá stack.<br />
Vieäc caáp phaùt vaø giaûi toûa vò trí nhôù cho baûn ghi hoaït ñoäng laø moät phaàn<br />
trong chuoãi haønh vi goïi vaø trôû veà cuûa chöông trình con.<br />
<br />