21/1/2010
1
Bài 12
Sinh đích
1
Sinh
đích
Nguyn Th Thu Hương
Ni dung
zTng quan v sinh mã đích
zMáy ngăn xếp
zT chc b nh
z
Blnh
Lp KHMT K50
2
B
lnh
zSinh mã cho các lnh cơ bn
zXây dng bng ký hiu
zBiến
zTham s
zHàm, th tc và chương trình
Chương trình đích
Viết trên mt ngôn ng trung gian
Là dng Assembly ca máy gi định (máy o)
y
o làm vi
c vi b
nh stack
3
y
Vic thc hin chương trình thông qua mt
interpreter
Interpreter mô phng hành động ca máy o
thc hin tp lnh assembly ca nó
Chương trình đích được dch t
Mã ngun
Mã trung gian
4
21/1/2010
2
Máy ngăn xếp
zMáy ngăn xếp là mt h thng tính toán
zS dng ngăn xếp để lưu tr các kết qu trung gian
ca quá trình tính toán
zKiến trúc đơn gin
Lp KHMT K50
5
zB lnh đơn gin
zMáy ngăn xếp có hai vùng b nh chính
zKhi lnh: cha mã thc thi ca chương trình
zNgăn xếp: s dng để lưu tr các kết qu trung gian
Máy ngăn xếp
JMP 2
INC 4
LA 0,4
LC 1
RV
DL
RA
SL
Code buffer Stack
PC
B
Lp KHMT K50
6
LC
1
ST
SL
P1
P2
V1
V2
tmp1 T
T
Máy ngăn xếp
zThanh ghi
zPC (program counter): con tr lnh tr ti
lnh hin ti đang thc thi trên b đệm
chương trình
Lp KHMT K50
7
chương
trình
zB (base) : con tr tr ti địa ch gc ca
vùng nh cc b. Các biến cc b được
truy xut gián tiếp qua con tr này
zT (top); tr ti đỉnh ca ngăn xếp
Máy ngăn xếp
zBn hot động (activation record/stack frame)
zKhông gian nh cp phát cho mi chương trình con (hàm/th
tc/chương trình chính) khi chúng được kích hot
zLưu giá tr tham s
zLưu giá tr biến cc b
zLưu các thông tin khác
Lp KHMT K50
8
zGiá tr tr v
ca hàm
RV
zĐịa ch cơ s ca bn hot động ca chương trình con
gi ti (caller) – DL
zĐịa ch lnh quay v khi kết thúc chương trình con – RA
zĐịa ch cơ s ca bn hot động ca chương trình con
bao ngoài – SL
zMt chương trình con có th có nhiu bn hot động
21/1/2010
3
Máy ngăn xếp
RV
DL
RA
SL
Param I
Local
Procedure P(I : integer);
Var a : integer;
Function Q;
Var x : char;
Begin
return
Ed
P frame
Lp KHMT K50
9
E
n
d
;
Procedure R(X: integer);
Var y : char;
Begin
y = Call Q;
End;
Begin
Call R(1);
End;
RV
DL
RA
SL
Local x
RV
DL
RA
SL
param x
Local y
R frame
Q frame
Máy ngăn xếp
zRV (return value): Lưu tr giá tr tr v cho mi hàm
zDL (dynamic link): S dng để hi phc ng cnh
ca chương trình gi (caller) khi chương trình được
gi (callee) kết thúc
Lp KHMT K50
1 0
zRA (return address): S dng để tìm ti lnh tiếp
theo ca caller khi callee kết thúc
zSL (static link): S dng để truy nhp các biến phi
cc b
Máy ngăn xếp
zB lnh
LA Load Address t:=t+1; s[t]:=base(p)+q;
LV Load Value t:=t+1; s[t]:=s[base(p)+q];
op p q
Lp KHMT K50
1 1
LC Load Constant t:=t+1; s[t]:=q;
LI Load Indirect s[t]:=s[s[t]];
INT Increment T t:=t+q;
DCT Decrement T t:=t-q;
Máy ngăn xếp
zB lnh
JJumppc:=q;
FJ False Jump if s[t]=0 then pc:=q; t:=t-1;
op p q
Lp KHMT K50
1 2
HL Halt Halt
ST Store s[s[t-1]]:=s[t]; t:=t-2;
CALL Call s[t+2]:=b; s[t+3]:=pc; s[t+4]:=base(p);
b:=t+1; pc:=q;
EP Exit
Procedure t:=b-1; pc:=s[b+2]; b:=s[b+1];
EF Exit
Function t:=b; pc:=s[b+2]; b:=s[b+1];
21/1/2010
4
Máy ngăn xếp
zB lnh
RC Read
Character read one character into s[s[t]]; t:=t-1;
RI Read Integer read integer to s[s[t]]; t:=t-1;
op p q
Lp KHMT K50
1 3
WRC Write
Character write one character from s[t]; t:=t-1;
WRI Write Integer write integer from s[t]; t:=t-1;
WLN New Line CR & LF
Máy ngăn xếp
zB lnh
AD Add t:=t-1; s[t]:=s[t]+s[t+1];
SB Subtract t:=t-1; s[t]:=s[t]-s[t+1];
op p q
Lp KHMT K50
1 4
ML Multiply t:=t-1; s[t]:=s[t]*s[t+1];
DV Divide t:=t-1; s[t]:=s[t]/s[t+1];
NEG Negative s[t]:=-s[t];
CV Copy Top o
f
Stack s[t+1]:=s[t]; t:=t+1;
Máy ngăn xếp
zB lnh
EQ Equal t:=t-1; if s[t] = s[t+1] then s[t]:=1 else
s[t]:=0;
NE Not Equal t:=t-1; if s[t] != s[t+1] then s[t]:=1 else
s[t]
:
=
0
;
op p q
Lp KHMT K50
1 5
s[t]
:
=
0
;
GT Greater
Than
t:=t-1; if s[t] > s[t+1] then s[t]:=1 else
s[t]:=0;
LT Less Than t:=t-1; if s[t] < s[t+1] then s[t]:=1 else
s[t]:=0;
GE Greater or
Equal
t:=t-1; if s[t] >= s[t+1] then s[t]:=1 else
s[t]:=0;
LE Less or
Equal
t:=t-1; if s[t] <= s[t+1] then s[t]:=1 else
s[t]:=0;
Xây dng bng ký hiu
zB sung thông tin cho biến
zV trí trên frame
zPhm vi
zB sung thông tin cho tham s
z
Vtrí trên frame
Lp KHMT K50
1 6
z
V
trí
trên
frame
zPhm vi
zB sung thông tin cho hàm/th tc/chương trình
zĐịa ch bt đầu
zKích thước ca frame
zS lượng tham s ca hàm/th tc
21/1/2010
5
Xây dng bng ký hiu
zB sung thông tin cho biến
zV trí trên frame (v trí tính t base ca frame)
zPhm vi
Lp KHMT K50
1 7
struct VariableAttributes_ {
Type *type;
struct Scope_ *scope;
int localOffset;
};
Xây dng bng ký hiu
zB sung thông tin cho tham s
zV trí trên frame
zPhm vi
Lp KHMT K50
1 8
struct ParameterAttributes_ {
enum ParamKind kind;
Type* type;
struct Scope_ *scope;
int localOffset;
};
Xây dng bng ký hiu
zB sung thông tin cho phm vi
zKích thước frame
Lp KHMT K50
1 9
struct Scope_ {
ObjectNode *objList;
Object *owner;
struct Scope_ *outer;
int frameSize;
};
Xây dng bng ký hiu
zB sung thông tin cho hàm
zV trí
zS lượng tham s
Lp KHMT K50
2 0
struct FunctionAttributes_ {
struct ObjectNode_ *paramList;
Type* returnType;
struct Scope_ *scope;
int paramCount;
CodeAddress codeAddress;
};