CHƯƠNG 6 : NGÔN NGỮ ASSEMBLY
4. Ngăn xếp và thủ tục
4.1 Ngăn xếp (stack)
a. Định nghĩa ngăn xếp:
Ngăn xếp là một tổ chức bộ nhớ sao cho ta chỉ có thể đọc một từ ở đỉnh ngăn xếp hoặc viết một từ vào đỉnh ngăn xếp. Địa chỉ của đỉnh ngăn xếp được chứa trong một thanh ghi đặc biệt gọi là con trỏ ngăn xếp SP (Stack Pointer).
Ứng với cấu trúc ngăn xếp, người ta có lệnh viết vào ngăn xếp PUSH và lệnh lấy ra khỏi ngăn xếp POP. Các lệnh này vận hành như sau:
- Cho lệnh PUSH SP := SP +1
M (SP) := Ri (Ri là thanh ghi cần viết vào ngăn xếp) - Cho lệnh POP
Ri := M(SP) (Ri là thanh ghi, nhận từ lấy ra khỏi ngăn xếp) SP := SP -1
Trong các bộ xử lý RISC, việc viết vào hoặc lấp ra khỏi ngăn xếp dùng các lệnh bình thường. Ví dụ thanh ghi R30 là con trỏ ngăn xếp thì việc viết vào ngăn xếp được thực hiện bằng các lệnh:
ADDI R30, R30, 4 ; tăng con trỏ ngăn xếp lên 4 vì từ dài 32 bit STORE Ri, (R30) ; Viết Ri vào đỉnh ngăn xếp
Việc lấy ra khỏi ngăn xếp được thực hiện bằng các lệnh : LOAD Ri, (R30) ; lấy số liệu ở đỉnh ngăn xếp và nạp vào Ri SUBI R30, R30,4 ; giảm con trỏ ngăn xếp bớt 4
b. Đặc tả ngăn xếp
- Che dấu thông tin:khi sử dụng lớp stack chúng ta không cần biết nó được lưu trữ trong bộ nhớ như thế nào và các phương thức của nó được thực hiện ra sao.Đây là vấn đề cho dấu thông tin.
- Tính khả thi và hiệu quả của ứng dụng:Tuy ứng dụng cần phải độc lập với hiện thực của cấu trúc dữ liệu nhưng việc chọn cách hiện thực nào ảnh hưởng đến tính khả thi và hiệu
CF MSB MSB LSB 0 CF 15 LSB
97
quả của ứng dụng.Chúng ta cần hiểu các ưu nhược điểm của mỗi cách hiện thực của cấu trúc dữ liệu để lựa chọn cho phù hợp với tính chất của ứng dụng.
- Tính trong sáng của chương trình:ưu điểm khác của che giấu thông tin là tính trong sáng của chương trình.Những tên gọi quen thuộc dành cho các thao tác trên cấu trúc dữ liệu giúp chúng ta hình dung rõ ràng giải thuật của chương trình.Chẳng hạn thao tác trên ngăn xếp,người ta thường quen dùng các từ:đầy-push;lấy-pop;
- Thiết kế từ trên xuống:sự tách rời giữa việc sử dụng cấu trúc dữ liệu và cách hiện thực của nó còn giúp chúng ta thực hiên tốt hơn quá trình thiết kế từ trên xuống cả cho cấu trúc dữ liệu và cả cho chương trình ứng dụng.