1. Trang chủ
  2. » Công Nghệ Thông Tin

Bai giang 9 sinh ma

27 137 0

Đ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

Cấu trúc

  • Bài giảng 9 – Sinh mã

  • Nội dung

  • Chương trình đích

  • Chương trình đích (tiếp)

  • Máy đích

  • Máy tính ảo

  • Máy tính ảo (tiếp)

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Một bộ sinh mã đơn giản

  • Yêu cầu

  • Ví dụ

  • Ví dụ (tiếp)

  • Bản diễn tả thông tin thanh ghi và địa chỉ

  • Thuật toán sinh mã

  • Hàm getreg

  • Slide 23

  • Slide 24

  • Sinh mã cho các câu lệnh điều kiện

  • Một số chỉ thị nhảy

  • Slide 27

Nội dung

Nguyễn Phương Thái Bộ môn Khoa học Máy tính http://www.coltech.vnu.vn/~thainp/ Nội dung  Chương trình đích  Máy tính ảo  Sinh mã Chương trình đích  Ngôn ngữ máy tuyệt đối:  Có thể đặt vị trí cố định nhớ thực thi  Ưu điểm: Chương trình nhỏ chạy nhanh  Ngôn ngữ máy định vị:  Cho phép biên dịch riêng rẽ chương trình con, sau liên kết lại với tải vào để thực thi nhờ công cụ tải liên kết (linking loader)  Ưu điểm: Các môđun chương trình độc lập có dịch độc lập, sau kết hợp với thành chương trình đối tượng hoàn chỉnh nhờ việc liên kết nạp Chương trình đích (tiếp)  Mã thông dịch:  Chuỗi hoạt động biểu diễn thị lệnh máy hoạt động trực tiếp mà câu lệnh thông dịch trừu tượng dạng mã hoá  Chương trình biên dịch trường hợp chuyển chương trình nguồn thành chương trình với lệnh ảo  Chương trình đích sau hoạt động nhờ vào chương trình thông dịch  Ưu điểm: Dễ viết chương trình dịch, chạy nhiều tảng phần cứng hệ điều hành  Nhược điểm: Chậm mã máy tuyệt đối nhiều lần Máy đích  Để thiết kế sinh mã, phải thông hiểu máy đích tập thị  Để đơn giản, dùng máy ảo làm máy đích  Máy tính ảo  Tên gọi: VIM  Chỉ có hai ghi với nhớ ngăn xếp  Bộ nhớ chương trình nhớ liệu nằm tách rời  Mọi thị chiếm ô nhớ chương trình chương trình (địa ô lệnh số tự nhiên)  Một ghi trỏ thị ic có chứa địa lệnh thực Đỉnh ngăn xếp ghi thứ hai sp Máy tính ảo (tiếp)  Cấu trúc máy tính VIM bao gồm hai ghi ic, sp nhớ chia thành ba vùng ngăn xếp (stack), nhớ liệu (data), nhớ chương trình (prog) sp stack data ic prog Máy tính ảo (tiếp)  Các thị bao gồm toán tử nhiều tham số (có thể số địa nhớ chương trình liệu)  Các toán tử số học quan hệ tham số Chúng thực hai giá trị (toán hạng) nằm đỉnh ngăn xếp số học (gọi tắt ngăn xếp) Các toán hạng thay kết thu nhờ áp dụng phép toán cho toán hạng Máy tính ảo (tiếp)  Các thị nạp (load) lưu (store), nhẩy (jump) có tham số  Lệnh nạp: chép liệu biến nằm nhớ liệu vào đỉnh ngăn xếp  Lệnh lưu: loại bỏ giá trị đỉnh ngăn xếp đưa vào nhớ liệu  Các thị vào ra: tham số, lệnh vào đọc giá trị từ bàn phím lưu vào ngăn xếp, lệnh loại bỏ giá trị đỉnh ngăn xếp ghi hình Máy tính ảo (tiếp) câu lệnh ngôn ngữ nguồn SLANG “a := b + c” , với a, b biến c số chuyển sang mã máy VIM sau: ldvar b ldcon c add stvar a Máy tính ảo (tiếp) ldcon intval ldvar address stvar address thị Nạp Lưu nạp giá trị số nguyên intval vào ngăn xếp chép giá trị số nguyên từ địa nhớ address vào ngăn xếp loại bỏ giá trị số nguyên đỉnh ngăn xếp ghi vào địa nhớ address thị Phép toán số học hai add cộng hai số nguyên sub trừ hai số nguyên mul nhân hai số nguyên Máy tính ảo (tiếp) dvi lấy thương hai số nguyên mdl lấy phần dư hai số nguyên thị Phép toán số học neg lưu giá trị số nguyên dạng –intval vào ngăn xếp abs lưu giá trị tuyệt đối intval vào ngăn xếp thị Phép so sánh eq (=) ne khác () lt bé (=) Máy tính ảo (tiếp) jump address jift address jiff address thị Nhảy nhảy tới địa address mà không cần điều kiện loại bỏ giá trị chân lý (gọi truthval) khỏi ngăn xếp; giá trị dó true nhảy tới địa address, trái lại thị thực loại bỏ giá trị chân lý (gọi truthval) khỏi ngăn xếp; giá trị dó false nhảy tới địa address, trái lại thị thực thị Vào rdint wrint đọc giá trị số nguyên từ bàn phím lưu vào ngăn xếp loại giá trị nằm đỉnh ngăn xếp ghi hình thị khác half dừng việc thực Một sinh mã đơn giản  Giả sử máy đích có đặc điểm sau:  đánh địa theo byte với bốn byte cho từ nhớ  có n ghi R0, R1, , Rn-1  thị hai địa có dạng op source, destination Trong op mã toán tử, source destination trường liệu  Với số thị lệnh sau:    MOV source,destination ADD source,destination SUB source,destination Yêu cầu  Thiết kế sinh mã để sinh mã đích cho dãy câu lệnh ba địa  Để đơn giản, giả sử rằng:  Mỗi toán tử câu lệnh có toán tử tương ứng ngôn ngữ đích  Kết tính để lại ghi lâu tốt Ví dụ x := y+z với x, y z cấp phát tĩnh dịch thành dãy mã ba địa sau: MOV ADD MOV y,R0 z,R0 R0,z Ví dụ (tiếp) a := b + c d := a + e dịch thành: MOV b,R0 ADD c,R0 MOV R0,a MOV a,R0 ADD e,R0 MOV R0,d Ở câu lệnh thứ tư thừa, câu lệnh thứ ba thừa a sau không dùng Bản diễn tả thông tin ghi địa  Bản diễn tả thông tin ghi (register descriptor)  theo dõi xem ghi chứa giá trị  tham vấn cần đến ghi  ban đầu diễn tả thông tin ghi cho biết ghi rỗng (chưa chứa thông tin) Khi tiến hành sinh mã, ghi giữ giá trị không nhiều tên thời điểm cho  Bản diễn tả địa (address descriptor)  theo dõi vị trị (hoặc vị trí) tìm giá trị tên (vị trí ghi, vị trí ngăn xếp, địa nhớ tập vị trí này)  thông tin cất bảng ký hiệu dùng để xác định phương pháp truy xuất cho tên Thuật toán sinh mã  Thuật toán sinh mã nhận đầu vào dãy câu lệnh ba địa cấu tạo nên khối Với câu lệnh ba địa có dạng x := y op z thực hành động sau:  kích hoạt hàm getreg để xác định vị trí L, nơi cất kết tính toán y op z với L thường ghi, vị trí nhớ  tham vấn diễn tả thông tin địa y để xác định y’, vị trí y Ưu tiên chọn ghi cho y’ giá trị y nhớ ghi Nếu giá trị y L, sinh thị lệnh MOV y’,L để đặt y vào L  sinh thị lệnh OP z’, L với z’ vị trí z Một lần ưu tiên chọn ghi nhớ z có hai nơi Cập nhật diễn tả thông tin địa x để x nằm L Nếu L ghi, cập nhật diễn tả thông tin ghi để chứa giá trị x, xoá x khỏi tất tả thông tin ghi  giá trị y z lần dùng kế tiếp, không sống sau thoát khỏi khối nằm ghi, sửa lại diễn tả thông tin ghi để sau thực thi x := y op z, ghi không chứa y z Hàm getreg  Hàm getreg trả vị trí L để giữ giá trị x cho câu lệnh gán x := y op z  tên y có ghi y không sử dụng tiếp sau thực phép toán x := y op z vị trí L ghi chứa giá trị y  không tồn trường hợp (1), trả ghi trống cho L  trường hợp (2) thất bại x có lần dùng khối lệnh, tìm ghi R bị chiếm Cất giá trị R vào vị trí nhớ thị MOV R,M Cập nhật diễn tả thông tin địa cho M gán vị trí L R Chú ý trường hợp R giữ giá trị nhiều biến, cần sinh thị MOV cho biến cần lưu  Nếu x không dùng khối, ghi thích hợp, chọn vị trí nhớ x làm L Ví dụ Ví dụ: câu lệnh “d := (a-b)+(a-c)+(a-c)” dịch thành dãy mã ba địa sau: t1 := a – b t2 := a – c t3 := t1 + t2 d := t3 + t2 Ví dụ (tiếp) câu lệnh t1 := a – b mã sinh MOV a,R0 SUB b,R0 thông tin ghi R0 chứa t1 thông tin địa t1 R0 t2 := a – c MOV a,R1 SUB c,R1 R0 chứa t1 R1 chứa t2 t1 R0 t2 R1 t3 := t1 + t2 ADD R1,R0 R0 chứa t3 R1 chứa t2 t3 R0 t2 R1 d := t3 + t2 ADD R1,R0 MOV R0,d R0 chứa d d R0 Sinh mã cho câu lệnh điều kiện  Các máy cài đặt lệnh nhảy có điều kiện hai cách:  Cách 1: rẽ nhánh giá trị ghi định thoả sáu điều kiện: âm, không âm, dương, không dương, không, khác không Ví dụ: câu lệnh ba địa if xy, x CJ= CJ z nhảy đến z mã điều kiện 0 z nhảy đến z mã điều kiện =0 z nhảy đến z mã điều kiện 0 Ví dụ Xét đoạn mã câu lệnh ba địa sau x := y+z if x[...]... mã toán tử, còn source và destination là các trường dữ liệu  Với một số chỉ thị lệnh như sau:    MOV source,destination ADD source,destination SUB source,destination Yêu cầu  Thiết kế một bộ sinh mã để sinh ra mã đích cho một dãy câu lệnh ba địa chỉ  Để đơn giản, chúng ta giả sử rằng:  Mỗi toán tử trong một câu lệnh sẽ có một toán tử tương ứng trong ngôn ngữ đích  Kết quả tính được có thể để... một vị trí ngăn xếp, một địa chỉ bộ nhớ hoặc một tập các vị trí này)  thông tin này có thể được cất trong bảng ký hiệu và được dùng để xác định phương pháp truy xuất cho một tên Thuật toán sinh mã  Thuật toán sinh mã nhận đầu vào là một dãy câu lệnh ba địa chỉ cấu tạo nên một khối cơ bản Với mỗi câu lệnh ba địa chỉ có dạng x := y op z chúng ta thực hiện các hành động sau:  kích hoạt một hàm getreg... chỉ của y để xác định y’, là một trong các vị trí của y Ưu tiên chọn thanh ghi cho y’ nếu giá trị của y ở cả trong bộ nhớ và thanh ghi Nếu giá trị của y không có trong L, sinh chỉ thị lệnh MOV y’,L để đặt một bản sao của y vào L  sinh chỉ thị lệnh OP z’, L với z’ là vị trí hiện tại của z Một lần nữa chúng ta ưu tiên chọn một thanh ghi hơn là bộ nhớ nếu z có ở cả hai nơi Cập nhật bản diễn tả thông tin... trị của nhiều biến, chúng ta cần sinh một chỉ thị MOV cho mỗi biến cần được lưu  Nếu x không được dùng trong khối, hoặc không có thanh ghi nào thích hợp, chọn vị trí bộ nhớ của x làm L Ví dụ Ví dụ: câu lệnh “d := (a-b)+(a-c)+(a-c)” có thể được dịch thành dãy mã ba địa chỉ như sau: t1 := a – b t2 := a – c t3 := t1 + t2 d := t3 + t2 Ví dụ (tiếp) câu lệnh t1 := a – b mã sinh ra MOV a,R0 SUB b,R0 thông... mỗi thanh ghi hiện đang chứa giá trị nào  được tham vấn mỗi khi cần đến một thanh ghi mới  ban đầu bản diễn tả thông tin thanh ghi cho biết mọi thanh ghi đều rỗng (chưa chứa thông tin) Khi tiến hành sinh mã, mỗi thanh ghi sẽ giữ giá trị của không hoặc nhiều tên tại một thời điểm đã cho  Bản diễn tả địa chỉ (address descriptor)  theo dõi vị trị (hoặc các vị trí) có thể tìm được giá trị hiện tại của... hiện chỉ thị Vào ra rdint wrint đọc một giá trị số nguyên từ bàn phím và lưu nó vào ngăn xếp loại giá trị nằm trên đỉnh ngăn xếp và ghi nó ra màn hình các chỉ thị khác half dừng việc thực hiện Một bộ sinh mã đơn giản  Giả sử máy đích của chúng ta có các đặc điểm sau:  đánh địa chỉ theo byte với bốn byte cho một từ nhớ  có n thanh ghi R0, R1, , Rn-1  các chỉ thị hai địa chỉ có dạng op source,... R0 t2 := a – c MOV a,R1 SUB c,R1 R0 chứa t1 R1 chứa t2 t1 trong R0 t2 trong R1 t3 := t1 + t2 ADD R1,R0 R0 chứa t3 R1 chứa t2 t3 trong R0 t2 trong R1 d := t3 + t2 ADD R1,R0 MOV R0,d R0 chứa d d trong R0 Sinh mã cho các câu lệnh điều kiện  Các máy cài đặt các lệnh nhảy có điều kiện bằng một trong hai cách:  Cách 1: rẽ nhánh nếu giá trị của một thanh ghi đã chỉ định thoả một trong sáu điều kiện: âm, không

Ngày đăng: 22/12/2016, 12:40

w