1、第四章 宏汇编语言程序设计4.1 汇编语言程序格式4.2 MASM中的表达式4.3 伪指令语句4.4 DOS系统功能调用和 BIOS中断调用4.5 程序设计方法4.6 宏汇编和条件汇编* 14.1 汇编语言程序设计特点o 汇编语言是一种用符号表示的、面向 CPU指令系统的程序设计语言。是机器语言的符号表示。o 基本特点: 程序设计人员能更充分地利用机器硬件的全部功能,发挥机器的长处; 程序目标代码占用内存少,执行速度快,效率高,具有实时性; 由于汇编的特点, 汇编语言 常用于编写计算机系统程序、实时通信程序和实时控制程序。但汇编语言程序依赖于机器硬件,其 通用性和移植性都较差 。Date 2从
2、源程序获得目标程序的过程o 汇编语言源程序 经过 汇编 翻译成二进制代码的 浮动目标文件 ,然后由 连接程序 将 目标文件和库文件 相连接 生成机器上 可执行的目标程序进行汇编语言开发需要的文件:1)汇编程序 MASM.exe 2) 连接程序 LINK.EXE 3) 库管理程序 LIB.EXE( 如果不创建子程序库,不需要该文件)4)文本编辑器。如 DOS下的 EDIT 或其它开发工具中的编辑环境如Turbo C等。目的:生成 .ASM文件。5)调试程序 DEBUG源程序 二进制代码的浮动目标程序库文件可执行程序汇编程序连接程序Masm.exelink.exeDate 3开发的步骤(补充)1、
3、源程序的汇编 命令格式: MASM 源程序文件名 如果没有语法错误,则生成目标模块文件 .obj, 否则给出错误信息2、目标文件的连接 命令格式: LINK obj文件名 如果没有严重错误,将生成可执行文件 .exe, 否则将提示相应的错误信息3、可执行文件的执行调试 命令格式: 可执行文件名 操作系统加载该文件进入主存开始运行,如果出现运行错误,可用 debug.exe调试程序。命令格式: debug 可执行程序文件名注意:如果程序里没有的堆栈段,系统会给出 warning,但不会影响程序运行。Date 44-1汇编语言程序格式p汇编语言源程序用语句书写, MASM中可以使用的语句有两类:
4、指令性语句和伪指令语句 。o 指令性语句:即执行性语句 (指令 ),与机器码一一对应 ,表示某种确定操作,包括四部分: 标号: 指令操作码 操作数 ;注释 例: AGAN: ADC BX, AX ;累加o 指示性语句:即说明性语句 (伪指令 ),不对应机器码 ,只为汇编提供所需信息,由四部分组成: 名字 伪指令 操作数 ;注释 例: SUM DW 0 ;为结果保留一个字 Date 5DATASEGMENTSRC_LESS DB HELLO!,0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXM
5、OV DX,OFFSET SRC_LESSMOV AH,9INT 21HMOV AH,1INT 21HMOV AH,4CHINT 21HCODE ENDSEND STARTDate 6汇编程序的基本结构要求o 完整的汇编程序要包括: 段定义、段分配、设置段地址、返回 DOS语句、程序结束 和程序体 。必要时加上过程调用。o 完整汇编语言程序的典型格式o 段定义格式: 段名 SEGMENT段名 ENDSo 至少有一个代码段, 堆栈段如果不定义,由计算机自动分配。 段名是由字母数字组成的,可以任意定义。o 计算机识别不同的段靠 段分配 ASSUME 语句 完成o ASSUME CS: 段名, DS
6、: 段名, SS: 段名, ES: 段名Date 7o assume指定段与段寄存器之间的关系,但并不为段寄存器设定初值,程序中如果使用数据段或者附加段,需要明确对 DS、 ES赋值。只要正确书写源程序, CS、 IP和 SS、 SP的值将会由连接程序正确设置o 设置方法: MOV AX,STACKMOV SS,AXMOV AX,DATAMOV DS,AXo 程序执行完毕后要返回 DOS, 最常用的实现方法:p 全部程序以 END结尾, END后面可以加上程序执行起始的名称,汇编程序遇到 END就结束汇编。MOV AX, 4C00HINT 21HDate 8三、数据项(汇编语言中使用的操作数)
7、1、常数 二进制数:以 “ B” 结尾,如 00001101B; 八进制数:以 “ O” 结尾,如 725O; 十六进制数:以 “ H” 结尾,并且必须以数字打头,即若最高位为字母 A F, 前面应加 0,如 0A12H; 十进制数:以 “ D” 结尾或省略结尾,如 10D、 10。o 字符串常量 字符串常量表示为包含在两个 单引号 之间的一连串ASCII字符。每个串元素的值定义为该元素所对应的 1字节 ASCII码值 。Date 9三、数据项(汇编语言中使用的操作数)2、变量:指存储在存储单元中的值,所有变量有三个属性:v 段值 SEGMENT: 变量所在段的段基址v 段内偏移地址 OFFSET: 变量所在地址和所在段首地址之间的偏移字节数v 类型 TYPE: 变量中每个元素包含的字节数。3、标号:可执行指令语句地址的符号表示,三个属性:v 段值 SEGMENT: 标号所在段的段基址v 段内偏移地址 OFFSET: 标号所在地址和所在段首地址之间的偏移字节数v 类型 TYPE: 指转移指令中标号可转移的距离,也叫距离属性, NEAR( 近标号,实现本代码段内转移)、 FAR( 远标号,段间转移)Date 10