一、源程序格式
- 由段组成
- 包含若干code segment, data segment, extra segment(?), stack segment. Order is not concerned.
- 需独立运行的程序必须有:一个代码段,指示程序执行的起始点(一个程序只有一个起始点)
- 所有可执行性语句必须位于某一个代码段内;说明性语句可根据需要位于任一段内
- 通常程序还需要一个堆栈段
二、语句格式
(1)executable code/执行性语句
- 表达处理器指令(硬指令)/Machine code ——使CPU产生动作、并在程序执行时才处理的指令;与具体的processor有关,与assembler无关
- 汇编后对应一条指令代码
- 由处理器指令组成的代码序列——程序设计的主体
- Label: Instruction Operand, Operand ;comment
- Label(标号):硬指令位置(逻辑地址)和属性的标识符,跟冒号
- Operand: immediate data, register, memory
(2) descriptive code/说明性语句
- 表达伪指令 / Directive ——不产生CPU动作、在程序执行前由Assembler处理的说明性指令;与Processor无关、与assembler有关
- 指示源程序如何汇编、变量怎样定义、过程怎么设置等
- Name Directive Parameter,Parameter,... ;comment
- Name(名字):伪指令位置(逻辑地址)和属性的标识符,无冒号
- Parameter: constant, variable, expression
(3)标识符(Identifier)
(4)保留字(Reserved Word)/关键字——汇编程序已经利用的标识符
- Instruction: MOV, ADD
- Directive: DB, DW
- Operator: OFFSET, PTR
- Register: AX, CS
- 预定义符号:@data
(5) MASM支持续行符“/"
(6)简化段定义格式
.model small ;定义程序的存储模式(小型模式)
.stack ;定义堆栈段(默认是1kb空间)
.data ;定义数据段
... ;数据定义
.coder ;定义代码段
start: mov ax,@data ;程序起始点
mov ds,ax ;设置DS指向用户定义的数据段
... ;程序代码
mov ax,4c00h
int 21h ;程序结束点,返回dos
... ;子程序代码
end start ;汇编结束,同时指明程序起始点start
关于程序的开始:
- 在start后;
- Linker会根据程序起始点正确地设置CS和IP值,根据程序大小和堆栈段大小设置SS和SP;
- Linker没有设置DS和ES值。程序如果使用数据段或附加段,必须明确给DS或ES赋值;
关于程序终止和汇编结束:
- 程序终止:mov ax,4c00h