Éịa chỉ của cỏc tờn trong thời gian thực hiện

Một phần của tài liệu GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH (Trang 133 - 136)

- Quỏ trỡnh tớnh ∆i j VD: tớnh ∆ 2 4, Tớnh:

3.éịa chỉ của cỏc tờn trong thời gian thực hiện

Chiến lược cấp phỏt lưu trữ và xếp đặt dữ liệu cục bộ trong mẩu tin hoạt động của chương trỡnh con xỏc định cỏch thức truy xuất vựng nhớ của tờn.

Nếu chỳng ta dựng cơ chế cấp phỏt tĩnh với vựng dữ liệu được cấp phỏt tại địa chỉ static. Với lệnh gỏn x := 0, địa chỉ tương đối của x trong bảng danh biểu là 12. Vậy địa chỉ của x trong bộ nhớ là static + 12. Lệnh gỏn x:=0 được chuyển sang mó ba địa chỉ static[12] := 0. Nếu vựng dữ liệu bắt đầu tại địa chỉ 100, mó đớch cho chỉ thị là:

MOV #0,112

Nếu ngụn ngữ dựng cơ chế display để truy xuất tờn khụng cục bộ, giả sử x là tờn cục bộ của chương trỡnh con hiện hành và thanh ghi R3 lưu giữ địa chỉ bắt đầu của mẩu tin hoạt động đú thỡ chỳng ta sẽ dịch lệnh x := 0 sang chuỗi mó ba địa chỉ:

t1 := 12 + R3

Từ đú ta chuyển sang mó đớch:

MOV #0, 12(R3)

Chỳ ý rằng, giỏ trị thanh ghi R3 khụng được xỏc định trong thời gian biờn dịch

3.4. Chọn chỉ thị lệnh.

Tập cỏc chỉ thị của mỏy đớch sẽ xỏc định tớnh phức tạp của việc lựa chọn chỉ thị. Tớnh chuẩn và hoàn chỉnh của tập chỉ thị là những yếu tố quan trọng. Nếu mỏy đớch khụng cung cấp một mẫu chung cho mỗi kiểu dữ liệu thỡ mỗi trường hợp ngoại lệ phải xử lý riờng. Tốc độ chỉ thị và sự biểu diễn của mỏy cũng là những yếu tố quan trọng. Nếu ta khụng quan tõm đến tớnh hiệu quả của chương trỡnh đớch thỡ việc lựa chọn chỉ thị sẽ đơn giản hơn. Với mỗi lệnh ba địa chỉ ta cú thể phỏc họa một bộ khung cho mó đớch. Giả sử lệnh ba địa chỉ dạng x := y + z, với x, y, z được cấp phỏt tĩnh, cú thể được dịch sang chuỗi mó đớch:

MOV y, R0 /* Lưu y vào thanh ghi Ro */

ADD z, R0 /* cộng z vào nội dung Ro, kết quả chứa trong Ro */ MOV R0, x /* lưu nội dung Ro vào x */

Tuy nhiờn việc sinh mó cho chuỗi cỏc lệnh ba địa chỉ sẽ dẫn đến sự dư thừa mó. Chẳng hạn với: a:= b + c d:= a + e ta chuyển sang mó đớch: MOV b, Ro ADD c, Ro MOV Ro, a MOV a, R0 ADD e,Ro MOV Ro, d

và ta nhận thấy rằng chỉ thị thứ tư là thừa.

Chất lượng mó được tạo ra, được xỏc định bằng tốc độ và kớch thước của mó. Một mỏy đớch cú tập chỉ thị phong phỳ cú thể sẽ cung cấp nhiều cỏch để hiện thực một tỏc vụ cho trước. éiều này cú thể dẫn đến tốc độ thực hiện chỉ thị rất khỏc nhau. Chẳng hạn, nếu mỏy đớch cú chỉ thị INC thỡ cõu lệnh ba địa chỉ a := a + 1 cú thể được cài đặt chỉ bằng cõu lệnh INC a. Cỏch nầy hiệu quả hơn là dựng chuỗi cỏc chỉ thị sau:

MOV a, Ro ADD # 1, Ro MOV Ro ,a

Như ta đó núi, tốc độ của chỉ thị là một trong những yếu tố quan trọng để thiết kế chuỗi mó tốt. Nhưng, thụng tin thời gian thường khú xỏc định.

Việc quyết định chuỗi mó mỏy nào là tốt nhất cho cõu lệnh ba điạ chỉ cũn phụ thuộc vào ngữ cảnh của nơi chưỏ cõu lệnh đú.

3.5. Sử dụng thanh ghi.

Cỏc chỉ thị dựng toỏn hạng thanh ghi thường ngắn hơn và nhanh hơn cỏc chỉ thị dựng toỏn hạng trong bộ nhớ. Vỡ thế, hiệu quả của thanh ghi đặc biệt quan trọng trong việc sinh mó tốt. Ta thường dựng thanh ghi trong hai trường hợp:

1. Trong khi cấp phỏt thanh ghi, ta lựa chọn tập cỏc biến lưu trỳ trong cỏc thanh ghi tại một thời điểm trong chương trỡnh. một thời điểm trong chương trỡnh.

2. Trong khi gỏn thanh ghi, ta lấy ra thanh ghi đặc biệt mà biến sẽ thường trỳ trong đú.

Việc tỡm kiếm một lệnh gỏn tối ưu của thanh ghi, ngay với cả cỏc giỏ trị thanh ghi đơn, cho cỏc biến là một cụng việc khú khăn. Vấn đề càng trở nờn phức tạp hơn vỡ phần cứng và / hoặc hệ điều hành của mỏy đớch yờu cầu qui ước sử dụng thanh ghi.

3.6. Thứ tự làm việc.

Thứ tự thực hiện tớnh toỏn cú thể ảnh hưởng đến tớnh hiệu quả của mó đớch . Một số thứ tự tớnh toỏn cú thể cần ớt thanh ghi để lưu giữ cỏc kết quả trung gian hơn cỏc thứ tự tớnh toỏn khỏc. Việc lựa chọn được thứ tự tốt nhất là một vấn đề khú. Ta nờn trỏnh vấn đề này bằng cỏch sinh mó cho cỏc lệnh ba địa chỉ theo thứ tự mà chỳng đó được sinh ra bởi bộ mó trung gian.

Sinh mó

Tiờu chuẩn quan trọng nhất của bộ sinh mó là phải tạo ra mó đỳng. Tớnh đỳng của mó cú một ý nghĩa rất quan trọng. Với những quy định về tớnh đỳng của mó, việc thiết kế bộ sinh mó sao cho nú được thực hiện, kiểm tra, bảo trỡ đơn giản là mục tiờu thiết kế quan trọng .

4. MÁY ĐÍCH.

Trong chương trỡnh này, chỳng ta sẽ dựng mỏy đớch như là mỏy thanh ghi (register machine). Mỏy này tượng trưng cho mỏy tớnh loại trung bỡnh. Tuy nhiờn, cỏc kỹ thuật sinh mó được trỡnh bầy trong chương này cú thể dựng cho nhiều loại mỏy tớnh khỏc nhau.

Mỏy đớch của chỳng ta là mỏy tớnh địa chỉ byte với mỗi từ gồm bốn byte và cú n thanh ghi : R0, R1 ... Rn-1 . Mỏy đớch gồm cỏc chỉ thị hai địa chỉ cú dạng chung:

Trong đú op là mó tỏc vụ. Source (nguồn) và destination (đớch) là cỏc trường dữ liệu. Vớ dụ một số mó tỏc vụ: (adsbygoogle = window.adsbygoogle || []).push({});

MOV chuyển source đến destination ADD cộng source và destination SUB trừ source cho destination

Source và destination của một chỉ thị được xỏc định bằng cỏch kết hợp cỏc thanh ghi và cỏc vị trớ nhớ với cỏc mode địa chỉ. Mụ tả content (a) biểu diễn cho nội dung của thanh ghi hoặc điạ chỉ của bộ nhớ được biểu diễn bởi a.

mode địa chỉ cựng với dạng hợp ngữ và giỏ kết hợp:

Mode Dạng éịa chỉ Giỏ

Absolute Register Indexed Indirect register Indirect indexed M R c(R) *R *c(R) M R c + contents ( R) contents ( R) contents (c+ contents ( R)) 1 0 1 0 1

Vị trớ nhớ M hoặc thanh ghi R biểu diễn chớnh nú khi đưọc sử dụng như một nguồn hay đớch. éộ dời địa chỉ c từ giỏ trị trong thanh ghi R được viết là c( R).

Chẳng hạn:

Một phần của tài liệu GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH (Trang 133 - 136)