Bài giảng hợp ngữ - Chương 6
lượt xem 21
download
Tài liệu tham khảo Bài giảng hợp ngữ gồm 9 chương - Chương 6 Ngăn xếp và thủ tục
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng hợp ngữ - Chương 6
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch CH NG VI: NG N X P VÀ TH T C 6.1 Các thành ph n c a ch ng trình Ng n x p là vùng nh c bi t c a ch ng trình. Có th s d ng vùng nh này lu tr d li u và gi i phóng nó khi không dùng n. Nh v y, vi c s d ng ng n x p m t cách h p lý s giúp ti t ki m b nh . Trong h p ng , kích th c ng n x p c a ch ng trình c khai báo sau t khoá .Stack: TITLE .MODEL .STACK .DATA .CODE M t ch ng trình bao g m ba ph n c b n: Mã l nh, D li u, Ng n x p. Khi ch ng trình c n p vào b nh thì ba ph n trên c n p vào các n nh khác nhau: + n nh ch a ph n mã l nh c g i là n mã (Code Segment), a ch c a nó c l u gi trong thanh ghi n CS. + n nh ch a ph n d li u c g i là n d li u (Data Segment), a ch c a nó c l u gi trong thanh ghi n DS. + n nh ch a ph n ng n x p c g i là n ng n x p (Stack Segment), a ch c a nó c l u gi trong thanh ghi n SS. N i dung c a ch ng này ch y u nghiên c u v n ng n x p. 6.2 Cách s d ng ng n x p 6.2.1 C t d li u vào ng n x p c t d li u vào ng n x p ta s d ng l nh Push, cách vi t l nh nh sau: PUSH : là m t t hanh ghi hay m t bi n có kích th c 16 bít (1 word). Sau l nh Push thì giá tr c a toán h ng Ngu n v n gi nguyên. Ví d 1: PUSH AX nh trên c t n i dung thanh ghi AX vào ng n x p. Ví d 2: PUSH A nh trên c t n i dung bi n A vào ng n x p (A ph i là bi n ki u Word). 6.2.2 L y d li u kh i ng n x p l y d li u kh i ng n x p ta s d ng l nh Pop, cách vi t l nh nh sau: POP < ích> ích>: là m t t hanh ghi hay m t bi n có kích th c 16 bít (1 word). 42
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch Vi c l y d li u kh i ng n x p s ng th i gi i phóng ô nh ang ch a d li u (t c là có th dùng nó ch a d li u khác). Ví d 1: POP AX nh trên l y d li u t ng n x p t vào thanh ghi AX. Ví d 2: POP A nh trên l y d li u t ng n x p t vào bi n A (A ph i là bi n ki u Word). 6.2.3 ng d ng c a ng n x p a) Ví d 1: Hãy chuy n n i dung c a thanh ghi n DS vào thanh ghi n ES. Gi i: Do không th chuy n tr c ti p n i dung c a hai thanh ghi n cho nhau (xem l i ph n nh MOV) nên ta s s d ng ng n x p làm trung gian: d li u c chuy n t DS vào ng n x p, sau ó l y t ng n x p chuy n vào ES: PUSH DS ;C t DS vào ng n x p POP ES ;L y d li u t ng n x p t vào ES b) Ví d 2: Vi t ch ng trình nh p m t kí t t bàn phím r i hi n nó u dòng ti p theo. Gi i: TITLE Vi du 2 .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 1 ;Ch c n ng s 1: Nh p m t kí t INT 21h PUSH AX ;C t kí t vào ng n x p MOV AH, 2 ; a con tr v u dòng ti p theo MOV DL, 0Dh INT 21h MOV DL, 0Ah INT 21h POP DX ;L y kí t t ng n x p t vào DL INT 21h ;Hi n th kí t MOV AH, 4Ch ;K t thúc INT 21h MAIN ENDP END MAIN 43
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch Gi i thích: Kí t nh p vào c c t thanh ghi AL. a con tr xu ng u dòng ti p theo thì ph i hi n th hai kí t có mã ASCII là 0Dh (CR: v u dòng) và 0Ah (LF: xu ng dòng). Quá trình hi n th hai kí t này s làm thanh ghi AL b thay i (xem l i ch c n ng s 2 a ng t 21h). Do ó c n ph i l u k í t ban u vào ng n x p t r c khi xu ng dòng, khi nào mu n hi n th kí t này thì l i l y nó ra t ng n x p. c) Ví d 3: Vi t l nh th c hi n các công vi c sau: + L u n i dung thanh ghi c vào AX. + Xoá thanh ghi c . Gi i: Ta không th tác ng t i thanh ghi c b ng các l nh thông th ng ã h c nh MOV, ADD, SUB, AND, OR…B vi x lý 8086 cung c p hai l nh sau t hao tác v i thanh ghi (c hai l nh u liên quan t i ng n x p): PUSHF ;C t n i dung thanh ghi c vào ng n x p POPF ;L y d li u t ng n x p t vào thanh ghi c d ng hai l nh này ta có th gi i quy t yêu c u t ra trên: PUSHF POP AX ;chuy n n i dung thanh ghi c t ng n x p vào AX XOR BX, BX ;xóa BX (BX = 0) PUSH BX ; t giá tr 0 vào ng n x p POPF ;Chuy n giá tr 0 t ng n x p vào thanh ghi c (xoá các c ) 6.2.4 Cách th c làm vi c c a ng n x p a) Kích th c ng n x p Kích th c c a ng n x p c khai báo u ch ng trình h p ng sau t khoá .Stack Ví d : .Stack 100h Khi ó ng n x p có kích th c b ng 100h byte (256 byte hay 128 word). M i l nh Push s chi m d ng 1 word c a ng n x p, nh v y ng n x p khai báo nh trên s cho phép c t t i a 128 l n. Ng i l p trình s ph i t ính toán khai báo ng n x p có kích th c h p lý nh t (không quá th a hay thi u). b) C u trúc c a ng n x p D li u c l y ra kh i ng n x p theo trình t ng c l i so v i khi c t vào, ngh a là t vào sau thì s c l y ra tr c (LIFO - Last In First Out). có th t ch c qu n lý li u nh v y, b vi x lý 8086 s d ng hai thanh ghi chuyên d ng cho các thao tác v i ng n x p là SS (Stack Segment) và SP (Stack Pointer). SS ch a a ch segment còn SP ch a a ch offset c a ô nh trong ng n x p. D li u c c t vào ng n x p t heo tr t t ng c l i so v i các n nh khác (t a ch cao xu ng a ch th p). Gi s khai báo ng n x p là .Stack 100h thì ng n x p s b t u t i a ch o ffset = 0100h và k t thúc t i o ffset = 0000h. D i ây là mô hình c a ng n x p khi ch a có d li u: 44
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch … 0000h t thúc stack … 00FAh 00FCh 00FEh ← SP = 0100h offset = 0100h … Khi ng n x p ch a có d li u thì SP tr t i ô nh có a ch cao nh t trong ng n x p. Sau m i l nh Push thì SP s g i m i 2 t r t i ô ti p theo c a ng n x p, d li u s c t vào ô nh do SP tr t i. Ví d : • t ba thanh ghi AX, BX, CX vào ng n x p: PUSH AX PUSH BX PUSH CX - Sau l nh PUSH AX: … 00FAh 00FCh ← SP = 00FEh 00FEh AX 0100h ng … Do gi m SP i 2 r i m i c t thanh ghi AX vào ng n x p nên s t o ra m t ô r ng a ch cao nh t. - Sau l nh PUSH BX: … 00FAh ← SP = 00FEh 00FCh BX 00FEh AX 0100h ng … - Sau l nh PUSH CX: … ← SP = 00FEh 00FAh CX 00FCh BX 00FEh AX 0100h ng 45
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch … • Mu n l y n i dung c a ba thanh ghi ra kh i ng n x p thì ph i t i n hành theo trình t ng c l i: POP CX POP BX POP AX - Sau l nh POP CX: … 00FAh - ← SP = 00FEh 00FCh BX 00FEh AX 0100h ng … D li u t i ô nh do SP tr t i (offset = 00FAh) s c n p vào thanh ghi CX, sau ó SP t ng lên 2 tr t i ô cao h n. Ô nh ch a CX ã c gi i p hóng nên ta không c n quan tâm t i n i dung bên trong nó n a. - Sau l nh POP BX: … 00FAh - 00FCh BX ← SP = 00FEh 00FEh AX 0100h ng … D li u t i ô nh có offset = 00FCh c n p vào thanh ghi BX. - Sau l nh POP AX: … 00FAh - 00FCh BX 00FEh AX ← SP = 00FEh 0100h ng … D li u t i ô nh có offset = 00FEh c n p vào thanh ghi AX. 6.3 Th t c 6.3.1 C u trúc th t c ch ng II ã t rình bày v c u trúc c a m t th t c và v t rí c a nó trong ch ng trình h p ng . Trong ph n này ta s c p t i c u trúc c a các th t c thông th ng (không c ch n làm ch ng trình chính): PROC ;B t u th t c L nh 1 L nh 2 46
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch L nh 3 ... RET ;Tr v ch ng trình chính ENDP ;K t thúc th t c M t th t c lo i này ph i c k t thúc b i l nh RET tr v ch ng trình chính. nh RET th ng n m cu i th t c, nh ng nó c ng có th n m m t v trí khác. Ví d : Vi t m t t h t c a con tr màn hình xu ng u dòng ti p t heo. Gi i: a con tr xu ng u dòng ti p t heo c n hi n t h các kí t CR (0Dh) và LF (0Ah). Ta t t ên th t c này là Writeln. Writeln PROC MOV AH, 2 ;Ch c n ng s 2 c a ng t 21h hi n kí t MOV DL, 0Dh INT 21h MOV DL, 0Ah INT 21h RET Writeln ENDP 6.3.2 S d ng th t c g i m t th t c t ch ng trình chính ta s d ng l nh Call, cú pháp l nh nh sau: CALL • u trúc c a m t ch ng trình h p ng có s d ng th t c nh sau: TITLE .MODEL .STACK .DATA .CODE PROC L nh 1 L nh 2 L nh 3 ... CALL ;G i th t c … ENDP PROC L nh 1 L nh 2 L nh 3 ... RET ;Tr v ch ng trình chính 47
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch ENDP ...Các th t c khác END • Ví d : Vi t ch ng trình nh p m t kí t t bàn phím r i hi n nó u dòng ti p theo (có s ng th t c). Gi i: TITLE Vi du .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH, 1 ;Nh p m t kí t INT 21h PUSH AX ;C t kí t vào ng n x p CALL Writeln ; a con tr v u dòng ti p theo POP DX ;L y kí t t ng n x p t vào DL MOV AH, 2 ;Hi n th kí t INT 21h MOV AH, 4Ch ;K t thúc INT 21h MAIN ENDP Writeln PROC ;Th tc a con tr v u dòng ti p theo MOV AH, 2 MOV DL, 0Dh INT 21h MOV DL, 0Ah INT 21h RET Writeln ENDP END MAIN 6.3.3 Quan h gi a th t c và ng n x p Khi l nh Call g i m t th t c thì các l nh c a th t c ó s t hi hành. V y làm cách nào quay tr v ch ng trình chính sau khi th t c thi hành xong? hi u c quá trình này ta c n nghiên c u thêm v trình t th c hi n l nh c a b vi lý 8086. n mã l nh có a ch segment n m t rong thanh ghi CS, còn offset c a các 48
- ng VI: Ng n x p và th t c Bài gi ng h p ng Ch nh s c t vào thanh ghi con tr l nh IP (Instruction Pointer). Nh v y c p thanh ghi CS:IP ch a a ch c a ô nh nào thì l nh t i ô nh ó s c thi hành. Khi s d ng l nh Call thì các công vi c sau ây c th c hi n: + C t a ch c a l nh ng sau l nh Call (trong ch ng trình chính) vào ng n x p. + N p a ch l nh u tiên c a th t c vào c p thanh ghi CS:IP (t c là thi hành l nh này). L n l t các l nh trong th t c s c thi hành cho t i khi g p l nh RET. L nh RET l y a ch l nh t ng n x p (do l nh Call c t tr c ó) r i n p vào các thanh ghi CS:IP. Nh v y quy n u khi n ã c tr v ch ng trình chính (xem s bên i). … … Call nh ti p theo Ch ng trình chính … nh u tiên … Th t c RET … 49
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng HTML5 - Bài 6: Làm việc với thành phần mở rộng của CSS3 (ĐH FPT)
20 p | 117 | 27
-
Tự học Indesign CS2 : Văn bản part 6
9 p | 144 | 13
-
Bài giảng - Bài 6: Ngôn ngữ tân từ
25 p | 128 | 11
-
Lập trình iSO (Module 2) - TTTH ĐH KHTN
143 p | 87 | 11
-
Bài giảng Lập trình trực quan (Ngôn ngữ Visual Basic): Bài 6 - Tính toán thống kê
10 p | 124 | 9
-
Bài giảng Bài 6: Tạo hiệu ứng và validate Form - ĐH FPT
0 p | 77 | 9
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn