源程序组织
汇编(ASM)和宏汇编(MASM)的源程序除了在使用某些伪指令上有些区别外,在源程序的书写结构形式上是完全相同的。
数据段结构:
数据段名 SEGMENT
(用变量定义预置的数据空间)
数据段名 ENDS
例如:DATA SEGMENT
X DW 1520
Y DW 4327
Z DW 3215
RESULT DW ?
DATA ENDS
堆栈段结构:
堆栈段名 STACK
(用变量定义预置的堆栈空间)
堆栈段名 ENDS
例如:STACK SEGMENT PARA STACK 'STACK'
STACK DB 20 DUP(?)
TOP EQU LENGTH STAPN
STACK ENDS
代码段结构:
代码段名 SEGMENT
ASSUME 定义的寻址关系
过程名 PROC
(程序段)
过程名 ENDP
代码段名 ENDS
过程名或起始标号
例如:CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
START:MOV AX,X
MOV BX,Y
ADD AX,BX
SUB AX,Z
MOV RESULT,AX
RET
MAIN ENDP
CODE ENDS
END MAIN
说明:上边是源程序的可能形式,但完全可以满足一般的要求。每个段都以"SEGMENT"语句开始,以"ENDS"语句结束。任何一个源程序至少必须有一个代码段和一条作为源程序结束的伪指令END。根据程序本身要求,数据段可以有,也可以没有。堆栈段如果没有,连接(LINK)时将产生一个警告性的错误:
Warning:No STACK Segment
There was 1 error detected
这并不影响用户程序的正常运行,因为用户可以使用系统堆栈。当然用户如果设置了自己的堆栈段,使用起来会更方便些。一个源程序可以有多个数据段、多个代码段或多个堆栈段,它们可由相应的伪指令以适当形式进行组合,各个段在源程序中的顺序可以任意。