新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材

上传人:yuzo****123 文档编号:142821000 上传时间:2020-08-23 格式:PPT 页数:32 大小:389KB
返回 下载 相关 举报
新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材_第1页
第1页 / 共32页
新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材_第2页
第2页 / 共32页
新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材_第3页
第3页 / 共32页
新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材_第4页
第4页 / 共32页
新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材》由会员分享,可在线阅读,更多相关《新编1632位微型计算机原理及应用(李继灿主编)课件第4章培训教材(32页珍藏版)》请在金锄头文库上搜索。

1、4.1 汇编语言语法规则,一.概述 1.可执行文件的生成 编辑,第四章 宏汇编语言, 编译, 链接,2.源程序中的语句类型 一个完整的源程序应包含2类语句: 符号指令、汇编伪指令(伪语句),标号名、变量名、段名、过程名命名规则:以字母开头,后跟字母、数字长度31个字符,符号指令:经汇编后,其目标指令通知CPU进行什么操作 伪指令:为汇编程序,链接程序提供汇编链接信息,功能: 通知汇编程序把DB后跟的单字 节数,依次存入从变量(如N1) 开始的单元,负数用补码表示, 单引号中的字符翻译成ASC码。,如: N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6

2、H, HELLO N2 DB ?,?,? ;与下条等价 N2 DB 3 DUP(?),如: N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,? ;与下条等价 N2 DB 3 DUP(?),功能: 用DB定义的这些内存单元(N1 N1+12, N2 N2+2)的属性均为“字节型”。,2.字定义伪指令 变量名 DW 一串用逗号间隔的双字节数,如: WNUM DW 1234H,12, AB, C DW ?,? DW 2 DUP(?),说明: DW Define Word “字定义” ? 双字节随机数 单引号中只能是一个

3、或两个字符,功能: 通知汇编程序把DW后跟的双字节数, 依次存入从变量名开始的单元,每一个数 占2个字节,低位字节低址单元, 高位字节相邻的高址单元。,功能: 用DW定义的这些单元的属性都是“字型”, 如上例, WNUM WNUM+11这12个单元的属性都是“字型”。,功能: 通知汇编程序把DD后跟的数存入变量名开始的单元, 每一个数占4个字节,低位字节低址单元,高位字节高址单元。,用DD定义的这些单元的属性都是“双字型”,上例DNUM DNUM+3单元,这些单元都是双字型单元,3. 双字定义伪指令 变量名 DD 一串用逗号间隔的4字节数 如: DNUM DD 12345678H,5. 等值伪

4、指令 符号常数 EQU 表达式 如: NUM EQU 33,功能: 定义符号常数NUM的值为33,6. 等号伪指令 符号常数=表达式 如: NUM = 33 功能:定义符号常数NUM的值为33,4. 多字节定义伪指令 变量名 DF 一串用逗号间隔的6字节数 变量名 DQ 一串用逗号间隔的8字节数 变量名 DT 一串用逗号间隔的10字节数,功能: 通知汇编程序为DF/DQ/DT后跟的每一个数,分配 6/8/10个单元。,三. 常用运算符 1. 算术运算符: +, -, *, /,2. 关系运算符: EQ(等于), NE(不等于), GT(大于),LT(小于), GE(大于或等于),例如: NUM

5、 EQU 33 MOV AL, NUM;该指令与下条指令等价 MOV AL , 33,区别: 用EQU定义的符号常数,其值在后继语句中不能更改;用“=”定义的符号常数,其值在后继语句中可以重新定义,应用: $运算符紧跟在 DB、DW、DD伪指令之后,统计字符串的长度。,例如数据段有: BUF DB THE QUICK BROWN FOX ;字符串长度19 LLL EQU $-BUF 汇编后 符号常数LLL的值即为19,3. $运算符 汇编程序对源程序是逐行汇编的,$运算符可以返回 汇编计数器的当前值。,如: MOV AX, SEG DATA MOV DS, AX 设“DATA”是数据段的段名,

6、上述两条指令算出数据段的段基址,先赋给AX,再转赋DS。,5.OFFSET运算符 格式:OFFSET 变量名或标号名 功能:算出某个变量或标号名所在单元的偏移地址(有效地址)。,4. SEG运算符 格式: SEG 段名或变量名或标号名 功能: 计算某一逻辑段的段基址,设以“DATA”为段名的数据段中,存在 BUF DB 12 ,34 ,56 代码段: MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET BUF MOV AL,BX ;AL=12,以下两条指令等价的: MOV BX,OFFSET BUF LEA BX,BUF,6. PTR运算符 格式: 类型说明符 PT

7、R 地址表达式,功能: 在本条指令中临时修改地址表达式的属性, BYTE(字节) WORD(字) DWORD(双字) FAR(远) NEAR(近),举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0,代码段:, MOV BUF,12H ,举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0,举例:设数据段有: BUF

8、 DB 11,22,33,44 WBUF DW ?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0,7.方括号 用方括号括起来的地址表达式是访问内存操作数常用的寻址方式,方括号的另一用途是标注数组元素的下标,下标从0开始。,代码段: MOV AL,BUF3;AL=44,一 . 源程序的结构 一个完整的源程序,在结构上必须: 用段定义语句定义每一个逻辑段 用过程定义语句定义每一个过程 用ASSUME语句说明段约定 用汇编结束语句说明源程序结束 程序结束应能安全返回DOS把控制权还给操 作系统,4.2 宏汇编的基本语句,二. 基本

9、语句 1. 方式选择伪语句 格式之一: 486 功能:通知汇编程序将以下指令汇编成486的 机器指令。 应用:源程序第一条指令。,2. 段定义语句 段名 SEGMENT 定位参数 链接参数 分类名 段长度 段体 段名 ENDS,说明: 段名以字母开头,命名规则同变量名、标号名, 段名不说明段体的性质。 SEGMENT / ENDS是逻辑段的定界语句。 定位参数通知链接程序:逻辑段的目标代码在存 储器中如何存储,有4种描述: BYTE 可以从任意地址存放 WORD 从偶地址开始存放 PARA(或缺省) 从能被16整除的地址开始存放 PAGE 从能被256整除的地址开始存放,链接参数有6种描述:

10、PUBLIC 通知链接程序,把不同模块中,具有 PUBLIC属性的同名段,在满足定位参数的要求 下,按指定的链接顺序链接成一个逻辑段。 MEMORY 与PBULIC类似。 COMMON 通知链接程序把不同模块中都具有 COMMON属性的同名段,根据指定的链接顺序, 按照“覆盖” 方式,组合成一个逻辑段。 组合之后的逻辑段体积等于链接之前具有COMMON 属性的同名段中的最大的段体。 STACK 具有STACK属性的段是堆栈段,链接程 序将把同名堆栈段组合成一个大的堆栈段。, AT表达式 如: DATA SEGMENT AT 40H ORG 17H KEYFLAG DB ? DATA ENDS

11、表明逻辑段段基址为40H,KEYFLAG的偏移地址 为17H。 注意: 因为程序在内存中的位置是由操作系统分配的,用户程序不能指定逻辑段的段基址。 严格地讲,“AT表达式”这一属性是供操作系统程序使用的。 缺省 表明该段是独立的,链接程序对于具有缺省链接参数的同名段,不进行组合。, 不同模块同名段链接参数的功能示意图,A段 (PUBLIC) 段体A1,主模块,子模块,C,P,S,PUBLIC,COMMON,STACK,C段 (STACK) 段体C1,A段 (PUBLIC) 段体A2,C段 (STACK) 段体C2,B段 (COMMON)段体B1,B段 (COMMON)段体B2,段体A1 段体A

12、2,段体B2,段体C1 段体C2, 分类名 分类名的名字由程序员命名,通常数据段分类名为 DATA,代码段分类名为CODE,通知链接程序, 把分类名相同的同名逻辑段放在邻近的内存区。, 段长度: USE16 表示该段体积最大64K,单元偏移地址为16 位,采用16位寻址。 USE32 表示该段体积最大4G,单元偏移地址为32 位,采用32位寻址。 在实模式下运行, 应选用USE16。,逻辑段有4类属性参数,每一参数又有多种选择,怎样使用? 在实模式环境下,各逻辑段应采用16位寻址,所以段长度选用USE16。 堆栈段选用 STACK 为链接参数,STACK为分类名,由于选用 STACK 为链接参

13、数,汇编后DOS将自动给SS:SP赋值。 只有在模块化程序中,才有必要考虑链接参数的选择。 在单一模块程序中,定位参数,链接参数,分类名均 选用“缺省”表示即可。,段参数应用小结,3. 段约定语句 ASSUME 段寄存器:段名,段寄存器:段名 如: ASSUME CS:CODE, DS:DATA,功能: 通知汇编程序 以CODE为段名的是代码段,对CODE段寻址:CS* 24 以DATA为段名的是数据段,对DATA段寻址:DS* 24,说明: ASSUME语句通常是放在代码段的第一条语句。 ASSUME语句不能完成对段寄存器的赋值(没有赋 值功能)。, 对段寄存器赋值有2种方法: 用SEG运算

14、符 如: MOV AX, SEG DATA MOV DS, AX 把段名赋给段寄存器 如: MOV AX, DATA MOV DS, AX, 重申:CS:IP 由DOS自动赋初值。 SS:SS 初值由DOS自动赋给,或由程序员赋给。,说明: 过程名即子程序名,命名规则同变量名。 PROC / ENDP是过程的定界语句。 汇编后过程名就是子程序第一条指令的入口地址。 属性有两种描述: NEAR 近 FAR 远,4. 过程定义语句 过程名 PROC 属性 过程实体 RET 过程名 ENDP,5. 定位语句 ORG 表达式 如: ORG 100H BEG: JMP START 功能:定义程序段的起始偏移地址,上例通知汇编 程序,指令的目标代码汇编后的偏移地址从 100H开 始存放。 应用:通常在COM格式中使用。,6. 汇编结束语句 格式1:END 启动地址标号 如:END ABC 功能:通知汇编程序源程序到此结束,程序从 标号为“ABC”的那条指令依次执行。 说明:该语句为单一模块程序或模块化程序中 主模块程序的最后一条语句。 格式2:END 功能:通知汇编程序源程序到此结束。 应用:该语句为模块化程序中的子模块的最后一条 语句 。,7. 返回DOS的指令(最常用) 调用DOS功能中的第“4CH”号子程序 MOV AH , 4CH INT 21H,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号