intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Xây dựng chương trình dịch: Bài 12 - Nguyễn Thị Thu Hương

Chia sẻ: Ti Vu | Ngày: | Loại File: PDF | Số trang:11

56
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Xây dựng chương trình dịch - Bài 12: Sinh mã đích" cung cấp cho người học các kiến thức: Tổng quan về sinh mã đích, máy ngăn xếp, sinh mã cho các lệnh cơ bản, xây dựng bảng ký hiệu, chương trình đích được dịch từ. Hi vọng đây sẽ là một tài liệu hữu ích dành cho các bạn sinh viên Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Xây dựng chương trình dịch: Bài 12 - Nguyễn Thị Thu Hương

21/1/2010<br /> <br /> Nội dung<br /> z<br /> z<br /> <br /> Bài 12<br /> <br /> Tổng quan về sinh mã đích<br /> Máy ngăn xếp<br /> z<br /> <br /> Sinh mã đích<br /> <br /> z<br /> <br /> z<br /> z<br /> <br /> Sinh mã cho các lệnh cơ bản<br /> Xây dựng bảng ký hiệu<br /> z<br /> <br /> Nguyễn Thị Thu Hương<br /> <br /> Tổ chức bộ nhớ<br /> Bộ lệnh<br /> <br /> z<br /> z<br /> <br /> Biến<br /> Tham số<br /> Hàm, thủ tục và chương trình<br /> Lớp KHMT K50<br /> <br /> 1<br /> <br /> Chương trình đích<br /> „<br /> „<br /> „<br /> „<br /> „<br /> <br /> 2<br /> <br /> Chương trình đích được dịch từ<br /> <br /> Viết trên một ngôn ngữ trung gian<br /> Là dạng Assembly của máy giả định (máy ảo)<br /> Máy<br /> y ảo làm việc<br /> ệ với bộ<br /> ộ nhớ stack<br /> Việc thực hiện chương trình thông qua một<br /> interpreter<br /> Interpreter mô phỏng hành động của máy ảo<br /> thực hiện tập lệnh assembly của nó<br /> <br /> Mã nguồn<br /> „ Mã trung gian<br /> „<br /> <br /> 3<br /> <br /> 4<br /> <br /> 1<br /> <br /> 21/1/2010<br /> <br /> Máy ngăn xếp<br /> z<br /> <br /> Máy ngăn xếp<br /> <br /> Máy ngăn xếp là một hệ thống tính toán<br /> <br /> Code buffer<br /> <br /> Sử dụng ngăn xếp để lưu trữ các kết quả trung gian<br /> của quá trình tính toán<br /> z Kiến trúc đơn giản<br /> z Bộ lệnh đơn giản<br /> Máy ngăn xếp có hai vùng bộ nhớ chính<br /> z Khối lệnh: chứa mã thực thi của chương trình<br /> z Ngăn xếp: sử dụng để lưu trữ các kết quả trung gian<br /> z<br /> <br /> z<br /> <br /> Lớp KHMT K50<br /> <br /> PC<br /> <br /> DL<br /> <br /> LA 0,4<br /> <br /> RA<br /> <br /> ST<br /> <br /> B<br /> <br /> SL<br /> T ↑<br /> <br /> P1<br /> P2<br /> V1<br /> V2<br /> tmp1<br /> <br /> Lớp KHMT K50<br /> <br /> 5<br /> <br /> T<br /> <br /> 6<br /> <br /> Máy ngăn xếp<br /> z<br /> <br /> Thanh ghi<br /> z PC (program counter): con trỏ lệnh trỏ tới<br /> lệnh hiện tại đang thực thi trên bộ đệm<br /> chương trình<br /> z B (base) : con trỏ trỏ tới địa chỉ gốc của<br /> vùng nhớ cục bộ. Các biến cục bộ được<br /> truy xuất gián tiếp qua con trỏ này<br /> z T (top); trỏ tới đỉnh của ngăn xếp<br /> <br /> Lớp KHMT K50<br /> <br /> RV<br /> <br /> INC 4<br /> LC 1<br /> <br /> Máy ngăn xếp<br /> z<br /> <br /> Stack<br /> <br /> JMP 2<br /> <br /> 7<br /> <br /> Bản hoạt động (activation record/stack frame)<br /> z Không gian nhớ cấp phát cho mỗi chương trình con (hàm/thủ<br /> tục/chương trình chính) khi chúng được kích hoạt<br /> z Lưu giá trị tham số<br /> z Lưu giá trị biến cục bộ<br /> z Lưu các thông tin khác<br /> z Giá trị trả về<br /> ề của hàm – RV<br /> z Địa chỉ cơ sở của bản hoạt động của chương trình con<br /> gọi tới (caller) – DL<br /> z Địa chỉ lệnh quay về khi kết thúc chương trình con – RA<br /> z Địa chỉ cơ sở của bản hoạt động của chương trình con<br /> bao ngoài – SL<br /> z Một chương trình con có thể có nhiều bản hoạt động<br /> Lớp KHMT K50<br /> <br /> 8<br /> <br /> 2<br /> <br /> 21/1/2010<br /> <br /> Máy ngăn xếp<br /> Procedure P(I : integer);<br /> Var a : integer;<br /> Function Q;<br /> Var x : char;<br /> Begin<br /> …<br /> return<br /> E d<br /> End;<br /> Procedure R(X: integer);<br /> Var y : char;<br /> Begin<br /> …<br /> y = Call Q;<br /> …<br /> End;<br /> Begin<br /> …<br /> Call R(1);<br /> …<br /> End;<br /> …<br /> <br /> Máy ngăn xếp<br /> <br /> …<br /> RV<br /> DL<br /> RA<br /> SL<br /> Param I<br /> Local x<br /> …<br /> RV<br /> DL<br /> RA<br /> SL<br /> Local x<br /> …<br /> RV<br /> DL<br /> RA<br /> SL<br /> param x<br /> Local y<br /> Lớp KHMT K50<br /> <br /> z<br /> z<br /> P frame<br /> <br /> z<br /> R frame<br /> <br /> z<br /> <br /> RV (return value): Lưu trữ giá trị trả về cho mỗi hàm<br /> DL (dynamic link): Sử dụng để hồi phục ngữ cảnh<br /> của chương trình gọi (caller) khi chương trình được<br /> gọi (callee) kết thúc<br /> RA (return address): Sử dụng để tìm tới lệnh tiếp<br /> theo của caller khi callee kết thúc<br /> SL (static link): Sử dụng để truy nhập các biến phi<br /> cục bộ<br /> <br /> Q frame<br /> <br /> Lớp KHMT K50<br /> <br /> 9<br /> <br /> Máy ngăn xếp<br /> <br /> Máy ngăn xếp<br /> z<br /> <br /> Bộ lệnh<br /> <br /> op<br /> <br /> p<br /> <br /> 10<br /> <br /> q<br /> <br /> z<br /> <br /> Bộ lệnh<br /> <br /> op<br /> <br /> q<br /> <br /> LA<br /> <br /> Load Address<br /> <br /> t:=t+1; s[t]:=base(p)+q;<br /> <br /> J<br /> <br /> LV<br /> <br /> Load Value<br /> <br /> t:=t+1; s[t]:=s[base(p)+q];<br /> <br /> FJ<br /> <br /> False Jump<br /> <br /> if s[t]=0 then pc:=q; t:=t-1;<br /> <br /> HL<br /> <br /> Halt<br /> <br /> Halt<br /> <br /> ST<br /> <br /> Store<br /> <br /> s[s[t-1]]:=s[t]; t:=t-2;<br /> <br /> Call<br /> <br /> s[t+2]:=b; s[t+3]:=pc;<br /> b:=t+1; pc:=q;<br /> <br /> LC<br /> <br /> Load Constant<br /> <br /> t:=t+1; s[t]:=q;<br /> <br /> LI<br /> <br /> Load Indirect<br /> <br /> s[t]:=s[s[t]];<br /> <br /> INT<br /> <br /> Increment T<br /> <br /> t:=t+q;<br /> <br /> DCT<br /> <br /> Decrement T<br /> <br /> t:=t-q;<br /> <br /> CALL<br /> EP<br /> EF<br /> <br /> Lớp KHMT K50<br /> <br /> 11<br /> <br /> Jump<br /> <br /> p<br /> <br /> Exit<br /> Procedure<br /> Exit<br /> Function<br /> <br /> pc:=q;<br /> <br /> s[t+4]:=base(p);<br /> <br /> t:=b-1; pc:=s[b+2]; b:=s[b+1];<br /> t:=b; pc:=s[b+2]; b:=s[b+1];<br /> Lớp KHMT K50<br /> <br /> 12<br /> <br /> 3<br /> <br /> 21/1/2010<br /> <br /> Máy ngăn xếp<br /> z<br /> <br /> Bộ lệnh<br /> <br /> op<br /> <br /> p<br /> <br /> Máy ngăn xếp<br /> <br /> q<br /> <br /> z<br /> <br /> op<br /> <br /> p<br /> <br /> q<br /> <br /> RC<br /> <br /> read one character into s[s[t]]; t:=t-1;<br /> <br /> AD<br /> <br /> Add<br /> <br /> t:=t-1; s[t]:=s[t]+s[t+1];<br /> <br /> RI<br /> <br /> Read Integer<br /> <br /> read integer to s[s[t]]; t:=t-1;<br /> <br /> SB<br /> <br /> Subtract<br /> <br /> t:=t-1; s[t]:=s[t]-s[t+1];<br /> <br /> WRC<br /> <br /> Write<br /> Character<br /> <br /> write one character from s[t]; t:=t-1;<br /> <br /> ML<br /> <br /> Multiply<br /> <br /> t:=t-1; s[t]:=s[t]*s[t+1];<br /> <br /> WRI<br /> <br /> Write Integer<br /> <br /> write integer from s[t]; t:=t-1;<br /> <br /> DV<br /> <br /> Divide<br /> <br /> t:=t-1; s[t]:=s[t]/s[t+1];<br /> <br /> WLN<br /> <br /> New Line<br /> <br /> CR & LF<br /> <br /> NEG<br /> <br /> Negative<br /> <br /> s[t]:=-s[t];<br /> <br /> CV<br /> <br /> Copy Top of<br /> s[t+1]:=s[t]; t:=t+1;<br /> Stack<br /> <br /> Lớp KHMT K50<br /> <br /> Lớp KHMT K50<br /> <br /> 13<br /> <br /> Máy ngăn xếp<br /> Bộ lệnh<br /> EQ<br /> NE<br /> GT<br /> LT<br /> GE<br /> LE<br /> <br /> op<br /> <br /> p<br /> <br /> t:=t-1;<br /> s[t]:=0;<br /> t:=t-1;<br /> Not Equal<br /> s[t]:=0;<br /> Greater<br /> t:=t-1;<br /> Than<br /> s[t]:=0;<br /> t:=t-1;<br /> Less Than<br /> s[t]:=0;<br /> Greater or t:=t-1;<br /> Equal<br /> s[t]:=0;<br /> Less<br /> or t:=t-1;<br /> Equal<br /> s[t]:=0;<br /> Equal<br /> <br /> q<br /> <br /> if s[t] = s[t+1] then s[t]:=1 else<br /> if s[t] != s[t+1] then s[t]:=1 else<br /> <br /> z<br /> <br /> if s[t] > s[t+1] then s[t]:=1 else<br /> if s[t] < s[t+1] then s[t]:=1 else<br /> if s[t] >= s[t+1] then s[t]:=1 else<br /> if s[t]
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2