(十一)在代码段中使用栈--汇编笔记

汇编语言

Posted by YiMiTuMi on March 20, 2020

在代码段中使用栈

利用栈,将程序中定义的数据逆序存放

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的作用时,可以说用它定义数据,也可以说用它开辟内存空间。

六月雪 – 爱恋、相思