Ưùng dúng cụa stack

Một phần của tài liệu Giáo trình hợp ngữ (Trang 68 - 70)

Chương 5: NGAÍN XÊP VÀ THỤ TÚC

5.2Ưùng dúng cụa stack

Bởi vì nguyeđn taĩc làm vieơc cụa stack là LIFO neđn các đôi tượng được lây ra khỏi stack có traơt tự ngược lái với traơt tự mà chúng được đưa vào stack . Chương trình sau đađy sẽ đĩc moơt chuoêi ký tự roăi in chúng tređn dòng mới với traơt tự ngược lái .

Thuaơt toán cho chương trình như sau : Display a ‘? ’

Initialize count to 0 Read a character

WHILE character is not CR DO PUSH chracter onto stack Incremet count

Read a character END_WHILE ;

Goto a new line FOR count times DO

POP a chracter from the stack Display it ;

Chương 5 : Ngaín xêp và thụ túc 61 Sau đađy là chương trình :

TITLE PGM5-1 : REVERSE INPUT .MODEL SMALL .STACK 100H .CODE MAIN PROC ; in dâu nhaĩc MOV AH,2 MOV DL,’?’ INT 21H ; xoá biên đêm CX

XOR CX,CX ;đĩc 1 ký tự

MOV AH,1 INT 21H

;Trong khi character khođng phại là CR WHILE_:

CMP AL,0DH JE END_WHILE

;cât AL vào stack taíng biên đêm PUSH AX ; đaơy AX vào stack INC CX ; taíng CX ; đĩc 1 ký tự INT 21h JMP WHILE_ END_WHILE: ; Xuông dòng mới MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H

JCXZ EXIT ; thoát nêu CX=0 ( khođng có ký tự nào được nhaơp) ; laịp CX laăn TOP: ;lây ký tự từ stack POP DX ;xuât nó INT 21H

Chương 5 : Ngaín xêp và thụ túc 62 ; end_for EXIT: MOV AH,4CH INT 21H MAIN ENDP END MAIN

Giại thích theđm veă chương trình : vì sô ký tự nhaơp là khođng biêt vì vaơy dùng thanh ghi CX đeơ đêm sô ký tự nhaơp . CX cũng dùng cho vòng FOR đeơ xuât các ký tự theo thứ tự ngược lái . Maịc dù ký tự chư giữ tređn AL nhưng phại đaơy cạ thanh ghi AX vào stack . Khi xuât ký tự chúng ta dùng leơnh POP DX đeơ lây noơi dung tređn stack ra. Mã ASCII cụa ký tự ở tređn DL , sau đó gĩi INT 21h đeơ xuât ký tự .

Một phần của tài liệu Giáo trình hợp ngữ (Trang 68 - 70)