Bài giảng môn học trình biên dịch chương 9 sinh mã đối tượng

44 6 0
Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG SINH Mà ĐỐI TƯNG Chương Biên dịch trình nguồn phía trước Mã trung gian Bộ tối ưu mã Mã trung gian Chương Bộ sinh mã đối tượng trình dịch Bảng danh biểu Hình 9.1 Vị trí sinh mã đối tượng 9.1 Các vấn đề thiết kế sinh mã Đầu vào sinh mã Chương trình đích Sự lựa chọn thị Giả sử phát biểu ba địa có dạng x := y + z với x, y, z tượng trưng cho vị trí nhớ Chúng ta dịch sang chuỗi mã đối tượng: MOV y, Ro /* cất y vào ghi Ro */ ADD z, Ro /* cộng z vào nội dung Ro, kết chứa Ro */ MOV Ro, x /* cất nội dung Ro vào x */ Tuy nhiên việc sinh mã cho chuỗi phát biểu dẫn đến dư thừa mã Như thí dụ sau: a := b + c; d := a + e Chúng ta chuyển sang mã đối tượng: (1) MOV b, R0 (2) ADD c R0 (3) MOV R0, a (4) MOV a, R0 (5) ADD e, R0 (6) MOV R0, d Chỉ thị thứ tư thừa Chất lượng mã tạo ra, xác định tốc độ mã kích thước tập mã Thí duï: MOV a, R0 ADD # 1, R0 MOV R0, a Cấp phát ghi Sự lựa chọn cho việc đánh giá thứ tự 9.2 Máy đích Chúng ta dùng máy đích máy ghi (register machine) Máy đích có từ gồm bốn byte có n ghi: R0, R1 … Rn-1, có thị hai địa chỉ, với dạng tổng quát: op source, destination Thí dụ số thị: MOV: chuyển trị source đến destination ADD: cộng nội dung source destination SUB: trừ nội dung source cho destination Mode địa Thí dụ: Mode Absolute Register indexed Dạng M R c (R) Địa M R c + contents (R) Giaù 1 indirect register inderect indexed literal *R contents (R) *c (R) contents (c + contents (R)) #C haèng C Giá thị (instruction cost) Giá thị tính công giá kết hợp bảng mode địa nguồn đích Qua thí dụ thấy muốn sinh mã tốt phải hạ giá thị Sinh mã để quản lý ghi hoạt động thời gian thực thi Các mã quản lý phải đáp ứng hai kỹ thuật quản lý nhớ tónh cấp phát nhớ theo chế stack Việc cấp phát giải tỏa vị trí nhớ cho ghi hoạt động phần chuỗi hành vi gọi trở chương trình */ call return halt action /* tượng trưng cho phát biểu khác Thí dụ: /*mã cho c*/ action call p action halt /*maõ cho p*/ action return Bảng mã 0: địa 0: địa 8: arr 4: buf 56 i 60 j 84: n Bảng ghi hoạt động cho c Bảng ghi hoạt động cho p Cấp phát tónh Phát biểu call thực hai mã đối tượng MOV GOTO MOV # here + 20, callee.static - area GOTO callee code – rea Thí dụ 9.1 Mô 9.1 Mã đối tượng cho chương trình c p /* mã cho c */ 100: action 120: MOV 140, 364 132: GOTO 200 140: action2 160: halt … /* cất địa 140 */ /* gọi p */ /* mã cho p */ 200: action3 220: GOTO * 364 300: 304: 364: 368: /* trở địa cất vị trí 364 */ /* 300 - 364 cất ghi hoạt động c */ /* chứa địa */ /* liệu cục c */ /* 364 - 451 chứa ghi hoạt động p*/ /* chứa địa */ /* liệu cục p */ Cấp phát theo chế stack Mã cho chương trình mã khởi động stack, cất địa bắt đầu stack vào sp thị MOV # stackstart, SP Như mã đối tượng cho chương trình bao gồm: MOV # stackstart, SP /* khởi động stack */ đoạn mã cho chương trình HALT /* kết thức thực thi */ ADD # caller.recordsize, SP MOV # here + 16, * SP /* lưu địa */ GOTO callee.code-area Chuỗi trở gồm hai thị: GOTO *0 (SP) /* trở chương trình gọi */ SUB # callee.recordsize, SP Chỉ thị GOTO *0 (SP) Thí dụ 9.2 /* mã cho s */ /* mã cho q */ action1 action4 callq callp action2 action5 halt callq action6 /* maõ cho p */ action3 callq return return Hình 9.3 Mã trung gian chương trình mô 9.1 Mô 9.2 Mã đối tượng cho mã trung gian (H.9.3) /* mã cho s */ 100: MOV # 600, SP /* khởi động stack */ 108: action1 128: ADD # ssize, SP /* chuỗi gọi bắt đầu */ 136: MOV 152, * SP /* cất địa */ 144: GOTO 300 /* gọi q */ 152: SUB # ssize, SP /* giảm trị SP khoảng ssize */ 160: action2 180: HALT /* maõ cho p */ 200: action3 220: GOTO * 0(SP) /* trở chương trình gọi */ /* mã cho q */ /* nhảy có điều kiện 456 */ 300: action4 320: ADD # qsize, SP 328: MOV 344, * SP /* cất địa */ 336: GOTO 200 /* gọi P */ Ứng dụng dag Ở thí dụ 9.5 xây dựng dag, giúp cho việc tự động loại bỏ biểu thức giống Nó xác định biến mà trị chúng sử dụng khối Dag giúp ta xác định phát biểu mà trị chúng sử dụng phạm vi khối Thí dụ 9.6 Chúng ta xây dựng lại khối từ dag (H.9.7e) Dãy, trỏ lệnh gọi chương trình Chúng ta khảo sát khối sau đây: x := a[i] a[j] := y z := a[i] Giải thuật 9.2 a[i] trở thành biểu thức chung Từ dag tạo lại khối tối ưu có dạng: x := a[i] z := x a[j] := y Nhưng khối (9.1) (9.2) tính trị z khác j = I y ≠ a[i] Đối với trỏ xảy vấn đề ta có phát biểu gán * p := w Nếu ta p đến đối tượng nào, phải loại tất nút có dạng Việc gọi chương trình giết tất nút ta chưa biết chương trình bị gọi, nên ta buộc phải giả sử biến bị thay đổi trị hiệu ứng lề 9.6 Tạo mã đối tượng từ dag Sắp xếp lại thứ tự t1 := a + c t2 := c + d t3 := e – t2 t4 := t1 – t3 Ta xếp lại chuỗi mã trung gian cho việc tính toán t1 xảy trước t4 t2 := c + d t1 := a + b t3 := e – t2 t4 := t1 – t3 Mô 9.6 Mã đối tượng cho chuỗi phát biểu (H.9.8) MOV a, R0 ADD b, R0 MOV c, R1 ADD d, R1 MOV R0 , t1 MOV e, R0 SUB R1, R0 MOV t1, R1 SUB R0 , R1 MOV R1 , t4 Mô 9.7 Chuỗi mã sau xếp lại mã trung gian MOV c, R0 ADD d, R0 MOV e, R1 SUB R0 , R1 MOV a, R0 ADD b, R0 SUB R1 , R0 MOV R0 , t4 Heuristics dùng để xếp dag Mô 9.8 Giải thuật xếp nút dag (1) While nút trung gian chưa liệt kê begin (2) Chọn nút chưa liệt kê n; tất nút cha mẹ liệt kê (3) liệt kê n; (4) While m tận bên trái n, có cha mẹ liệt kê nút begin (5) liệt kê m; (6) n := m; end; end Thí dụ 9.7 Giải thuật mô 9.8 để tạo xếp mã trung gian (H.9.9) ∗ + − ∗ + − + a c b d 10 Hình 9.9 Dag cho thí dụ 11 e 12 t8 := d + e t6 := a + b t5 := t6 - c t4 := t5 * t8 t3 := t4 - e t2 := t6 + t4 t1:= t2 * t3 Sắp xếp tối ưu cho Giải thuật có hai phần: phần đầu đánh tên cho nút cây, phần thứ hai giải thuật miêu tả lộ trình Mã đối tượng sinh trình thực lộ trình ƒ Giải thuật xác định nhãn nút Mô 9.9 Giải thuật tính tên nút label (n) = max (l1 , l2) neáu l1 ≠ l2 l1 + neáu l1 = l2 (1) if n then (2) if n tận bên trái nút cha then (3) label (n) := (4) else label (n) := else begin /* n nút trung gian */ (5) giả sử n1 , n2 , …, nk nút n, theo thứ tự tên, cho label (n1) > label (n2) ≥ … ≥ label (nk ) (6) label (n) := max (label (ni ) + i – 1) 1

Ngày đăng: 23/03/2022, 21:57

Hình ảnh liên quan

Hình 9.1. Vị trí của bộ sinh mã đối tượng - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.1..

Vị trí của bộ sinh mã đối tượng Xem tại trang 1 của tài liệu.
Giá chỉ thị được tính bằng một công giá kết hợp trong bảng mode địa chỉ nguồn và đích ở trên. - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

i.

á chỉ thị được tính bằng một công giá kết hợp trong bảng mode địa chỉ nguồn và đích ở trên Xem tại trang 5 của tài liệu.
Bảng mã Bảng ghi hoạt - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Bảng m.

ã Bảng ghi hoạt Xem tại trang 6 của tài liệu.
Hình 9.3. Mã trung gian của chương trìn hở mô phỏng 9.1 - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.3..

Mã trung gian của chương trìn hở mô phỏng 9.1 Xem tại trang 9 của tài liệu.
Hình 9.4. Lưu đồ của chương trình - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.4..

Lưu đồ của chương trình Xem tại trang 17 của tài liệu.
Bảng 9.1. Chuỗi mã đối tượng sinh ra cho thí dụ 9.3 - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Bảng 9.1..

Chuỗi mã đối tượng sinh ra cho thí dụ 9.3 Xem tại trang 20 của tài liệu.
Bảng 9.2. Chuỗi mã đối tượng cho phát biểu xác định chỉ số và gán. - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Bảng 9.2..

Chuỗi mã đối tượng cho phát biểu xác định chỉ số và gán Xem tại trang 21 của tài liệu.
Bảng 9.3. Mã đối tượng cho phép gán con trỏ - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Bảng 9.3..

Mã đối tượng cho phép gán con trỏ Xem tại trang 22 của tài liệu.
Hình 9.5. Dag cho khối B2 ở mô phỏng 9.5 - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.5..

Dag cho khối B2 ở mô phỏng 9.5 Xem tại trang 25 của tài liệu.
Hình 9.7. Các bước xây dựng dag của khối B2 ở thí dụ 9.5. - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.7..

Các bước xây dựng dag của khối B2 ở thí dụ 9.5 Xem tại trang 29 của tài liệu.
Hình 9.9. Dag cho thí dụ - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.9..

Dag cho thí dụ Xem tại trang 34 của tài liệu.
Hình 9.10. Cây được xác định tên - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.10..

Cây được xác định tên Xem tại trang 37 của tài liệu.
Hình 9.11. Chuyển đổi cây bằng phép hoán vị, kết hợp - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.11..

Chuyển đổi cây bằng phép hoán vị, kết hợp Xem tại trang 43 của tài liệu.
Hình 9.12. Phân chia thành các cây con - Bài giảng môn học trình biên dịch   chương 9 sinh mã đối tượng

Hình 9.12..

Phân chia thành các cây con Xem tại trang 44 của tài liệu.

Tài liệu cùng người dùng

Tài liệu liên quan