在代码段中使用栈
利用栈,将程序中定义的数据逆序存放
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H //定义16个字的内存空间来存放
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //这段空间用来当作栈来使用
start: mov ax, cs
mov ss, ax
mov sp, 30H //前面占用了cs:0 ~ cs :F,所以栈从 ss:0010 ~ ss:002f,所以空栈sp为30H
//进栈
mov bx, 0
mov cx, 8
s: push cs:[bx]
add bx, 2
loop s
//出栈
mov bx, 0
mov cx, 8
s0: pop cs:[bx] //原封不动的取出来
add bx, 2
loop s0
mov ax, 4c00H
int 21H
codesg ends
end strart //指明程序的入口
要将cs:10 ~ cs:2F的内存空间当作栈来用,初始状态下栈为空,所以ss:sp 要指向栈底,则设置ss:sp指向cs:30H。
代码段中定义了16个字型数据,它们的数值都是0。这16个字型数据的值是多少,对程序来说没有意义。我们用dw定义16个数据,即在程序中写入了16个字型数据,而程序在加载后,将用32个字节的内存空间(16个内存空间,每个2字节)来存放它们。这段内存空间是我们所需要的,程序将它用作栈空间。
定义这些数据的最终目的是,通过它们取得一定容量的内存空间。所以我们在描述dw的作用时,可以说用它定义数据,也可以说用它开辟内存空间。