Cấp phỏt theo cơ chế Stack

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

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

2.Cấp phỏt theo cơ chế Stack

Cấp phỏt tĩnh sẽ trở thành cấp phỏt Stack nếu ta sử dụng địa chỉ tương đối để lưu giữ cỏc mẩu tin hoạt động. Vị trớ mẩu tin hoạt động chỉ được xỏc định trong thời gian thực thi. Trong cấp phỏt Stack, vị trớ nầy thường được lưu vào thanh ghi. Vỡ thế cỏc ụ nhớ của mẩu tin hoạt động được truy xuất như là độ dời (offset) so với giỏ trị trong thanh ghi đú.

Thanh ghi SP chứa địa chỉ bắt đầu của mẩu tin hoạt động của chương trỡnh con nằm trờn đỉnh Stack. Khi lời gọi của chương trỡnh con xuất hiện, chương trỡnh bị gọi được cấp phỏt, SP được tăng lờn một giỏ trị bằng kớch thước mẩu tin hoạt động của chương trỡnh gọi và chuyển quyền điều khiển cho chương trỡnh con được gọi. Khi quyền điều khiển trả về cho chương trỡnh gọi, SP giảm đi một khoảng bằng kớch thước mẩu tin hoạt động của chương trỡnh gọi. Vỡ thế, mẩu tin của chương trỡnh con được gọi đó được giải phúng.

Mó cho chương trỡnh con đầu tiờn cú dạng:

MOV # Stackstart, SP /* khởi động Stack */ éoạn mó cho chương trỡnh con

HALT /* kết thỳc sự thực thi */

Trong đú chỉ thị đầu tiờn MOV #Stackstart, SP khởi động Stack theo cỏch đặt SP bằng với địa chỉ bắt đầu của Stack trong vựng nhớ.

Chuỗi gọi sẽ tăng giỏ trị của SP, lưu giữ địa chỉ trả về và chuyển quyền điều khiển về chương trỡnh được gọi.

ADD # caller.recordsize, SP

MOV # here + 16, *SP /* lưu địa chỉ trả về */ GOTO callee.code_area

Thuộc tớnh caller.recordsize biểu diễn kớch thước của mẩu tin hoạt động. Vỡ thế, chỉ thị ADD đưa SP trỏ tới phần bắt đầu của mẩu tin hoạt động kế tiếp. #here +16 trong chỉ thị MOV là địa chỉ của chỉ thị theo sau GOTO, nú được lưu tại địa chỉ được trỏ bởi SP.

Chuỗi trả về gồm hai chỉ thị:

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