Chương 5: NGAÍN XÊP VAØ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ự .