1、在线教务辅导网: http:/ 更多课程配套课件资源请访问在线教务辅导网2018/5/5 1第四章 汇编语言程序设计 第一节 汇编语言源程序汇编语言是用指令的助记符、符号地址、标号和伪指令等来书写程序 一、汇编语言源程序的结构一个完整的汇编语言源程序通常由若干个逻辑段 (SEGMENT)组成,包括代码段、数据段、附加段和堆栈段,它们分别映射到存储器中的物理段上 2018/5/5 2例 4-1 两个字( A6B8H, 206DH) 相加的完整的汇编语言程序 DATA SEGMENT ;定义数据段DATA1 DW 0A6B8H ;定义被加数DATA2 DW 206DH ;定义加数SUM DW 2
2、DUP(?) ;定义和DATA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSEME CS:CODE,DS:DATA ;段寄存器说明 START: MOV AX,DATAMOV DS,AX ;初始化 DSLEA SI,SUM ;存放结果的偏移地址送 SIMOV AX,DATA1 ;取被加数ADD AX,DATA2 ;两数相加MOV SI,AX ;和送入 SUMMOV AH,4CH INT 21H ;返回 DOSCODE ENDS ;代码段结束END START ; 源程序结束2018/5/5 3二、汇编语言语句类型及格式指令性语句的格式:标号 : 前缀 操作码 操作数 ,操
3、作数 ;注释 例如指令性语句:START: MOV AX,DATA ;将立即数 DATA送累加器 AX指示性语句的格式:名字 伪操作 操作数 ,操作数 , ; 注释 例如指示性语句:DATA1 DB 56H,78H,9AH ;定义字节型数据, “DB”是伪操作 2018/5/5 4指令性语句与指示性语句在格式上的区别: 指令性语句中的 “标号 ”表示指令的符号地址,其后面通常要加上 “:”。指示性语句中的 “名字 ”通常表示变量名、段名和过程名等,其后不加 “:”。名字在多数情况下表示的是变量名,用来表示存储器中一个数据区的地址。 指令性语句中的操作数最多为两个操作数,也可以没有操作数。而指示
4、性语句中的操作数可根据需要有多个,当操作数有不止一个时,相互之间用逗号隔开。2018/5/5 5汇编语言语句中的操作数 三、数据项及表达式操作数可以是寄存器、存储器单元或数据项。而数据项又可以是常量、标号、变量和表达式 1常量 二进制常量 十进制常量 十六进制常量 字符串常量2018/5/5 62标号指令的标号是由编程者确定的,它不能与指令助记符或伪指令重名,也不允许由数字开头,标号的字符个数不超过 31个。指令性语句中的标号代表存放一条指令的存储单元的符号地址,其后通常加一个冒号。 2018/5/5 7标号具有 3种属性:段、偏移量和类型。 标号的段属性是就是标号所在段的段地址。 标号的偏移
5、量就是标号所在段的起始地址到定义该标号的地址之间的字节数(即偏移地址)。偏移量是一个 16位无符号数。 标号的类型有 NEAR和 FAR两种。前一种标号称为近标号,只能在段内被引用,地址指针为 2个字节。后一种标号称为远标号,可以在其他段被引用,地址指针为 4个字节。 2018/5/5 83变量变量名由字母开头,长度不超过 31个字符。变量是存储器中某个数据区的名字,因为数据区中的内容是可以改变的,因此变量的值也可以改变。变量在指令中可以作为存储器操作数引用。变量也具有 3种属性,即:段、偏移量和类型。 变量的段属性就是它所在段的段地址。因为变量一般在存储器的数据段或附加段中,所以变量的段值在
6、 DS或 ES寄存器中。 变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字节数。 变量的类型有 BYTE(字节 )、 WORD(字 )、 DWORD(双字 )、QWORD(四字 )、 TBYTE(十个字节 )等,表示数据区中存取操作对象的大小。2018/5/5 9使用变量时需注意以下两点: 变量的类型与指令的要求要相符。例如指令MOV AX,VAR中,要求 VAR必须定义为字类型变量。 在定义变量时,变量名对应的是数据区的首地址。如果数据区中有多个数据,则对其他数据操作时,需修改地址。例如:BUFFERDB 56H,78H,9AHMOV AL,BUFFER+2 ;将 9AH送(AL)2018/5/5 10