Bài giảng Xây dựng chương trình dịch: Bài 12 - Sinh mã đích
lượt xem 4
download
Bài giảng "Xây dựng chương trình dịch: Bài 12 - Sinh mã đích" bao gồm các nội dung kiến thức về: 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;... Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Xây dựng chương trình dịch: Bài 12 - Sinh mã đích
- Bài 12 Sinh mã đích 1
- Nội dung Tổng quan về sinh mã đích Máy ngăn xếp Tổ chức bộ nhớ Bộ lệnh Sinh mã cho các lệnh cơ bản Xây dựng bảng ký hiệu Biến Tham số Hàm, thủ tục và chương trình 2
- Chương trình đích • Viết trên một ngôn ngữ trung gian • Là dạng Assembly của máy giả định (máy ảo) • Máy ảo làm việc với bộ nhớ stack • Việc thực hiện chương trình thông qua một interpreter • Interpreter mô phỏng hành động của máy ảo thực hiện tập lệnh assembly của nó 3
- Chương trình đích được dịch từ • Mã nguồn • Mã trung gian 4
- Máy ngăn xếp Máy ngăn xếp là một hệ thống tính toán Sử dụng ngăn xếp để lưu trữ các kết quả trung gian của quá trình tính toán Kiến trúc đơn giản Bộ lệnh đơn giản Máy ngăn xếp có hai vùng bộ nhớ chính Khối lệnh: chứa mã thực thi của chương trình Ngăn xếp: sử dụng để lưu trữ các kết quả trung gian 5
- Máy ngăn xếp Code buffer Stack JMP 2 RV B PC INC 4 DL LA 0,4 RA LC 1 SL ST T P1 P2 V1 V2 tmp1 T 6
- Máy ngăn xếp Thanh ghi PC (program counter): con trỏ lệnh trỏ tới lệnh hiện tại đang thực thi trên bộ đệm chương trình B (base) : con trỏ trỏ tới địa chỉ gốc của vùng nhớ cục bộ. Các biến cục bộ được truy xuất gián tiếp qua con trỏ này T (top); trỏ tới đỉnh của ngăn xếp 7
- Máy ngăn xếp Bản hoạt động (activation record/stack frame) Không gian nhớ cấp phát cho mỗi chương trình con (hàm/thủ tục/chương trình chính) khi chúng được kích hoạt Lưu giá trị tham số Lưu giá trị biến cục bộ Lưu các thông tin khác o Giá trị trả về của hàm – RV o Địa chỉ cơ sở của bản hoạt động của chương trình con gọi tới (caller) – DL o Địa chỉ lệnh quay về khi kết thúc chương trình con – RA o Địa chỉ cơ sở của bản hoạt động của chương trình con bao ngoài – SL Một chương trình con có thể có nhiều bản hoạt động 8
- Máy ngăn xếp Procedure P(I : integer); … Var a : integer; RV Function Q; DL RA Var x : char; SL P frame Begin Param I … Local a … return RV End; DL Procedure R(X: RA R frame integer); SL Param X Var y : char; Local y Begin … RV … DL y = Q; RA Q frame SL … Local x End; Begin … 9 Call R(1);
- Máy ngăn xếp RV (return value): Lưu trữ giá trị trả về cho mỗi hàm DL (dynamic link): Sử dụng để hồi phục ngữ cảnh của chương trình gọi (caller) khi chương trình được gọi (callee) kết thúc RA (return address): Sử dụng để tìm tới lệnh tiếp theo của caller khi callee kết thúc SL (static link): Sử dụng để truy nhập các biến phi cục bộ 10
- Bộ lệnh của máy ngăn xếp Dạng lệnh: op p q LA Load Address t:=t+1; s[t]:=base(p)+q; LV Load Value t:=t+1; s[t]:=s[base(p)+q]; 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; 11
- Các lệnh chuyển điều khiển Dạng lệnh op p q J Jump pc:=q; FJ False Jump if s[t]=0 then pc:=q; t:=t-1; HL Halt Halt ST Store s[s[t-1]]:=s[t]; t:=t-2; s[t+2]:=b; s[t+3]:=pc; s[t+4]:=base(p); CALL Call b:=t+1; pc:=q; Exit EP t:=b-1; pc:=s[b+2]; b:=s[b+1]; Procedure Exit EF t:=b; pc:=s[b+2]; b:=s[b+1]; Function 12
- Các lệnh vào ra Dạng lệnh op p q Read RC read one character into s[s[t]]; t:=t-1; Character RI Read Integer read integer to s[s[t]]; t:=t-1; Write WRC write one character from s[t]; t:=t-1; Character WRI Write Integer write integer from s[t]; t:=t-1; WLN New Line CR & LF 13
- Các lệnh tính toán Dạng lệnh op p q AD Add t:=t-1; s[t]:=s[t]+s[t+1]; SB Subtract t:=t-1; s[t]:=s[t]-s[t+1]; 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]; Copy Top of CV s[t+1]:=s[t]; t:=t+1; Stack 14
- Các lệnh so sánh Bộ lệnh op p q t:=t-1; if s[t] = s[t+1] then s[t]:=1 else EQ Equal s[t]:=0; t:=t-1; if s[t] != s[t+1] then s[t]:=1 else NE Not Equal s[t]:=0; Greater t:=t-1; if s[t] > s[t+1] then s[t]:=1 else GT Than s[t]:=0; t:=t-1; if s[t] < s[t+1] then s[t]:=1 else LT Less Than s[t]:=0; Greater or t:=t-1; if s[t] >= s[t+1] then s[t]:=1 else GE Equal s[t]:=0; Less or t:=t-1; if s[t]
- Sinh mã lệnh gán V := exp // đẩy địa chỉ của v lên stack // đẩy giá trị của exp lên stack ST 16
- Nhắc lại ĐNTCP sinh mã trung gian cho lệnh gán 17
- Cú pháp của lệnh gán S ::= id:= E E ::= - E2 | E2 E2 ::= TE3 E3 ::= +TE3 | -TE3 | T ::= FT2 T2 ::= *FT2 | /FT2 | F ::= id | num |(E) 18
- Lvalue case OBJ_VARIABLE: genVariableAddress(var); if (var->varAttrs->type->typeClass == TP_ARRAY) {varType = compileIndexes (var->varAttrs->type);} else varType = var->varAttrs->type; break; 19
- Expression3 switch (lookAhead->tokenType) case SB_MINUS: { case SB_PLUS: eat(SB_MINUS); eat(SB_PLUS); checkIntType(argType1); checkIntType(argType1); argType2 = compileTerm(); argType2 = checkIntType(argType2); compileTerm(); genSB(); checkIntType(argType2); resultType = genAD(); compileExpression3(argType1); resultType = break; compileExpression3(argType1); break; 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Xây dựng chương trình dịch: Bài 1 - Nguyễn Thị Thu Hương
6 p | 131 | 5
-
Bài giảng Xây dựng chương trình dịch: Bài 4 - BNF và sơ đồ cú pháp
23 p | 31 | 4
-
Bài giảng Xây dựng chương trình dịch: Bài 13 - Nguyễn Thị Thu Hương
8 p | 53 | 4
-
Bài giảng Xây dựng chương trình dịch: Bài 10 - Phân tích ngữ nghĩa
52 p | 14 | 4
-
Bài giảng Xây dựng chương trình dịch: Bài 5 - Nguyễn Thị Thu Hương
4 p | 53 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 2 - Nguyễn Thị Thu Hương
6 p | 68 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 7 - Nguyễn Thị Thu Hương
3 p | 61 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 8 - Nguyễn Thị Thu Hương
4 p | 66 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 2 - Các giai đoạn chính của chương trình dịch
23 p | 8 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 10 - Nguyễn Thị Thu Hương
9 p | 59 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 1 - Bộ xử lý ngôn ngữ và trình biên dịch
25 p | 9 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 12 - Nguyễn Thị Thu Hương
11 p | 55 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 3 - Nguyễn Thị Thu Hương
3 p | 63 | 3
-
Bài giảng Xây dựng chương trình dịch: Bài 11 - Nguyễn Thị Thu Hương
10 p | 46 | 2
-
Bài giảng Xây dựng chương trình dịch: Bài 4 - Nguyễn Thị Thu Hương
5 p | 60 | 2
-
Bài giảng Xây dựng chương trình dịch: Bài 6 - Nguyễn Thị Thu Hương
8 p | 64 | 2
-
Bài giảng Xây dựng chương trình dịch: Bài 9 - Nguyễn Thị Thu Hương
5 p | 57 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn