一、代码格式
完整定义:
STACK SEGMENT STACK ; 定义堆栈段(可省略,系统有自带堆栈)
DB 1024 DUP(?) ; 定义堆栈段大小
STACK ENDS ; 结束堆栈段定义
DATA SEGMENT ; 定义数据段
......
数据
……
DATA ENDS ; 结束
CODE SEGMENT ; 定义代码段
ASSUME CS:CODE , DS:DATA , SS:SATCK ; 确定逻辑段类型
START: ; 程序开始
......
代码
……
CODE ENDS ; 结束
END START ; 汇编结束,程序开始点为START
简化段定义:
.MODEL small ; 程序储存模式为small
.STACK 1024 ; 定义堆栈段1024长度
.DATA ; 数据段
……
数据
……
.CODE ; 代码段
START: ; 程序开始
MOV AX,@DATA ; 设置DS指向用户定义的数据段
MOV DS,AX
……
代码
……
END START ; 汇编结束,程序开始点为START
(.model+模式;决定了转移、子程序调用、数据访问时的缺省属性;且此伪指令自动产生相应ASSUME语句)
二、语法规范
1.标识符命名:最长31字符、第一不能是数字、'?' , '_' , '$' , '@'可放在任意位置,但'?' , '$'不可单独使用;
2.语 句 格 式:[语句标号: ] 指令名 操作数 ( ; 注释)
3.变 量 定 义:变量名 伪指令 初值表 ; DB、DW、DD、EQU
4.段 定 义:段名 SEGMENT [定位] [组合] [段字] ['类别']
[定位]:PAGE(XXX00H开始) PARA(XXXX0H) DWORD(四倍数地址) WORD(偶数地址) BYTE(任意地址)
(默认定位PARA)
[组合]:PUBLIC COMMON(同名长段覆盖短段) STACK(基址->SS,初始化SP) AT(定位在指出的边界上)
MEMORY(所有段的最高地址)
(PUBLIC、STACK链接同名段)
[段字]:USE16 / USE 32(16 / 32位指令)
(缺省16位)
['类别']:在单引号内任意名称,连接程序组织段时,同类分配相邻地址,保持代码、数据、堆栈的连续性;
5.ASSUME:ASSUME 段寄存器名:段名,……(设置段寄存器和段名的关系)
ASSUME 段名:NOTHING ; (删除对……的设置)
(
另:1)DS与ES的装入
MOV AX , 段名
MOV DS/ES , AX
2)SS与SP的装入(系统自动初始化)
3)CS和IP的装入
END 起始地址标号
)
6.定义伪指令:
1)ORG :后面的数据/指令从指定偏移地址开始('$':当前的偏移值);
2)EVEN:使下面的数据/指令从下一个偶地址开始;
3)AGAIN:使下面的数据/指令从指定n的整倍数地址开始;
7.标号:名称 : 语句(短距离)
名称 LABEL 类型 : 语句(类型决定距离、(变量类型))
注:JMP 标号;时,跳不同类型,代码一样,执行操作不同;
8.过程定义:过程名 PROC [NEAR/FAR] ; (缺省NEAR)
……
过程代码
……
过程名 ENDP
9.宏定义:宏名称 MICRO 形参表
……
宏定义体
……
宏名称 ENDM
调用:宏名称 实参表(缺省参数由空格替代)