
DuyTan University Assembly Language Programming
CHNG 5
STACK & CHNG TRÌNH CON
Nguyn VnTh
Bmôn in tvinthông
Khoa Công nghthông tin, i hcDuy Tân – 2008
I HCDUY TÂN
KHOA CÔNG NGHTHÔNG TIN
Nguyen Van Tho – Duy Tan University.
STACK
-Là mtvùng nh%trong bnh%
-T)ch+cki.uvào tr0%c-ra sau
-Ph5n t6cu7icùng g8ilà :;nh ng<n x>p
-Do 2 thanh ghi SS và SP quBnlý
-SS ch+a:Dach; :oEnStack
-SP ch+a:;nh Stack
- Khai báo :oEnng<n x>p :
.STACK <vDtrí :;nh ng<n x>p>
Nguyen Van Tho – Duy Tan University.
Ví dN:.STACK 100H
0100h
00FEh
00FCh
00FAh
00F8h
00F6h
00F4h
00F2h
00F2h
.
.
.
SP
Offset STACK
Ngn x5p r7ng
0100h
SP

DuyTan University Assembly Language Programming
Nguye n Va n Tho – Duy Tan Universi ty .
CÁC LNH THAO TÁC STACK
•PUSH
•POP
•PUSHF
•POPF
Nguyen Van Tho – Duy Tan University.
LNH PUSH
Cú pháp :
-Source là thanh ghi 16bit hoVc 1 tWnh%(2byte)
L[nh PUSH th\chi[ncông vi[csau
1-GiBmSP :i 2
2-L^y nidung c_asource :0avào :;nh ng<n x>p
Ví dN:PUSH AX ; c^tAX vào stack
PUSH BX ; c^tBX vào stack
PUSH Source
Nguyen Van Tho – Duy Tan University.
LNH POP
Cú pháp :
-Dest là thanh ghi 16bit hoVc 1 word
-L[nh PUSH th\chi[ncông vi[csau
1-L^y nidung :;nh ng<n x>p:0avào dest
2 - T<ng SP lên 2
Ví dN:POP AX ; l^ygiá trDtrong stack
AX
POP BX ; l^ygiá trDtrong stack
BX
POP Dest

DuyTan University Assembly Language Programming
Nguye n Va n Tho – Duy Tan Universi ty .
LNH POP
Cú pháp :
Mô tB:
PUSHF : PUSh thanh ghi cf
POPF : POP thanh ghi cf
PUSHF
POPF
Nguyen Van Tho – Duy Tan University.
Ví dN:
.STACK 100H
.CODE
MOV AX,9876H ; AX=9876h
MOV BX,1234H ; BX=1234h
PUSH AX ; c^tAX vào Stack
PUSH BX ; c^tBX vào stack
POP CX ; l^y nidung :;nh stack :0avào CX
POP DX ; l^y nidung :;nh stack :0avào DX
END
Nguyen Van Tho – Duy Tan University.
.STACK 100H
0100h
00FEh
00FCh
00FAh
00F8h
00F6h
00F4h
00F2h
0000h
.
.
.
SP
Offset STACK
0100h SP
9876h AX
0100h BX
CX
DX
Ngn x5p r7ng
MOV AX,9876H
MOV BX,1234H

DuyTan University Assembly Language Programming
Nguye n Va n Tho – Duy Tan Universi ty .
PUSP AX
9876H
0100h
00FEh
00FCh
00FAh
00F8h
00F6h
00F4h
00F2h
0000h
.
.
.
SP
Offset STACK
00FEh SP
9876h AX
1234h BX
CX
DX
Ngn x5pcó 1 ph@n t
Nguyen Van Tho – Duy Tan University.
PUSP BX
1234h
9876h
0100h
00FEh
00FCh
00FAh
00F8h
00F6h
00F4h
00F2h
0000h
.
.
.
SP
Offset STACK
00FCh SP
9876h AX
1234h BX
CX
DX
Ngn x5pcó 2 ph@n t
Nguyen Van Tho – Duy Tan University.
POP CX
1234h
9876h
0100h
00FEh
00FCh
00FAh
00F8h
00F6h
00F4h
00F2h
0000h
.
.
.
SP
Offset STACK
00FEh SP
9876h AX
1234h BX
1234h CX
DX
Ngn x5pcó 1 ph@n t

DuyTan University Assembly Language Programming
Nguye n Va n Tho – Duy Tan Universi ty .
POP DX
1234h
9876h
0100h
00FEh
00FCh
00FAh
00F8h
00F6h
00F4h
00F2h
0000h
.
.
.
SP
Offset STACK
00FEh SP
9876h AX
1234h BX
1234h CX
9876h DX
Ngn x5p r7ng
Nguyen Van Tho – Duy Tan University.
Ví dN5.1 : Vi>tch0ong trình nhqpvào 1churicác kí t\.
Hi.nthDlEichurikí t\ :ó theo th+t\ng0tc lEi .
MOV CX,0 ; :>m=0
MOV AH,1 ; chuun bD:8c
INT 21H ; :8c 1 kí t\
While:
CMP AL,13 ; Enter ?
JE EndWhile ; :úng, dWng :8c
PUSH AX ; không :úng, c^tAX vào stack
INC CX ; t<ng b:>m
INT 21H ; :8c 1 kí t\
JMP While ; trylEivòng lVp
EndWhile:
Nguyen Van Tho – Duy Tan University.
Ví dN5.1 (tt)
CMP CX,0 ; :>m=0 ?
JE Exit ; :úng, dWng
MOV AH,2 ; Chuun bDhi.nthD
LAP: POP DX ; L^ykí t\tWstack
INT 21H ; hi.nthD
LOOP LAP ; lVp lEiCX l5n
Exit: