1、单击此处编辑母版副标题样式* 1单击此处编辑母版标题样式 第 4 章 汇编语言程序设计主要内容:4.1 汇编语言和汇编程序4.2 汇编语言程序规范 4.3 伪指令 4.5 宏指令4.6 汇编语言程序设计 机器语言 : 二进制数形式 的 指令 和 数据 。助记符 :用便于记忆的 英语单词 表示的 指令操作码 。它 反映了 指令的 功能 和 主要特征 ,便于人们理解和记忆。汇编语言 : 指令助记符 、 符号地址 、 标号 、 伪指令 等语言元素的集合 及 这些元素 使用的规则 。汇编语言源程序 : 用汇编语言编写的 程序 。4.1 汇编语言和汇编程序汇编程序源程序的编译程序汇编程序汇编语言 源程序
2、 机器语言目标程序 汇编源程序 需 翻译 成 机器语言 (变成可执行文件 ,机器才能执行 ) 这个 翻译过程 叫 汇编 。 高级语言 中称 该过程 为 “解释 ”或 “编译 ”。 执行翻译 的 程序 称为 “汇编程序 ”。汇编语言程序设计与执行过程汇编语言 源程序 源文件 .ASM汇编 (编译 ) 目标文件 .OBJ链接 可执行文件 .EXE调试 最终程序 .EXEMASM 1.ASMLINK 1.OBJDEBUG 1.exe4.2 汇编语言程序规范1. 分段结构 2. 语句的类型 3. 语句的构成与规范 4. 数据项与表达式 作业 : 4-2 4-3 (用表格形式 ) 1. 分段结构汇编语言
3、 源程序 通常 由 一个或几个 程序模块组成 , 每个模块 一般 由 三个逻辑段 组成 :数据段 存放 数据 、 变量堆栈段 堆栈 区域代码段 存放 程序指令示例stack SEGMENT PARA stackDB 100 DUP(stack)stack ENDSdata SEGMENTdata ENDScode SEGMENTASSUME CS:code, DS:data, SS:stackstart: MOV AX, dataMOV DS, AXMOV ES, AXMOV AL, 4CHINT 21Hcode ENDSEND start 堆栈段数据段代码段2. 语句的类型指令语句 :由 指
4、令助记符 构成,汇编后将产生相应的 机器代码 构成的 目标程序 ,供 CPU执行。伪指令语句 : 为 汇编程序 和 链接程序 提供 一些必要 控制信息 的、由 伪指令 构成的 管理性语句 。宏指令语句 : 为程序简洁 ,将 一组反复出现的 指令 集中定义为 一条 宏指令 ,汇编后还原为这组指令对应的目标代码。3. 语句的构成与规范汇编语言程序的每个语句由 4个 域 构成:标号 、 名字 操作符 操作数 ;注释 标号名字域 : 标号 指令的 符号地址 ,用来代表 指令 在存储器中的 地址 。标号后应 加上冒号 。 名字 段、过程、变量 的 名字 ,用来代表它们在存储器中的 地址 。名字后 不加冒
5、号 。示例语句的构成与规范 操作符域 : 指令 、 伪指令 、 宏指令 助记符 。 操作数域 :即指令的 操作对象 。 可以有 0个 、 1个 或 2个 。 操作数之间以 逗号分隔 。 形式: 寄存器 、 存储单元 、 常数 或 表达式 。 注释域 :以 分号开头 ,用来 说明程序的功能、分段 ,以便阅读和理解。 汇编时不予处理 。示例汇编语言的一个实例 : hello.asmdata SEGMENTHello DB Hello, world!,0DH,0AH,$data ENDSprog SEGMENTASSUME CS:prog,DS:datastart: MOV AX,dataMOV D
6、S,AXLEA DX,hello ;取字符串首地址MOV AH,9INT 21H ;显示字符串MOV AH,4CHINT 21H ;退回 DOSprog ENDSEND start名字标号注释注释注释4. 数据项与表达式 常量 标号 变量 表达式 常量 没有属性的纯数二进制数 :以 B结尾,如 01001101B。十进制数 :如 85,或以 D结尾。十六进制数 :以 H结尾, 第 1个数字为 A-F时 ,前面应加 0,如 0F160H, 否则被误会是标识符 。字符串 :用 单引号 括起来 的 1个或多个字符 ,每个字符的 ASCII码值 构成。如 256,汇编时被翻译成 ASCII码 3235
7、36H,而不是 256。标号 :指令语句的 名字 也是 其符号地址 。标号有 3个 属性 :段地址 :即标号 所在段 的 段地址 ;偏移量 :标号所代表存储单元的 段内偏移地址 ;类型 : NEAR(段内引用 )或 FAR (段外引用 )常作为 转移指令 的 转移地址 标号 变量变量 :存于内存单元中的 数据 ,可被程序改变变量名 :是变量的 符号地址变量也有 3个 属性 : 段地址 :变量 所在段 的 段地址 偏移量 :变量单元地址与段首址间的 位移量 。 类 型 :有 BYTE、 WORD和 DWORD三种,由 定义变量 的 伪指令 确定 。变量 与 标号 统称为 存储器操作数 。标号和变
8、量名的使用规则1. 组成: A-Z a-z 0-9 ? . _ $2. 不能 以数字开头 , 句号 (.)只能作 首字符3. 长度 小于 31个 字符4. 不能 与 保留字 (指令助记符 、 伪指令 、 预定义符号 等 )重名5. 不能 重复定义 例: 正确: LP1, AGAIN, NEXT, _GO, OK_1错误: 4M, LOOP, AAA, #HELP, +ONE 表达式 表达式 :由 常数 、 寄存器名 、 标号 、 变量 与一些 运算符 的 组合而成 。 运算符有 6类:A. 算术运算符 B. 逻辑运算符 C. 关系运算符 D. 分析运算符 E. 综合运算符 属性运算符 优先级别
9、算术运算符 +、 -、 *、 /、 MOD、 SHL、 SHR 完成 整数 的 算术运算 , 结果也是 整数 。 注意: 地址运算 要求 两个地址 要在 同一段内 , 只有加、减法 运算才有实际意义。 用于 数字表达式 : MOV AX,4*1024;汇编后的形式为: MOV AX,4096 用于 地址表达式 : LEA SI,TAB+3;若 TAB的偏移地址为 1000H,汇编后的形式为 : LEA SI,1003H求余、 左移、 右移 例 4-1 一个程序片断:DATA SEGMENTVR DB 1,3,5,6DATA ENDSCODE SEGMENT MOV AH,VR+2 ;将 VR+
10、2单元内容 5 AHMOV AL,3*10-20 ;将表达式值 10 ALMOV BH,10 MOD 3 ;将表达式值 1 BHMOV BL,01010B SHL 1 ; 左移 1次得 14H BL6 5 3 1 MVR 逻辑运算符 AND、 OR、 XOR、 NOT逻辑运算符 只能用于 数值表达式 中。例: MOV CL,36H AND 0FH经汇编后: MOV CL,06H注意 : 不要把 逻辑运算符 与 逻辑运算指令 混淆 :例: AND AX, 3FC0H AND 0FF00H汇编后源操作数被翻译为: 3F00H,所以上述指令与 AND AX, 3F00H等价。关系运算符 EQ、 NE
11、、 LT、 GT、 LE、 GE关系运算的关系运算的 结果结果 是一个是一个 逻辑值逻辑值 : 真真 或或 假假关系为关系为 真真 ,结果为,结果为 全全 1关系为关系为 假假 ,结果为,结果为 全全 0例:例: MOV BX,PORT GT 300H若若 PORT值小于值小于 300H,则汇编后为则汇编后为 : MOV BX,0否则汇编后为:否则汇编后为: MOV BX,0FFFFH分析运算符取地址运算符 SEG、 OFFSET取值运算符 TYPE、 LENGTH、 SIZESEG:取变量 /标号的 段地址OFFSET:取变量 /标号的 偏移地址例: VAR DB 12HMOV BX,OFF
12、SET VAR ;取变量 VAR的偏移地址 MOV AX,SEG VAR ;取变量 VAR的段地址;若 VAR在当前使用数据段中,则: AX=DS 取地址运算符 SEG OFFSET取值运算符 TYPE、 LENGTH、 SIZE TYPE: 取变量 /标号的 类型 (1, 2, 4, -1, -2) LENGTH:取变量的 长度 (变量中 元素的 个数 ) SIZE:取变量在 存储区的 字节数 (=TYPE*LENGTH) 例如: V1 DB 2AH,3FHV2 DW 10 DUP(1,?,2)V3 DW 12DUP(?) 注意: LENGTH和 SIZE对 重复操作数 DUP定义的数组逗号
13、隔开的第一项 有效 ,如 V2; 在 如 V1变量, 对 逗号隔开的第一项 有效 ;都符合 SIZE=TYPE*LENGTH。DB BW DD NEAR FAR;LENGTH=1,SIZE=1;LENGTH=10,SIZE=20;LENGTH=12,SIZE=24DATA SEGMENTV1 DB 2AH,3FHV2 DW 2A3FH,3040HV3 DD 12345678H,12ABCDEFHV4 DW 20 DUP(1,4,2DUP(?) DATA ENDS例:下面定义的数据段 DATA,从 40000H开始。 MOV AX,SEG V1MOV BX,SEG V2MOV CX,SEG V3
14、同属一段,段基址相同。 MOV AX,OFFSET V1MOV BX,OFFSET V2MOV CX,OFFSET V3偏移地址分别为 0,2,6。 MOV AX,TYPE V1MOV BX,TYPE V2MOV CX,TYPE V3类型值分别是 1,2,4。 MOV AX,LENGTH V4MOV BX,SIZE V4长度和字节数分别是 20,40。MOV AH,LENGTH V1 MOV AL,SIZE V1MOV BH,LENGTH V2MOV BL,SIZE V2 MOV CH,LENGTH V3MOV CL,SIZE V3 只对第一项有效。AH=1AL=1BH=1BL=2CH=1CL
15、=4属性运算符 PTR用来 改变或建立 地址操作数 的 新类型 。格式: PTR 类型 BYTE, WORD, DWORD, NEAR, FARBYTE、 WORD、 DWORD描述 数据存储单元 (变量 )地址NEAR、 FAR描述 转移 、 调用 (标号 )的 目的地址例: MOV BYTE PTR DI,0 ;字节类型MOV WORD PTR DI,0 ;字类型MOV DI,0B5H ;类型不定PTR也可用来进行强制类型转换例: STR1 DW 2345H;STR1定义为字类型MOV AX,STR1 ;合法 MOV AL,STR1 ;非法MOV AL,BYTE PTR STR1 ;合法4
16、5H23HMSTR1与 EQU配合, 为汇编的 下一个存储单元 定义 一个新的符号名 , 与 下一个存储单元 具有 相同的地址 。格式: THIS 例: LABC EQU THIS BYTE ;LABC为字节LABD DW 4321H,3456H ;LABD为字;LABC和 LABD有相同的段首址和偏移地址MOV AL,LABC ;AL=21HMOV AX,LABD ;AX=4321H指定新类型 THIS43H56HLABC34H21H LABD优 先级 运 算 符高低(),.,LENGTH,WIDTH,SIZE,MASK, 记录 字段名PTR,OFFSET,SEG,TYPE,THIS,CS:,DS:,ES:,SS:HIGH,LOW*,/,MOD,SHL,SHR+,-EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT分析、综合运算符分离运算符算术运算符关系运算符逻辑运算符段类型属性