目录
格式和伪指令
汇编语言的汇编处理过程
- 按语法规则编写源程序PROG.ASM;
- 用汇编程序将源程序翻译成目标文件PROG.OBJ;
- 用连接程序对1个或几个.OBJ模块连接后,生成能在机器上执行的程序PROG.EXE。
如果汇编过程中出错,要在纠错后重新汇编;
连接过程也会出现新的错误,需要反复修改。
伪指令语句
段定义语句
段定义语句SEGMENT和ENDS,用来定义一个逻辑段
Ex:
用段定义语句定义一个数据段, 段名为DATA, 段中包含X、Y两个变量
1. 段定义语句的一般形式:
加“[ ]”项可省略,但堆栈段的组合类型是STACK,不可省略。
省略项不写时,其值用带“*”的项,它们是隐含用法,用的是默认值。
段分配语句
段分配语句ASSUME告诉汇编程序,4个段寄存器CS、DS、SS、ES分别与哪些段有关。格式如下,也可分两行书写。
ASSUME CS:代码段名,DS:数据段名
ASSUME SS:堆栈段名,ES:附加段名
过程定义语句
将结构和功能相同,仅有一些变量赋予的值不同的程序段独立编写,用过程定义伪指令PROC和ENDP进行定义,并把这些程序段称为过程(Procedure)或子程序,由主程序中的CALL语句来调用它们
变量定义语句
变量定义语句的一般形式为:
变量名 伪指令指示符 操作数 ;注释
变量名用符号表示,也可以省略。
伪指令包括DB、DW、DD、DQ和DT,分别定义字节、字、双字、4字和10字节变量。
操作数可以有具体的字节、字和双字等初值,也可以不指定具体数值,而用一个问号“?”来表示,此时仅为变量留出存储单元
[变量名] DB 表达式[, ……] ;定义字节变量
[变量名] DW 表达式[, ……] ;定义字变量
[变量名] DD 表达式[, ……] ;定义双字变量
[变量名] DQ 表达式[, ……] ;定义四字变量
程序结束语句
程序结束语句的格式为:
END [标号名或名字]
它位于程序的最后一行,指示源程序结束,遇到END伪指令则停止汇编。
标号名或名字可省略。
完整的汇编语言程序框架
完整的汇编语言程序包含数据段、代码段、堆栈段和附加数据段
其中代码段是必须要有的;
堆栈段根据情况设置;
代码段中要用到变量或数据时,应该设置数据段。当代码段中有字符串操作指令时,不仅要设置数据,还必需设置附加段,而且必须将源串存放在数据段中,而把目的串放在附加段中。
DOS系统功能调用和BIOS中断调用
DOS系统功能调用
中断处理程序分类
- 8086 CPU可处理256类中断,利用INT n指令,可直接调用256个系统已编写好的中断处理程序。INT n指令中的类型号n=00~FFH;
- n=00~04H为专用中断,处理除法错、单步、不可屏蔽中断NMI、断点、溢出中断;
- n=10H~1AH、2FH、31H、33H为BIOS中断,即保存在系统ROM BIOS中的BIOS功能调用。
- n=20H~2EH为DOS中断,应用DOS提供的功能程序来控制硬件,可对显示器、键盘、打印机、串行通信等字符设备提供输入输出服务。
DOS系统功能调用方法
DOS系统功能调用的步骤:
- 功能调用号送到AH寄存器中,AH=00~6CH
- 入口参数送到指定的寄存器中,一种功能调用又包含多个子功能,有些调用不带参数
- 执行INT 21H指令
- 得到出口参数,或将结果显示在CRT上
BIOS中断调用
- 有些DOS系统功能调用和BIOS中断调用能完成同样的功能。例如,要打印一个字符,可以用INT 21H的5号DOS功能调用,也可用BIOS的INT 17H的0号中断调用。
- 由于BIOS更接近硬件,使用起来要复杂一些,尽量使用DOS系统功能调用。
- 有些情况下,必须使用BIOS中断调用。例如,INT 17中断的2号调用为读打印机状态,DOS功能调用无这种功能,只能使用BIOS中断调用。
汇编语言程序设计方法与实例
顺序结构程序设计
如果用循环程序将00~FFH先后送入DL,再利用DOS的2号功能调用,则可显示全部的标准和扩展ASCII码,包括全部控制符以及积分符、希腊字母等