经典汇编语言教程:6.1.3 堆栈段的说明

6.1.3 堆栈段的说明

堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64K字节的堆栈段。

在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生一条如下的警告信息,但程序员可以不理会它,所生成的执行文件是可以正常运行的。

warning xxxx: no stack segment  (其中:xxxx是错误号)

在源程序中,可用以下方法来定义堆栈段。

方法1:

STACK1SEGMENT
DB 256 DUP(?) ;256是堆栈的长度,可根据需要进行改变
TOPLABEL  WORD
STACK1ENDS

以上堆栈段的定义如图6.1所示。由于堆栈是按地址从大到小的存储单元顺序来存放内容的,所以,在堆栈存储单元说明语句之后,再说明一个栈顶别名,这样,对栈顶寄存器SP的赋值就很方便。

在源程序的代码段中,还要添加如下程序段,才能把段STACK1当作堆栈段来使用。

图6.1 堆栈段定义示意图

ASSUMESS:STACK1;可在代码段的段指定语句中一起说明
CLI;禁止响应可屏蔽中断
MOVAX, STACK1
MOVSS, AX
MOVSP, offset TOP;给堆栈段的栈顶寄存器SP赋初值
STI;恢复响应可屏蔽中断
方法2:

STACK1SEGMENT STACK;定义一个堆栈段,其段名为STACK1
DB 256 DUP(?)
STACK1ENDS

上述段定义说明了该段是堆栈段,系统会自动把段寄存器SS和栈顶寄存器SP与该堆栈段之间建立相应的关系,并设置其初值,而不用在代码段对它们进行赋值。

除了以上二种方法外,还有一种更简洁的方法来定义堆栈段,有关内容请见第6.4.2节中的叙述。

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号