Bài giảng Lập trình hợp ngữ - Chương 10: Stack & chương trình con

Chương 9  
STACK &  
CHƯƠNG TRÌNH CON  
Giới thiệu STACK  
Một số ứng dụng của STACK  
Cấu trúc của 1 CTC  
Cơ chế làm việc của 1 CTC  
Vấn đề truyền tham số  
Chương trình gồm nhiều MODULE  
Chương 10: CHƯƠNG TRÌNH CON  
1
GiỚI THIỆU STACK  
STACK : là một cấu trúc dữ liệu một chiều. Các phần tử  
cất vào và lấy ra theo phương thức LIFO (Last In First  
Out). Mỗi chương trình phải dành ra một khối bộ nhớ  
để làm stack bằng khai báo STACK. Ví dụ : .STACK  
100H ; Xin cấp phát 256 bytes làm stack  
⚫ Là 1 phần của bộ nhớ, được tổ chức lưu trữ dữ  
liệu theo cơ chế vào sau ra trước (LIFO).  
Chương 10: CHƯƠNG TRÌNH CON  
2
LẬP TRÌNH VỚI STACK  
⚫ Trong lập trình có khi cần truy xuất đến các  
phần tử trong STACK nhưng không được thay  
đổi trật tự của STACK. Để thực hiện điều này ta  
dùng thêm thanh ghi con trỏ BP :  
trỏ BP về đỉnh Stack : MOV BP,SP  
thay đổi giá trị của BP để truy xuất đến các phần  
tử trong Stack : [BP+2]  
Chương 10: CHƯƠNG TRÌNH CON  
3
⚫ Phần tử được đưa vào STACK lần đầu tiên gọi là  
đáy STACK, phần tử cuối cùng được đưa vào  
STACK được gọi là đỉnh STACK.  
⚫ Khi thêm một phần tử vào STACK ta thêm từ  
đỉnh, khi lấy một phần tử ra khỏi STACK ta cũng  
lấy ra từ đỉnh ➔ địa chỉ của ô nhớ đỉnh STCAK  
luôn luôn bị thay đổi.  
SS dùng để lưu địa chỉ segemnt của đoạn bộ nhớ dùng làm STACK  
SP để lưu địa chỉ của ô nhớ đỉnh STACK (trỏ tới đỉnh STACK)  
Chương 10: CHƯƠNG TRÌNH CON  
4
THÍ DỤ  
STACK  
D
C
B
A
A,B,C là cá c Word  
SP  
MOV BP,SP  
;AX = D  
;AX = C  
;AX = A  
MOV AX,[BP]  
MOV AX,[BP+2]  
MOV AX,[BP+6]  
Chương 10: CHƯƠNG TRÌNH CON  
5
Để lưu 1 phần tử vào Stack ta dùng lệnh PUSH  
Để lấy 1 phần tử ra từ Stack ta dùng lệnh POP  
PUSH nguồn : đưa nguồn vào đỉnh STACK  
PUSHF  
: cất nội dung thanh ghi cờ vào STACK  
• nguồn là một thanh ghi 16 bit hay một từ nhớ  
Chương 10: CHƯƠNG TRÌNH CON  
6
POP và POPF : dùng để lấy một phần tử ra khỏi STACK.  
Cú pháp : POP đích : đưa nguồn vào đỉnh STACK  
POPF  
: cất nội dung ở đỉnh STACK  
vào thanh ghi cờ  
Chú ý : - Ở đây đích là một thanh ghi 16 bit (trừ thanh ghi  
IP) hay một từ nhớ  
Các lệnh PUSH, PUSHF, POP và POPF không ảnh hưởng  
tới các cờ  
Chương 10: CHƯƠNG TRÌNH CON  
7
MỘT SỐ ỨNG DỤNG CỦA STACK  
⚫ Khắc phục các hạn chế của lệnh MOV  
Ex : MOV CS,DS ; sai  
PUSH DS  
POP CS ; đúng  
•Truyền tham số cho các chương trình con  
• Lưu tạm thời giá trị thanh ghi hay biến.  
Chương 10: CHƯƠNG TRÌNH CON  
8
THÍ DỤ 2  
⚫ Nhập vào 1 chuổi, in chuổi đảo ngược  
Ex : nhập : Cong nghe thong tin  
xuất : int gnoht ehgn gnoC  
Chương 10: CHƯƠNG TRÌNH CON  
9
Ví dụ minh họa : dùng STACK trong thuật toán đảo  
ngược thứ tự như sau :  
⚫
⚫
⚫
⚫
⚫
⚫
⚫
⚫
⚫
⚫
⚫
⚫
⚫
; Nhập chuỗi kí tự  
Khởi động bộ đếm  
Đọc một kí tự  
WHILE kí tự <> 13 DO  
Cất kí tự vào STACK  
Tăng biến đếm  
Đọc một kí tự  
END_WHILE  
; Hiển thị đảo ngược  
FOR biến đếm lần DO  
Lấy một kí tự từ STACK  
Hiển thị nó  
END_FOR  
Chương 10: CHƯƠNG TRÌNH CON  
10  
GiỚI THIỆU CHƯƠNG TRÌNH CON  
⚫ CTC là 1 nhóm các lệnh được gộp lại dưới 1  
cái tên mà ta có thể gọi từ nhiều nơi khác  
nhau trong chương trình thay vì phải viết lại  
các nhóm lệnh này tại nơi cần đến chúng.  
Lợi ích  
CTC làm cho cấu trúc logic của của CT dễ  
kiểm soát hơn, dễ tìm sai sót hơn và có thể  
tái sử dụng mã ➔ tiết kiệm được công sức  
và thời gian lập trình.  
Chương 10: CHƯƠNG TRÌNH CON  
11  
CẤU TRÚC CỦA CTCON  
TÊNCTC PROC [NEAR|FAR]  
CÁC LỆNH CỦA CTC  
RET  
TÊNCTC ENDP  
Chương 10: CHƯƠNG TRÌNH CON  
12  
MINH HỌA  
⚫ Viết chương trình nhập 1 số n (n nguyên  
dương và <9). Tính giai thừa của n và xuất ra  
màn hình dưới dạng số hex (giới hạn kết quả  
16 bit).  
⚫ Viết chương trình tìm số hoàn thiện (giới hạn  
2 chữ số) và in nó ra màn hình.  
Chương 10: CHƯƠNG TRÌNH CON  
13  
THÍ DỤ  
.DATA  
EXTRN MemVar : WORD, Array1 : BYTE , ArrLength :ABS  
…
.CODE  
EXTRN NearProc : NEAR , FarProc : FAR  
….  
MOV AX,MemVar  
MOV BX, OFFSET Array1  
MOV CX, ArrLength  
…
CALL NearProc  
….  
CALL FarProc  
…..  
Chương 10: CHƯƠNG TRÌNH CON  
14  
CƠ CHẾ LÀM VIỆC CỦA CTC  
⚫ Cơ chế gọi và thực hiện CTC trong ASM  
cũng giống như ngôn ngữ cấp cao.  
➔ Khi gặp lệnh gọi CTC thì :  
. Địa chỉ của lệnh ngay sau lệnh gọi CTC sẽ được đưa vào  
STACK.  
. Địa chỉ của CTC được gọi sẽ được nạp vào thanh ghi IP.  
. Quyền điều khiển của CT sẽ được chuyển giao cho CTC.  
. CTC sẽ thực hiện các lệnh của nó và khi gặp RET, nó sẽ lấy  
địa chỉ cất trên STACK ra và nạp lại thanh ghi IP để thực thi  
lệnh kế tiếp.  
Chương 10: CHƯƠNG TRÌNH CON  
15  
PUBLIC EXTRN GLOBAL  
Để thuận lợi trong việc dịch, liên kết chương trình đa  
file, Assembler cung cấp các điều khiển Public, Extrn  
và Global.  
PUBLIC  
Chỉ cho Assembler biết nhãn (label) nào nằm trong  
module này được phép sử dụng ở các module  
khá c.  
Cú phá p : PUBLIC tên nhã n  
khai bá o nhã n  
TÊN CTC  
TÊN BiẾN  
TÊN ĐI TRƯỚC NHÃN  
Chương 10: CHƯƠNG TRÌNH CON  
16  
EXTRN  
Báo cho Assembler biết những nhãn đã  
được khai báo PUBLIC ở các module  
khác được sử dụng trong module này mà  
không cần phải khai báo lại.  
Cú pháp : EXTRN Tên nhãn : Kiểu  
BYTE  
DATAPTR  
NEAR  
WORD  
DWORD  
FAR  
PROC  
Chương 10: CHƯƠNG TRÌNH CON  
17  
GLOBAL  
THAY THẾ PUBLIC VÀ EXTRN.  
Viết chương trình nằm trên 2 file (2 module) với sự phân công như  
sau :  
Module của chương trình chính (Main.ASM) có nhiệm vụ xác định  
Offset của 2 chuổi ký tự và gọi CTC nối 2 chuổi này và cho hiện kết  
quả ra màn hình.  
Module CTC (Sub.ASM) làm nhiệm vụ nối 2 chuổi và đưa vào bộ  
nhớ.  
Chương 10: CHƯƠNG TRÌNH CON  
18  
Ví dụ minh hoạ về STACK, CALL/RET : chương  
trình in một số nguyên (16 bit) ra màn hình  
PrintNum10 PROC  
; số nguyên N nằm trong AX  
PUSH BX CX DX  
MOV CX, 0  
; so lan push (so ky tu)  
; cho DX = 0 trước khi chia  
; số dư trong DX, phần nguyên  
; lưu phần dư vào stack  
; đã hết chưa?  
laysodu:  
XOR DX, DX  
MOV BX, 10  
DIV BX  
trong AX  
PUSH DX  
INC CX  
CMP AX, 0  
JNZ laysodu  
; chưa hết, lấy số dư tiếp  
MOV AH, 2  
INSO:  
POP DX  
ADD DL, '0'  
INT 21H  
LOOP inso  
POP DX  
RET  
CX BX  
ENDP  
PrintNum10  
19  
CHƯƠNG TRÌNH ĐA FILE  
⚫ Cho phép nhiều user cùng tham gia giải  
quyết 1 chương trình lớn.  
⚫ Sửa module nào thì chỉ cần dịch lại module  
đó.  
⚫ Mỗi module chỉ giải quyết 1 vấn đề ➔ dễ tìm  
sai só t.  
Chương 10: CHƯƠNG TRÌNH CON  
20  
Tải về để xem bản đầy đủ
ppt 32 trang baolam 18500 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hợp ngữ - Chương 10: Stack & chương trình con", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pptbai_giang_lap_trinh_hop_ngu_chuong_10_stack_chuong_trinh_con.ppt