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

Bai giang 9 sinh ma

27 138 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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 536 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương trình đích tiếp Mã thông dịch:  Chuỗi hoạt động của nó được biểu diễn không phải bằng các chỉ thị lệnh máy hoạt động trực tiếp mà bằng các câu lệnh thông dịch trừu tượng ở một

Trang 1

Nguyễn Phương Thái

Bộ môn Khoa học Máy tính http://www.coltech.vnu.vn/~thainp/

Trang 2

Nội dung

Chương trình đích

Máy tính ảo

Sinh mã

Trang 3

Chương trình đích

Ngôn ngữ máy tuyệt đối:

 Có thể được đặt trong một vị trí cố định của bộ nhớ và thực thi ngay được

 Ưu điểm: Chương trình nhỏ và chạy nhanh.

Ngôn ngữ máy định vị:

 Cho phép biên dịch riêng rẽ các chương trình con, sau

đó được liên kết lại với nhau và được tải vào để thực thi nhờ một công cụ tải và liên kết (linking loader)

 Ưu điểm: Các môđun chương trình độc lập và có dịch độc lập, sau đó kết hợp với nhau thành một chương

trình đối tượng hoàn chỉnh nhờ việc liên kết và nạp

Trang 4

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

Mã thông dịch:

 Chuỗi hoạt động của nó được biểu diễn không phải bằng các chỉ thị lệnh máy hoạt động trực tiếp mà bằng các câu lệnh thông dịch trừu tượng ở một dạng mã hoá nào đó

 Chương trình biên dịch trong trường hợp này sẽ chuyển

chương trình nguồn thành một chương trình với các lệnh ảo này

 Chương trình đích này sau đó sẽ được hoạt động nhờ vào một chương trình thông dịch

 Ưu điểm: Dễ viết chương trình dịch, có thể chạy trên nhiều nền tảng phần cứng và hệ điều hành

 Nhược điểm: Chậm hơn mã máy tuyệt đối nhiều lần

Trang 6

Máy tính ảo

Tên gọi: VIM

Chỉ có hai thanh ghi cùng với bộ nhớ và ngăn xếp

Bộ nhớ chương trình và bộ nhớ dữ liệu nằm tách rời nhau

Mọi chỉ thị chiếm một ô trong bộ nhớ chương trình chương trình (địa chỉ các ô lệnh này là các số tự nhiên)

Một thanh ghi là con trỏ chỉ thị ic có chứa địa chỉ của lệnh sẽ

được thực hiện Đỉnh ngăn xếp được chỉ bằng thanh ghi thứ hai sp.

Trang 7

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

Cấu trúc máy tính VIM bao gồm hai thanh ghi ic, sp và bộ nhớ chia thành ba vùng ngăn xếp (stack), bộ nhớ dữ liệu (data), bộ nhớ chương trình (prog)

stack data prog sp

ic

Trang 8

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

Các chỉ thị bao gồm một toán tử và nhiều nhất một tham số (có thể là một số hoặc một địa chỉ trong bộ nhớ chương trình hoặc

dữ liệu)

Các toán tử số học và quan hệ không có tham số Chúng thực hiện trên một hoặc hai giá trị (toán hạng) đang nằm trên đỉnh ngăn xếp số học (gọi tắt là ngăn xếp) Các toán hạng này sẽ được thay thế bằng kết quả thu được nhờ áp dụng phép toán cho các toán hạng đó.

Trang 9

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

Các chỉ thị nạp (load) và lưu (store), nhẩy (jump) đều có một tham số

Lệnh nạp: sao chép dữ liệu của một biến nằm trong bộ nhớ dữ liệu vào đỉnh của ngăn xếp

Lệnh lưu: loại bỏ giá trị trên đỉnh của ngăn xếp và đưa nó vào bộ nhớ dữ liệu

Các chỉ thị vào ra: không có tham số, lệnh vào đọc một giá trị từ bàn phím và lưu nó vào trong ngăn xếp, lệnh ra loại bỏ giá trị đang ở đỉnh ngăn xếp và ghi nó ra màn hình

Trang 10

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

câu lệnh trong ngôn ngữ nguồn SLANG “a := b + c” , với a, b là biến

Trang 11

Giả sử giá trị b và c ban đầu là 37 và 2 thì quá trình thực hiện trên ngăn xếp như sau:

Trang 12

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

Các chỉ thị lệnh của máy đích chia thành các loại:

 load and store

 các chỉ thị số học và logic

 các chỉ thị so sánh

 chỉ thị không có điều kiện

 các chỉ thị nhảy có điều kiện

 các chỉ thị vào ra

Trang 13

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

chỉ thị Nạp và Lưu

ldcon intval nạp giá trị số nguyên intval vào ngăn xếp

ldvar address sao chép giá trị số nguyên từ địa chỉ bộ nhớ address vào

ngăn xếp

stvar address loại bỏ giá trị số nguyên ở đỉnh ngăn xếp và ghi nó vào

địa chỉ bộ nhớ address

chỉ thị Phép toán số học hai ngôi

add cộng hai số nguyên

sub trừ hai số nguyên

mul nhân hai số nguyên

Trang 14

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

dvi lấy thương của hai số nguyên

mdl lấy phần dư của hai số nguyên

chỉ thị Phép toán số học một ngôi 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 của intval vào ngăn xếp

Trang 15

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

chỉ thị Nhảy

jump address nhảy tới địa chỉ address mà không cần điều kiện

jift address loại bỏ giá trị chân lý (gọi là truthval) ra khỏi ngăn xếp; nếu giá trị dó

là true thì nhảy tới địa chỉ address, còn nếu trái lại thì chỉ thị tiếp theo

sẽ được thực hiện

jiff address loại bỏ giá trị chân lý (gọi là truthval) ra khỏi ngăn xếp; nếu giá trị dó

là false thì nhảy tới địa chỉ address, còn nếu trái lại thì chỉ thị tiếp theo

sẽ được thực hiện

chỉ thị Vào ra rdint đọc một giá trị số nguyên từ bàn phím và lưu nó vào ngăn xếp

wrint 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

Trang 16

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ớ

Trang 17

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ể để lại trong thanh ghi càng lâu càng tốt

Trang 20

Bản diễn tả thông tin thanh ghi

và địa chỉ Bản diễn tả thông tin thanh ghi (register descriptor)

 theo dõi xem 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 tên (vị trí có thể là một thanh ghi, 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

Trang 21

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 để xác định vị trí L, nơi sẽ cất kết quả tính toán y op

z với L thường là một thanh ghi, nhưng cũng có thể là một vị trí bộ nhớ.

tham vấn bản diễn tả thông tin địa 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 địa chỉ của x để chỉ ra rằng x nằm ở L Nếu L là thanh ghi, cập nhật bản diễn tả thông tin thanh ghi để chỉ ra rằng nó chứa giá trị của x, và xoá

x ra khỏi tất cả các bản tả thông tin thanh ghi.

nếu giá trị hiện tại của y hoặc z không có lần dùng kế tiếp, không còn sống sau

khi thoát khỏi khối và nằm trong thanh ghi, sửa lại bản diễn tả thông tin thanh

ghi để chỉ ra rằng sau khi thực thi x := y op z, những thanh ghi này không còn chứa y và z.

Trang 22

Hàm getreg

Hàm getreg trả về vị trí L để giữ giá trị của x cho câu lệnh gán

x := y op z

khi thực hiện phép toán x := y op z thì vị trí L chính là thanh ghi chứa giá trị của y

lệnh, chúng ta tìm một thanh ghi R đang bị chiếm Cất giá trị của R vào một vị trí bộ nhớ bằng chỉ thị MOV R,M Cập nhật bản diễn tả thông tin địa chỉ cho M và gán vị trí L chính là R Chú ý trong

trường hợp R giữ giá 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.

thích hợp, chọn vị trí bộ nhớ của x làm L

Trang 23

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

Trang 24

R1 chứa t2

t3 trong R0t2 trong R1

d := t3 + t2 ADD R1,R0

MOV R0,d

R0 chứa d d trong R0

Trang 25

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 âm, dương, không

dương, bằng không, khác không Ví dụ: câu lệnh ba địa chỉ if

x<y goto z có thể được cài đặt bằng cách trừ y cho x trong

thanh ghi R rồi nhảy đến z nếu giá trị trong thanh ghi R âm.

 Cách 2 (khá thông dụng): dùng một tập các mã điều kiện để

chỉ ra xem đại lượng cuối cùng được tính hoặc được tải

vào một thanh ghi là âm, bằng không hoặc dương Ví dụ:

dùng chỉ thị lệnh CMP x, y đặt mã điều kiện là dương, âm

hoặc bằng không tương ứng với x>y, x<y hoặc x=y

Trang 26

CJ= z nhảy đến z nếu mã điều kiện là =0

CJ<> z nhảy đến z nếu mã điều kiện là <>0

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

w