计算机基础课件 第4章_汇编语言程序设计

上传人:飞****9 文档编号:132404247 上传时间:2020-05-15 格式:PPT 页数:89 大小:540.54KB
返回 下载 相关 举报
计算机基础课件 第4章_汇编语言程序设计_第1页
第1页 / 共89页
计算机基础课件 第4章_汇编语言程序设计_第2页
第2页 / 共89页
计算机基础课件 第4章_汇编语言程序设计_第3页
第3页 / 共89页
计算机基础课件 第4章_汇编语言程序设计_第4页
第4页 / 共89页
计算机基础课件 第4章_汇编语言程序设计_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《计算机基础课件 第4章_汇编语言程序设计》由会员分享,可在线阅读,更多相关《计算机基础课件 第4章_汇编语言程序设计(89页珍藏版)》请在金锄头文库上搜索。

1、第4章汇编语言程序设计 教学目标 重点掌握80X86汇编语言源程序的基本格式 语法规则 能熟练的运用汇编语言进行最基本的程序设计 教学内容 4 1汇编语言语法4 2汇编语言程序设计 汇编语言程序设计 汇编语言 一种面向机器的程序设计语言 是一种用符号表示的低级程序设计语言 机器语言的符号化描述 宏汇编语言 增加伪 宏指令语句构成汇编语言程序设计语言 汇编 汇编语言编写的程序不能由机器直接执行 必须经汇编程序翻译成机器语言程序 汇编语言源程序 汇编语言源程序是程序员根据具体问题的算法 用汇编语言的语句编写的程序文本 通常以 asm作为扩展文件名 汇编语言程序设计中由于开发环境支持不同 可以有两种

2、不同的段定义形式 完整段定义和简化段定义 采用这两种定义方式编写的程序分别被称完整段程序和简化段程序 典型的汇编程序结构 完整段 所谓完整段结构 是指汇编语言源程序中使用段定义伪指令对用到的逻辑段分别定义 STACKSEGMENTDW256DUP STACKENDSDATASEGMENTAADB12 25 36DATAENDSCODESEGMENTASSUMECS CODE DS DATA SS STACKSTART MOVAH 4CHINT21HCODEENDSENDSTART 典型的汇编程序结构 简化段 引入简化段的主要目的是简化源程序中段描述指令 提高程序编写效率 MODEL模式名 定义

3、程序模式 SMALL LARGE等 DATA 数据段定义开始 变量定义及数据空间预置 STACK 堆栈段定义 默认1KB空间 可自己定义 CODE 代码段定义开始 STARTUP 代码段入口标志 程序代码内容 EXIT 返回DOS操作系统 子程序定义END 程序结束 汇编语言的基本语法 指令性语句 由指令构成 与机器指令一一对应 标号 操作码操作数 注释 如 START MOVAX DATA 初始化数据段指示性语句 由命令 伪指令 构成 是程序员发给汇编程序的命令 没有相应的机器指令 名字 变量 命令参数 注释 如 DATASEGMENT宏指令语句 用户在源程序中定义的一段具有独立功能的指令语

4、句 汇编过程 检查源程序的语法错误 并给出出错信息 产生目标文件 OBJ 列表文件 LST 和交叉索引文件 CRF文件 展开宏指令 列表文件 LST文件 同时列出汇编语言源程序和机器语言目标程序的文件 交叉索引文件 CRF文件 列出程序中使用的符号 变量和标号以及引用情况 汇编与连接 4 1汇编语言语法 常量 标识符 标号和表达式指示性语句程序结束伪指令段定义伪指令过程定义伪指令数据定义伪指令符号定义伪指令名字和变量DOS系统功能调用 一 常量 标识符 标号和表达式 1 常量指令中出现的固定值 在程序运行期间不会变化 分为数字常量 字符常量和符号常量三种 指令中的立即数 MEM直接地址 1 数

5、字常量 直接用数字表示的常量 二进制 10000100B 11110001020100B十进制 12356D十六进制 12ABH 0F56AH 字母打头必须前面补0 否则将出现汇编语法错误 常量 例如 MOVAX 100DMOVBL 0FAH 2 字符串常量 包含在单引号内的一个或两个ASCII字符构成 它所代表的数值就是该字符的ASCII码 只有在初始化存储器时才可以使用多于两个字符的字符串常量 例如字符 A 等价于41H 字符 AB 等价于4142H 3 符号常量 用标识符 常量名 表示的常量 它具有一个设定的数值从而被引用 2 标识符 有特定意义的字符序列 标识符可用作符号常量 名字 变

6、量和标号等 符号命名规则 0 31个ASCII码字符A Z a z 0 9 及下划线构成 除数字以外 所有规定的字符都可作为标识符的第一个字符 不能单独作为标识符 无独立的保留字及运算符 标识符 3 标号 指令性语句存放地址的符号表示 常用于指令的转移和子程序调用 标号定义标号名 机器指令语句例如 MOVCX 10HLOOP1 ADDAL 2HDECCXLOOPLOOP1 此处LOOP1不是保留字 4 表达式与运算符 由操作数 常量 变量 标号 和运算符构成 在汇编时完成相应的运算 数字常数 OBJ 目标程序中不存在表达式 应用程序的DEBUG调试中不可能看到任何表达式 表达式与运算符 1 逻

7、辑运算符 运算符 AND OR NOT XOR例如 ANDAL 86HAND0FHAND是指令 AND是逻辑运算符 86HAND0FH 06H汇编后的指令是 ANDAL 06H注意 逻辑运算符只能对常数 或相当于常数 进行运算 与逻辑运算指令不同 CPU不执行任何操作 汇编时运算 在目标程序中只是一个常数 2 关系运算符 运算符 EQ NE LT LE GT GE关系成立时 其结果为全1 否则为全0 例如 MOVBX PORTLE5 AND20H 当POTR小于5则等效于MOVBX 20H否则等效于MOVBX 0H 程序结束伪指令段定义伪指令过程定义的伪指令数据定义伪指令符号定义伪指令名字和变

8、量 二 指示性语句 1 程序结束伪指令 程序结束伪指令END格式 END标号 标号为程序中第一条指令性语句标号 分段结构是8086 8088的特定 程序和存储器都是按段来组织的 1 段定义伪指令格式 段名SEGMENT 定位方式 组合方式 类别名 段名ENDS定义了以段名命名的存贮段 汇编时给该段名分配一个段基值 2 段定义伪指令 段定义语句 例如 DATASEGMENT DATAENDSCODESEGMENT CODEENDS定义了二个段 段名分别为DATA CODE 说明 定义数据段 附加数据段和堆栈段时 处于SEGMENT ENDS伪指令中间的语句 只能包括伪指令语句 不能包括指令语句

9、2 段定义伪指令的参数 定位类型 段的起始地址边界PAGE 指定起始地址的低8位是0 称页边界XXXXXXXXXXXX00000000BPARA 指定起始地址的低4位是0 称段边界 缺省 XXXXXXXXXXXXXXXX0000BWORD 指定起始地址的低2位是0 称字边界XXXXXXXXXXXXXXXXXX00BBYTE 指定起始地址为任意值 XXXXXXXXXXXXXXXXXXXXB PARA为缺省方式 段定义伪指令的参数 组合类型 连接程序时设定本段与其它段的连接方式 模块化程序设计 PUBLIC 同名段依次连接起来 形成一个连续的段 COMMON 同名段共用同一段起始地址 相互重叠段的

10、长度 为最长的段的长度 AT表达式 定位在表达式所指定的段地址 代码段例外 STACK 同名段构成一个连续的堆栈段 自动初始化SP MEMORY 表示本段定位在所有段的地址之上 高地址处 空缺 NONE 不与任何段相连接 各段有独立段基址 NONE为缺省方式 段定义伪指令的参数 类别名 用单引号括起来的字符串 类别名相同的段按先后顺序存放在一个连续的存贮区中 形统一的物理段 模块化程序设计 3 段寄存器说明伪指令 格式 ASSUME段寄存器 段名1 段寄存器 段名2 在代码段 告诉汇编程序CS DS ES SS应具有的符号段基址 但是段寄存器 CS除外 还必须用传送指令赋值 一般紧跟在SEGM

11、ENT语句之后 段寄存器说明伪指令 例如 CODESEGMENTPARAASSUMECS CODE DS DATAMOVAX DATAMOVDS AX 传送指令赋值 CODEENDSDATASEGMENT DATAENDS 过程是程序的一部分 即子程序 过程可用程序中的CALL指令调用 当过程中的指令执行完后 用RET指令返回 格式 过程名PROCNEAR FAR 过程名ENDP过程名 过程的起始地址 如子程序定义 类型 NEAR近过程 主 子同段 FAR远过程 主 子在两个不同的代码段 3 过程定义伪指令 4 数据定义伪指令 数据定义语句用来为数据分配存储单元 数据段 附加段和堆栈段都是存放

12、数据的 其中所用的语句主要是数据定义语句 格式 变量名 命令参数1 参数2 注释 说明 变量名 由程序员在编程时按标识符规定取的 命令 表示符号及功能如下 DB字节 8位 一个字节存贮单元DW字 16位 二个连续字节存贮单元DD双字 32位 四个连续字节存贮单元DQ双字 64位 8个连续字节存贮单元DT双字 80位 10个连续字节存贮单元 数据定义伪指令 数据定义伪指令 参数 相应内存单元中的数据 可以是数字常量 字符常量或符号常量 当它是保留时就以问号 表示 参数可以有多个 相互间用逗号 隔开 若连续多个数据是重复的 可用复制符DUP以简化书写 DUP的用法为 复制次数DUP 数据 例如 A

13、RRAYDB10DUP 12H 数据定义伪指令举例1 例 段名为DATA的段由以下语句组成DATASEGMENTDATA1DB20HARRAYDB12H 12 A SUMDB DATAENDS设本段的段基址为2000H 则相应的内存分配为 数据定义伪指令举例2 例 DATA2DB2DUP 12H 34H 56H 其内存分配为 数据定义伪指令举例3 例 DATA3DB ABCD 其中 参数部分 ABCD 是 A B C D 的简写 其内存分配为 数据定义伪指令举例4 例 DATA4DW1234H 9AH 其内存分配为 数据定义伪指令举例5 例 DATA5DW AB CD 不能写为 ABCD 其内

14、存分配为注意 除用DB定义的字符串常量外 单引号中ASCII字符的个数不得超过2个 若只有一个 如DW C 就相当于DW0043H 数据定义伪指令测试 画出下列语句中的数据在存储器中的存储情况ARRAYBDB63 63H ABCD 3DUP 2DUP 1 3 ARRAYWDW1234H 5 AB CD 2DUP 1 3 5 符号定义伪指令 1 应用命令EQU和PURGE格式 符号常量EQU表达式如需对已赋值的名字赋以新值 则先用PURGE语句撤销原赋值 其格式为 PURGE名字PURGE可同时撤销几个已赋值 符号定义伪指令 例如 COUNTEQU20ADDAX COUNTPURGECOUNTC

15、OUNTEQU30ADDAX COUNT 2 应用命令 格式 符号常量 表达式其功能与EQU类似 唯一的区别是命令 可随时对名字赋新值 而不必使用PURGE命令 例 COUNT 20ADDAX COUNTCOUNT 30ADDAX COUNT 6 名字和变量 1 名字段名 在源程序的段定义语句中命名取定 源程序在汇编连接时 系统分配给该段一个段基址 这时 段名就可作为段基址被引用 例 已定义一个数据段DATA 系统分配给该段一个段基址2000H 则给段寄存器赋值的指令序列为 MOVAX DATAMOVDS AX 名字 过程名 在源程序的过程定义语句中命名取定 汇编连接源程序时 系统分配给过程一

16、个地址 即该过程第一条指令所在内存单元的地址 亦即该过程的入口地址 这也就是调用该过程的CALL指令中的目的地址符号常量 在源程序的符号常量定义语句中命名取定 名字 例 部分程序内容为 DATASEGMENTARRAYDB10H 5AH 0C7H 98H ABCD COUNTEQU ARRAYMAXDB12HDATAENDS说明 表示该行的偏移地址 2 变量 内存单元地址的符号表示 具有以下五种属性 段基址格式 SEG符号名例 MOVAX SEGAA说明 SEGAA为立即寻址 是AA的段地址偏移地址格式 OFFSET符号名例 MOVSI OFFSETBB说明 OFFSETBB为立即寻址 是BB的偏移地址 变量 求符号名的类型值格式 TYPE符号名例 MOVAL TYPECC返回变量CC的类型的字节数 字节数据 TYPECC 1字数据 TYPECC 2双字数据 TYPECC 48字节数据 TYPECC 810字节数据 TYPECC 10标号 NEAR 0FFFFHFAR 0FFFEH 变量 长度属性格式 LENGTH符号名说明 只有当数据用赋值符DUP定义时 LENGTH才等于数组的元素

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

当前位置:首页 > 商业/管理/HR > 经营企划

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