汇编语言程序设计实践教程.ppt_第1页
汇编语言程序设计实践教程.ppt_第2页
汇编语言程序设计实践教程.ppt_第3页
汇编语言程序设计实践教程.ppt_第4页
汇编语言程序设计实践教程.ppt_第5页
已阅读5页,还剩313页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 教材 汇编语言程序设计实践教程欢迎提意见 参考书 汇编语言程序设计丁辉电子工业出版社 后半学期 微机接口技术及实验 是 微机原理与接口技术及实验 的一部分 汇编语言程序设计实践教程 汇编语言asm2005 微型计算机接口技术 张弥左 机械工业出版社微机实验讲义 硬件部分 2 目录 第一章汇编语言程序设计基础第二章汇编语言程序设计入门第三章算术运算程序第四章代码转换程序第五章系统调用程序第六章表处理程序第七章子程序及其与主程序参数传递 3 1 重要性2 特点3 学习方法4 考核要求 引言 4 1 重要性 专业基础课 电类 工科 理科有助于微机应用水平提高计算机等级考试 三级PC机技术研究生入学考试 5 2 特点 A B C 概念间关系 网状 理解困难 内容多 汇编语言 微机原理 接口技术 6 3 学习方法 理解与记忆 尽快适应预习与复习 学习效率实验与习题 针对性强分4层次 习题 必做实验 选做实验 思考题教与学 教 难点 要点 目的 让学生少走弯路 提高效率 学是关键 敢问 会问 7 4 考核要求 笔试 期中 期末 各35 笔试内容充分结合实验内容 平时 作业 考勤 态度 提问 30 作业 实验报告必须手写 实验 平时成绩的一部分预习 操作 报告 8 第一章汇编语言程序设计基础 1 1二进制数和十六进制数1 2无符号数和带符号数1 3微机基本原理1 48086CPU1 5DEBUG操作 一 1 6判断标志位实验1 7计算机中的十进制数及其运算原理1 8BCD码运算实验 9 1 1二进制数和十六进制数 日常生活 十进制 十二进制 六十进制计算机 二进制 十六进制 n位整数m位小数 Xn 1Xn 2Xn 3 X2X1X0X 1X 2 X m 1X m数学意义 X Xn 1 En 1 Xn 2 En 2 Xn 3 En 3 X2 E2 X1 E X0 X 1 E 1 X 2 E 2 X m 1 E m 1 X m E m 0 Xi E 1 E 10 16 2 10 1 1 1二进制数 计算中 8位 16位 32位 64位 例 10100101B 1001 0011 1111 0000B书写时 每4位用空格或逗号分隔 但源程序中不能 加 10111001 01111001100110010 减 10111001 0111011001000011不够减问题 11 被乘数左移相加法10111001 0111100110111001101110011011100110111001 101110010101011101110001 二进制数乘法运算 12 二进制数除法运算 除数右移试减法000000010011010010011010 1011100101011010 1001101011111010 1001101011000001 1001101010011110 10011010010010 加减乘除人工计算方法 硬件方法 编程方法有小数点 13 1 1 2十六进制数 源程序中采用 实际上也是二进制4位二进制 1位十六进制 0 9 A F例 0ABH 10101011B 0 0000B8 1000B1 0001B9 1001B2 0010BA 1010B3 0011BB 1011B4 0100BC 1100B5 0101BD 1101B6 0110BE 1110B7 0111BF 1111B必须熟记 加减 参照二 十进制列竖式乘除 转换为二进制用二进制运算转换为十六进制 14 1 1 3十进制与二 十六进制转换 1 十进制 二进制整数部分 除2取余法 已知X求Xn 1 X2X1X0 小数部分 乘2取整法 已知X求X 1X 2 X1 mX m 2 十进制 十六进制 方法1 先 二进制 再 十六进制方法2 整数部分 除16取余法小数部分 乘16取整法 3 二进制 十六进制 十进制 已知Xn 1 X2X1X0X 1X 2 X1 mX m求X 整数 小数部分都用 按幂展开 15 十进制转二进制举例 整数 除2取余100 50 0 B025 0 B112 1 B26 0 B33 0 B41 1 B50 1 B6 100 01100100B 小数 乘2取整0 568B 1 1 136B 2 0 272B 3 0 544B 4 1 088B 5 0 176B 6 0 352B 7 0 704B 8 1 408 0 568 0 10010001B可能无法完全精确转换 16 1 2无符号数和带符号数 计算机中同一个数可表示不同的实际值同一个实际值在计算机中有不同形式表示机器数 计算机中的二进制 十六进制真值 机器数所表示的实际数值 十进制 机器数 无符号数 带符号数带符号数 原码 反码 补码属于定点数 整数是定点数的特例计算机中数的表示和计算还有浮点数 17 1 2 1无符号数 8位 16位 32位 每位都是数值位8位 00000000B 11111111B025516位 0000H 0FFFFH065535 18 1 2 2带符号数 原码 8位 16位 32位 最高位是符号位 0 正 1 负其余每位都是数值位原码 低7位是表示绝对值11111111B0FFH 12710000000B80H 000000000B00H 001111111B7FH 127 19 反码 正数 与原码相同 负数 对应正数的原码每位取反10000000B80H 12711111111B0FFH 000000000B00H 001111111B7FH 127 20 补码 正数 与原码相同 负数 对应正数的原码每位取反 1 反码 1 10000000B80H 12811111111B0FFH 100000000B00H001111111B7FH 127 21 8位机器数与真值关系图 00H 7FH 80H FFH 真值 机器数 128 127 255 1 127 无原反补 无 原 补 反 0 128 模 28 16位 22 1 2 3真值与机器数转换 人工计算 真值转换为机器数 机器转换为真值 从机器数的定义分析 分三种情况讨论 1 无符号数与真值的转换2 正数真值与原码 反码 补码转换3 负数真值与原码 反码 补码转换 23 1 无符号数与真值转换 真值 无符号机器数 除2取余法 不足的位数补0例 200 11001000B 0C8H8位不够就用16位 16位不够就用32位 无符号机器数 真值 按幂展开 例 11010000B 0D0H 128 64 16 208 24 2 正数真值与原反补转换 与无符号差别仅最高位必须 0 转换方法与无符号数的方法相同 正数真值 原 反 补码机器数 除2取余法 结果最高位必须为0 例 120 01111000B 78H原 反 补码机器数 真值 按幂展开例 01101010B 6AH 64 32 8 2 106 25 3 负数真值与原反补转换 真值 机器数 先转为原码 反码 补码 负数真值 原码 将绝对值除2取余 最高位写1负数真值 反码 原码数值位取反 符号位不变负数真值 补码 在反码最低位上加1例 120 11111000B 10000111B 10001000B机器数 真值 机器数的最高位为1原码 真值 数值位按幂展开 加负号反码 真值 数值位每位取反后按幂展开 加负号补码 真值 数值位取反加1 按幂展开 加负号对任意二进制数B 等式 B 1 B 1成立 例 C8 72 原码 55 反码 56 补码 26 1 2 4机器数和真值关系 同一个真值有不同的机器数表示 同一个机器数可以表示不同的真值 27 1 2 5为什么用补码 1 减法转换为加法 A B A B 2 更重要的原因是 简化CPU硬件带符号数和无符号数的加减运算规则相同 求补码 真值转换为机器数 正数 十进制转为二进制负数 对应正数的二进制取反加1求补 对机器数操作 取反加1 正转为负 负转为正对任意二进制数B 0 B 2n B B 1 B 1 28 1 3微机基本原理 微机基本组成结构指令执行过程 29 1 3 1微机基本结构框图 CPU 存储器 I O接口 I O设备 AB地址总线 数据总线DB 控制总线CB 三条总线连接三大部件 AB位数决定存储容量 DB位数决定一次传送数据位数控制总线主要有 M IO RD 读 WR 写 数字电子计算机 30 1 3 2指令执行过程 冯诺依曼型计算机 存储程序计算机 一条指令的执行过程分4个步骤 取指 取数 译码操作 运算 存数指令的执行时间问题 程序装入主存 运行 控制权交回系统 高级语言程序由有序排列的语句组成 汇编语言程序由有序排列的指令组成 程序的运行过程就是指令执行的重复过程 31 取指 取数过程 AB送出地址 CB送出M IO RD 存储器从DB送机器码或数据 CPU从DB上读入 CPU 存储器 I O接口 AB DB CB 32 存数过程 I O接口的操作 输入 输出原理与存储器读 写相同 AB送出地址 DB送出数据 CB送出M IO WR 存储器从DB读入数据 CPU 存储器 I O接口 AB DB CB 33 1 48086CPU CPU是微机的核心 最关键的部件 重点掌握 与汇编语言编程密切相关的内容内部寄存器及其用法标志寄存器 34 1 4 1微处理器概述 8位 8080 8085 8088Intel80 x86系列 向上兼容16位 8086 80186 8028632位 80386 80486 Pentium 64位 双核 4核 微控制器 单片机 控制应用MCS51 PIC8位为主DSP芯片信号处理TMS32016位为主嵌入式微处理器移动设备ARM32位为主通用微处理器台式微机Z80 80X8632位为主 CPU 微处理器 应用不同有4个分支 35 1 4 28086内部结构 寄存器组 段寄存器指令指针 总线控制逻辑 指令队列 总线接口单元BIU 执行单元EU 标志寄存器 ALU 外部总线 内部总线 地址加法器 控制单元 20位地址 16位数据 元件级 门电路级 框图级 前后联系理解 ABDBCB ALU算术逻辑单元 36 1 4 38086寄存器 AX累加器Accumulator BX基址寄存器Base CX计数寄存器Count DX数据寄存器Data 源变址寄存器SourceIndex 目的变址寄存器DestinationIndex 基址指针BasePointer 堆栈指针StackPointer 代码段寄存器CodeSegment 数据段寄存器DataSegment 堆栈段寄存器StackSegment 扩展段寄存器ExtraSegment 指令指针InstructionPointer 标志寄存器 数据寄存器 变址 指针 通用寄存器 段寄存器 32位 EAXEBXECXEDXESIEDIEBPESPEIPEFLAGS段寄存器FSGS 16位8位8位 PC程序计数器 控制寄存器 37 1 4 4标志寄存器 1 0 条件标志 6个 在运算器中控制标志 3个 控制电路中 IF 中断允许标志 CPU可屏蔽中断用DF 方向标志 串操作指令用TF 跟踪 单步 陷井 标志 调试程序用 在调试软件DEBUG中用2个字母表示 38 条件标志 1 PF 奇偶标志 用于传送数据时的校验计算结果的低8位1的个数为偶数 则PF 1否则 PF 0 ZF 零标志 用于减运算时判断相等逻辑运算时判断全0计算结果为0 则ZF 1 不为0 则ZF 0 AF 辅助进位 借位标志 用于BCD码计算加运算时D3位向D4位有进位或减运算时D3位向D4位有借位 则AF 1否则AF 0 39 条件标志 2 CF 进位 借位标志 用于无符号数加 减运算 多字节运算的进位 借位传递计算时最高位有进位 借位 则CF 1否则CF 0 SF 符号标志 用于带符号数运算计算结束为负则SF 1 为正则SF 0 OF 溢出标志 用于带符号数运算计算结果超出带符号数的表示范围 则OF 1否则OF 08位 128 127 16位 32768 32767 CF CF 40 标志位判断举例 加 1111 0100 1111 0100 1 1110 1000 12 12 24 244 244 488 232 256 PF 1 ZF 0 AF 0 CF 1 SF 1 OF 0 1110 1000 24 1110 1000 232 CPU运算 分析 带符号 无符号 带符号数的符号位也当成数值位参加计算 41 标志位判断举例 减 1111 0100 0000 1100 0 1110 1000 12 12 24 244 12 232 PF 1 ZF 0 AF 1 CF 0 SF 1 OF 0 1110 1000 24 1110 1000 232 CPU运算 分析 带符号 无符号 特别注意区别CF和OF 42 CF OF判断举例 加 CF 0 SF 1 OF 1 1110 1000 24 错 1110 1000 232 CPU运算 0111 0100 0111 0100 0 1110 1000 116 116 232 116 116 232 分析 带符号 无符号 OF 1 则带符号数的运算结果是不正确的 43 CF OF判断举例 减 CF 1 SF 1 OF 0 1100 0000 64 1100 0000 192 52 256 116 CPU运算 0011 0100 0111 0100 1 1100 0000 52 116 64 52 116 分析 带符号 无符号 注意理解 无符号数小减大的情况 44 理解机器数运算问题 标志位是加减计算结果的一部分无符号数运算看CF 带符号数运算看SF OF编程者知道是带符号数还是无符号数 CPU不知道是带符号数还是无符号数 两种情况要各算一遍 提供结果给编程者按前例的分析 带符号数若用补码表示 实际上只算一遍 硬件只有一套这是带符号数用补码表示的根本原因 注意 多字节带符号的进 借位传递还是用CF 45 1 4 5判断OF三方法 OF标志最复杂 最重要 理解带符号及其计算 难点 三种方法 等效人工判断 计算机判断以加法为例 减法同理可推 46 1 按OF定义判断 被加数 加数转为真值后相加 再用真值的和判断 128 127 32768 32767这是人工的方法 计算机中不可能用 前面3个例子都是用了这种方法缺点 计算过程麻烦 容易出错 47 2 按符号位判断 被加数 加数的符号 和的符号 若正 正 正则OF 0 若正 正 负则OF 1若负 负 负则OF 0 若负 负 正则OF 1若正 负 正 负则OF 0前面的例子用这种方法判断结果一样这是人工的方法 看似繁琐 实际最简单计算机中也可用 但硬件不够简化 48 OF的数学意义 000H 40H64 80H 128 64C0H 7FH127 1FFH 机器数 00H 40H 7FH 80H C0H FFH 00H真值 064127 128 64 10 右半圆正数 左半圆负数 ALU位数有限 8位 8位 8位加一个正数实际上 从一个点顺时针走到另一点加一个负数实际上 从一个点逆时针走到另一点 49 最高位 次高位的进位 都有或都没有进位 则OF 0一个有一个没有 OF 1前面的例子用这种方法判断结果一样关键是理解符号位的特殊性是CPU中硬件采用的方法 人工也可采用 也可转化为双符号位法 1 1111 0100 1 1111 01001 1110 1000 3 按最高次高位进位判断 50 1 4 6标志位小结 人工判断标志位是为了掌握其原理 程序运行时标志位是由硬件自动判断的 编程的任务是根据这些标志位做不同的处理 充分利用标志位编出高水平算法是汇编语言程序设计的重要技巧 不同CPU标志位不同 但原理完全相同 标志位是一切逻辑推理的基础 现代CPU增加了很多控制标志位 但条件标志位数量没增加 没有新的概念和原理 51 1 5DEBUG操作 一 系统的内部命令 不必复制或安装 主要功能 显示修改寄存器值 显示修改内存单元内容单步运行程序 断点运行程序显示程序 修改部分指令命令 一个字母 后跟参数P18表1 8通过实验熟练掌握 52 1 6判断标志位实验 预习 人工计算和判断标志位 用ADDAL BL 8位加 标志位 用SUBAL BL 8位减 标志位 16位加减 判断CF SF OF 必做 注意 用ADDAX BX和SUBAX BX思考题前3题必做 53 1 7BCD码及计算 计算机只能用二进制 对十进制 十进制 二进制 计算后 十进制有否更简单的方法表示和计算十进制数 计算机如何表示十进制数 BCD码计算机如何计算十进制数 计算后调整 54 1 7 1BCD码 二进制编码的十进制数真值98压缩型10011000B 98H非压缩型0000100100001000B 0908H比较 用无 带符号二进制表示 62H机器数98H表示的真值 无符号数152 带符号 补码 数 104压缩型BCD码98 0 0000B1 0001B2 0010B3 0011B4 0100B5 0101B6 0110B7 0111B8 1000B9 1001BP3表1 2 55 1 7 2BCD码的运算 加 先按二进制加 ADD 再调整 DAA AAA 减 先按二进制减 SUB 再调整 DAS AAS 乘 先按二进制乘 MUL 再调整 AAM 除 先调整 AAD 再按二进制除 DIV 调整指令共有6条 见P27表1 12分别与相应的二进制运算指令配合 两条指令执行的总效果是 对BCD码运算 得的结果也是BCD码 56 BCD码加举例 DAA压缩型BCD码加调整AAA非压缩型BCD码加调整跟在以AL为目的的ADD ADC指令之后AL 45H BL 67H 必须是压缩型BCD码ADDAL BL AL 0ACH CF 0 AF 0DAA AL 12H CF 1 AF 1AL 05H BL 05H 必须是非压缩型BCD码ADDAL BL AL 0AH CF 0 AF 0AAA AL 00H CF 1 AF 1 57 BCD码减举例 DAS压缩型BCD码减调整AAS非压缩型BCD码减调整跟在以AL为目的的SUB SBB指令之后AL 47H BL 65H 必须是压缩型BCD码SUBAL BL AL 0E2H CF 1 AF 0DAS AL 82H CF 1 AF 0AL 05H BL 09H 必须是非压缩型BCD码SUBAL BL AL 0FCH CF 1 AF 1AAS AL 06H CF 1 AF 1 58 BCD码乘除举例 AAM非压缩型BCD码乘调整 跟在8位MUL之后AAD非压缩型BCD码除调整 放在16位除8位的DIV指令之前AL 05H BL 09H 必须是非压缩型BCD码MULBL AH 00H AL 2DHAAM AH 04H AL 05HAH 05H AL 02H BL 06H 必须是非压缩型BCD码AAD AH 00H AL 34HDIVBL AL 08H AH 04H 59 1 8BCD码运算实验 预习 人工计算 DAA AAM AAD用ADDAL BL DAA 二进制加 BCD码加用MULBL AAM 二进制乘 BCD码乘用AAD DIVBL BCD码除AAA DAS AAS的验证 必做 思考题 带符号BCD码 60 第二章汇编语言程序设计入门 2 1寻址方式2 2数据传送指令2 3汇编语言源程序结构2 4汇编语言程序上机过程2 5指令错误分析及寻址方式实验 61 2 1寻址方式 指令由操作码和操作数两部分组成 寻址方式 如何指定操作数ADDAL BX 操作数组合三种情况 双操作数 单操作数 无操作数 隐含 双 目的操作数 源操作数 操作数存放的三个位置 CPU中 存储器中 I 0接口中 两种性质的操作数 用来运算的数据 转移的目的地址 62 2 1 1隐含寻址 指令只有操作码 没指定操作数 根据操作码就可以确定相应的操作数 例 BCD码运算调整指令 DAA 对AL中的数进行计算调整乘法 除法指令的其中一个操作数MULBL AL BL AH ALDIVBL AX BL AL AH 63 2 1 2立即寻址 指令中直接给操作数 立即 数 寻址用data表示 8位或16位例 ADDAL 50HADDAL CNT CNT是符号常量执行过程不需取数的时间只能用在源操作数 64 2 1 3寄存器寻址 指令中给出寄存器名称 其内容是操作数用reg表示 AX BX CX DX SI DI BP SPAH AL BH BL CH CL DH DL例 ADDAL BL机器码中寄存器编号用3位编码 字或字节用1位编码 65 2 1 4段寄存器寻址 指令中给出段寄存器名称 其内容是操作数用segreg表示 DS ES SS CS例 MOVDS AX机器码中段寄存器编号用2位编码 只有MOV PUSH POP指令可用此寻址方式 66 2 1 5I O端口寻址 操作数在I O接口电路中 仅IN OUT指令直接I O端口寻址 用port表示 8位间接I O端口寻址 用DX表示 16位例 INAL 50H 50H不是立即寻址 OUTDX AL DX不是寄存器寻址 端口 存储单元 端口号 存储单元地址 67 2 1 6转移地址寻址 转移类指令中用直接转移 用标号直接指定目的地址间接转移 用寄存器 内存内容指定目的地址段内 目的地址与转移指令在同一段中段间 目的地址与转移指令不在同一段中例 JMPNEXT NEXT是一个标号JMPBX BX的内容是目的地址 68 2 1 7存储器操作数寻址 操作数在存储器中 指令中指定其地址是用得最多 最灵活的一种寻址方式物理地址20位 逻辑地址16位物理地址 段地址 10H 偏移地址例 16661H 1234H 10H 4321H用mem表示偏移地址 BX BP SI DI 方括号段地址固定搭配 DS SS ES CS 段首址 段地址 10H 能被16整除 12340H 4321H16661H 实地址模式保护模式虚拟86模式 69 存储器分段结构 设 段地址 1234H则 段首址 12340H段末址 12340H FFFFH2233FH一个段最大64K 物理地址 1234H FFFFH逻辑地址段地址 偏移地址1234H 0004H1234H 0003H1234H 0002H1234H 0001H1234H 0001H 存储器地址地址中内容 8位二进制字节 字 双字 70 1 直接寻址 用变量名指定操作数的地址例 ADDAL Xval 方括号可省略Xval是变量名 注意与立即寻址的区别 ADDAL 20H 20H会被汇编成立即数段地址固定搭配DS 偏移地址也称为有效地址EA物理地址 DS 10H EADS EA 71 2 寄存器间接寻址 用一16位寄存器指定操作数地址BX SI DI BP之一BX SI DI搭配DS BP搭配SSDS BX SI DI 或SS BP 例 ADDAL BP ADD SI AX 72 3 寄存器相对寻址 一16位寄存器加位移量指定操作数地址BX SI DI BP之一 位移量为8位或16位带符号数 D8 D16 BX SI DI搭配DS BP搭配SS例 ADDAL BP 5 若用SI DI也称为变址寻址 若用BX BP也称为基址寻址 73 4 基址变址寻址 基址寄存器加变址寄存器指定操作数地址基址 BX BP之一 变址 SI DI之一BX搭配DS BP搭配SSDS BX SI DI SS BP SI DI 例 ADDAL BP SI 74 5 相对基址变址寻址 基址加变址加位移量指定操作数地址基址 BX BP之一 变址 SI DI之一位移量为8位或16位带符号数 D8 D16 BX搭配DS BP搭配SSDS BX SI DI D8 D16 SS BP SI DI D8 D16 例 ADDAL BP SI 5 75 6 存储器操作数使用 共5种 物理地址由地址加法器自动计算段替换 例 DS BP ES BX 多字节 低地址低字节 高地址高字节最低字节的地址就是多字节数的地址规则字 从偶地址开始存放 一个总线周期非规则字 从奇地址开始存放 两个总线周期数组操作 首地址 前一元素 后一元素 1 2等效写法 BUF BX SI BUF BX SI BUF BX SI 双操作数不能同为存储器操作数寻址方式越复杂 则执行时间越长 76 2 2数据传送指令 每条指令都要了解六个方面的内容 掌握 1 基本功能用途2 寻址方式组合3 对标志位影响 有影响无影响不确定 一般了解 4 执行时间5 字节数6 机器码格式 8086指令系统分六大类指令 1 数据传送2 算术运算3 逻辑运算和移位 4 程序流程控制5 串操作6 CPU控制 77 2 2 1通用数据传送指令 MOVdst src 复制 目的 源合法寻址方式组合分为四种情况 reg mem data reg memmem reg reg reg segreg reg16 mem16reg16 mem16 segreg其它双操作数指令与这4种组合比较 使用最频繁指令data不能为目的字节 字类型必须匹配MOVBYTEPTR BX 20HCS不能为目的IP源目的都不行 78 MOVreg mem data MOVAL 01011010B 为8位寄存器MOVBX 34H 为16位寄存器MOV XVAL 5000 直接寻址MOVBYTEPTR BX 50 寄存器间接寻址MOVWORDPTR BP 5 0ABH 寄存器相对寻址MOV BX SI ABCD 错 基址变址寻址MOV BP DI 5 0ABCDH 相对基址变址寻址 错 MOV34H ALMOVAH 1234HMOVAX 12345HMOV SI 123 79 MOVreg memMOVmem reg MOVBL XVAL 字节 寄存器 直接寻址MOVBX SI 字 寄存器 间接寻址MOV BX SI CL 字节 基址变址寻址 寄存器MOV BX 5 CX 字 寄存器相对寻址 寄存器 80 MOVreg reg 正确 MOVDL ALMOVDX CX 错误 MOVAX BLMOVDL CX 81 MOVreg mem segregMOVsegreg reg mem MOVDS AXMOVBX SSMOVES BX MOV BP CS MOVAX DATAMOVDS AX 错误 MOVAX IPMOVIP BXMOVCS BXMOVX2 X1 MOVAX X1MOVX2 AX 82 2 2 2交换指令 XCHGdst src dst src操作数组合 MOV指令4种中的 两种 即 reg memmem regreg reg 例 XCHGAX BXXCHGAL AHXCHG BX AXXCHGAL BP SI 错 XCHGAL BXXCHGAL 12HXCHGAX DSXCHG BX SI 83 2 2 3堆栈操作指令 堆栈 FILO 先进后出 的存储区域入栈 PUSHsrc SP SP 2 SS SP src出栈 POPdst dst SS SP SP SP 2src dst reg16 mem16 segreg POPCS除外 下推式堆栈PUSH POP应成对出现 操作数顺序相反 84 堆栈操作举例 设 SS 5430HSP 0020HAX 1234HBX 5678H执行 PUSHAXPUSHBXPOPAXPOPBX结果 AX 5678HBX 1234H 顶 底 SP 20H SP 1EH SP 1CH SP 0 85 2 2 4查表指令 也称为换码指令 表格最大256字节 字节操作XLAT AL DS BX AL XLATsrc tablesrc table是表格首地址的变量名 可省略缺省段寄存器是DS 可以段替换若src table不在数据段 汇编时自动加段替换特殊的寻址方式 或隐含寻址累加器专用指令 大表 MOVAL BX SI 字 MOVAX BX SI 86 2 2 5输入输出指令 累加专用指令唯一能对I O接口中操作数操作的指令与MOV指令原理一样 87 2 2 6地址传送指令 1 有效地址传送指令LEAreg16 mem reg16 mem的偏移地址例 LEABX Xval等效于MOVBX offsetXvalLEASI BX DI SI BX DI 2 地址指针传送指令LDSreg16 mem32 reg16 mem32 DS mem32 2 LESreg16 mem32 reg16 mem32 ES mem32 2 88 2 2 7标志位传送指令 隐含寻址 唯一对FLAGS操作的指令取标志 LAHF AH FLAGS低8位置标志 SAHF FLAGS低8位 AH标志入栈 PUSHF SP SP 2 SS SP FLAGS标志出栈 POPF FLAGS SS SP SP SP 2 89 2 2 8数据传送指令对标志位的影响 POPF SAHF对标志位有影响其余数据传送指令均对标志位无影响 理解数据传送指令与总线信号关系 M IO RD WRMOVAL BX M RDMOV BX AL M WRINAL DX IO RDOUTDX AL IO WR 90 2 3汇编语言源程序结构 分段结构伪指令段名标号宏名 DATASEGMENT定义变量DATAENDSEXTRASEGMENT定义变量EXTRAENDSSTACKSEGMENT定义堆栈STACKENDSMAC1MACRO宏定义体ENDM CODESEGMENTASSUMECS CODE DS DATAES EXTRA SS STACKSTART 段寄存器初始化CALLSUB1MAC1 宏调用 MOVAH 4CH 返回DOSINT21HSUB1PROC RETSUB1ENDPCODEENDSENDSTART 91 2 3 1分段结构 一般分4个段 SEGMENT ENDS数据段 扩展段 堆栈段 定义数据代码段 ASSUME确定各段的性质 起始地址定义标号 最后ENDSTART 段寄存器赋初值 CS除外 MOVAH 4CH INT21H返回系统宏定义MACRO ENDM 宏调用子程序 过程 PROC ENDP一般放在主程序后程序的层次结构用锯齿状表示 92 2 3 2语句格式 三种语句 指令语句 汇编时能生成机器码伪指令语句 指示性语句 提供汇编 链接信息宏指令语句语句格式 标号 操作码目的操作数 源操作数 注释变量伪操作操作数 操作数 注释标号 宏指令名实际参数 注释 93 2 3 3变量和标号 标识符 变量 标号 符号常量 段名 过程名 宏名保留字 指令操作码 伪指令操作码 寄存器名等大小写不敏感标号只能在代码段中定义 变量可在任何段中定义变量和标号的三种属性 段地址 偏移地址 类型变量类型 BYTE WORD DWORD等标号类型 NEAR FAR指令伪指令中 当变量 标号当操作数用变量汇编成直接寻址或相对寻址标号在跳转指令中用 直接寻址 94 2 3 4操作数 表达式和操作符 操作数 寄存器 变量 标号 常量 表达式表达式 用操作符连接变量 寄存器 常量等汇编时对表达式进行计算 数值表达式 立即数 位移量 常数的位置地址表达式 存储器操作数的位置操作符 算术 逻辑 关系 分析 属性 95 操作符 算术 MOD地址 常数 同一段中的地址1 地址2逻辑 NOT AND OR XOR SHR SHL只能对数值操作 不能对地址操作关系 EQ NE GT LT GE LE 假 0 真 FF或FFFF同一段中的两地址可比较 比地址不是比内容分析 SEG OFFSET TYPE LENGTH SIZE段 偏移地址类型 个数 总字节数变量 1 2 4标号 1 2属性 HIGH LOW SHORT PTR THIS 段操作符高字节 低字节 短 变类型 变类型 段替换自行实验试用 以后陆续会有一些应用的例子 96 2 3 5常用伪指令 定义符号 也称表达值赋值伪指令 名称EQU表达式 不可重新定义名称 表达式 可重新定义方便程序修改 使用常数 表达式意义清晰 数据定义 按地址顺序存入各段变量伪操作符表达式 表达式 变量伪操作符重复次数DUP 表达式 DB 字节 DW 字 DD 双字 DQ 8 DT 10 DW可定义偏移地址 DD可定义段地址和偏移地址可用 表示一个未置初值的数据 97 汇编语言程序设计方法 1 分析问题 明确要求 2 建立数学模型 3 确定算法和处理方案 4 画流程图 5 编制程序 划分模块 分配寄存器 存储单元 6 上机调试 含汇编连接 模块调试 整体调试 7 试运行和分析结果 8 整理文档 交付使用强调 程序调试的重点性 上机 98 2 4上机过程 1 编辑 EDIT文件名 ASM2 汇编 MASM文件名 用 ASM 源文件 生成 OBJ 目标文件 也可生成 LST 列表 CRF 交叉引用 3 连接 LINK文件名 用 OBJ文件生成 EXE 可执行文件 也可生成 MAP 存储映象 还可使用 LIB 库文件 4 调试 DEBUG文件名 EXE按每个模块 子程序 的输入输出关系检查最关键的一步 花费最多时间 99 2 5指令错误分析及寻址方式实验 预习 1 判断指令错误类型 2 伪指令数据分配 指令执行结果必做 1 编辑 汇编 读懂错误信息 2 完整程序 观察数据如何存储 各种寻址方式执行结果 选做 1 生成并观察LST CRF MAP文件2 对LEA LDS LES指令验证3 验证各指令对标志位的影响情况4 验证各种操作符思考 1 以后指令有错必须搞清 不得重犯 2 以后指令格式 功能之惑都可验证 验证也是一种学习过程 100 寻址方式实验程序 1 DATASEGMENTA1DW1234HA2DB 1 0ABHDW 5A3DB56 56H ABcd DATAENDSEXTRASEGMENTB1DB1 2 3 4B3EQUTHISBYTEB2DWA2DDA3DB A3 A2 2DB B1DBLENGTHBTMEXTRAENDS STACKSEGMENTBTMDW16DUP STACKENDS 101 寻址方式实验程序 2 CODESEGMENTASSUMECS CODE DS DATA ES EXTRA SS STACKSTART MOVAX DATAMOVDS AXMOVAX EXTRAMOVES AXMOVAX STACKMOVSS AXMOVSP SIZEBTM 102 寻址方式实验程序 3 MOVAX A1 3 分析 AH AL 验证 AH AL MOVAX B2 分析 AH AL 验证 AH AL MOVBP OFFSETA1MOVAX BP 分析 AH AL 验证 AH AL MOVAX DS BP 分析 AH AL 验证 AH AL MOVAX ES BP 分析 AH AL 验证 AH AL MOVBX OFFSETA1MOVAX BX 3 分析 AH AL 验证 AH AL MOVAX ES BX 3 分析 AH AL 验证 AH AL PUSHAX 分析 SP SS SP 验证 SP SS SP PUSHBX 分析 SP SS SP 验证 SP SS SP POPAX 分析 SP AX 验证 SP AX POPBX 分析 SP BX 验证 SP BX MOVBX OFFSETB2MOVAL 6XLAT 分析 AL 验证 AL XLATB3 分析 AL 验证 AL 103 第三章算术运算程序 引言 程序结构 顺序 分支 循环 子程序用 无条件跳转指令 条件跳转指令程序功能 算术运算 代码转换 系统调用 表处理 子程序参数传递 编程方法 分配寄存器 存储单元 本书有丰富的实用的实例 理解 掌握编程技巧 程序调试 检查程序的正确性的过程 必不可少的一步 最重要的一步 104 3 1跳转指令3 2算术运算指令3 3多字节加 减运算程序3 4多字节加 减程序实验3 5多字节除法运算程序3 6多字节除法程序实验3 7多字节乘法运算程序3 8多字节乘法程序实验 第三章算术运算程序 目录 加减乘除N 平方开平方 二进制BCD码 105 3 1跳转指令 实现分支结构和循环结构分 无条件跳转 条件跳转 循环控制对标志位均不影响基本功能 修改IP CS 106 段内直接跳转 JMPnear label IP IP D16段内短跳转 JMPSHORTshort label IP IP D8段间直接跳转 JMPfar label IP 标号的偏移地址CS 标号的段地址相当于高级语言的GOTO语句 3 1 1无条件跳转指令 段内间接跳转 JMPreg16 mem16 IP reg16 mem16例 JMPBXJMP BX 段间间接跳转 JMPmem32 IP mem32 mem32 1 CS mem32 2 mem32 3 107 直接跳转指令举例 CODESEGMENTASSUMECS CODESTART JMPSTART 短JMPEXIT 内JMPEXIT1JMPSHORTEXITJMPNEARPTREXITJMPFARPTREXIT 间JMPFARPTREXIT2EXIT MOVAH 4CHINT21H ORG200HEXIT1 MOVAH 4CHINT21HCODEENDSCODE1SEGMENTASSUMECS CODE1EXIT2 MOVAH 4CHINT21HCODE1ENDSENDSTART 108 直接跳转指令机器码 如何察看偏移地址200H开始的指令及CODE1段 109 间接跳转指令举例 段间间接跳转 设 BX 1234H DS 1000H 11234H 5678H 11236H 9ABCH 若 执行JMP BX 则IP 5678H CS 9ABCH 即程序跳到段地址为9ABCH 偏移地址为5678H的地址处继续执行 段内间接跳转 设 BX 1234H DS 1000H 11234H 5678H若 执行JMPBX 则IP 1234H 即目的地址为1234H 若 执行JMP BX 则IP 5678H 即目的地址为5678H 110 一般格式 Jcccshort label 条件成立则跳 否则顺序执行 要跟在影响标志位的指令之后 D8 128 127 相当于高级语言中的IFTHENELSE结构 3 1 2条件跳转指令 多分支结构要用多条条件跳转指令组合实现 111 JCshort label CF 1 则跳 JB JNAEJNCshort label CF 0 则跳 JNB JAEJZshort label ZF 1 则跳 JEJNZshort label ZF 0 则跳 JNEJSshort label SF 1 则跳JNSshort label SF 0 则跳JOshort label OF 1 则跳JNOshort label OF 0 则跳JPshort label PF 1 则跳 JPEJNPshort label PF 0 则跳 JPO无AF的条件跳转指令 单个标志位的条件跳转指令 112 LOOPshort label CX CX 1 若CX 0则跳转LOOPZshort label CX CX 1 若CX 0且ZF 1则跳转LOOPEshort label LOOPNZshort label CX CX 1 若CX 0且ZF 0则跳转LOOPNEshort label JCXZshort label 若CX 0则跳转 3 1 3循环控制指令 相当于高级语言的DOUNTIL结构 113 循环指令原理 控制循环结束的条件 计数 条件 要注意循环结束条件设置 不能死循环 双重循环 不能交叉 结束条件完全无关 114 3 2算术运算指令 二进制 BCD码 加 减 乘 除3 2 1二进制运算指令3 2 2BCD码调整指令 115 一般加 减ADDdst src dst dst srcSUBdst src dst dst src 带CF加 减ADCdst src dst dst src CFSBBdst src dst dst src CF 比较CMPdst src dst src 寻址方式组合 对6个条件标志位均有影响 3 2 1二进制运算指令加 减指令 实际上涉及两个CF 116 2 判断两数大小 无符号 CF 0 则dst src CF 1 则dst src带符号 正 负 正 SF 0 OF 0 正 正 正 SF 0 OF 0负 SF 1 OF 1 负 SF 1 OF 0负 正 负 SF 1 OF 0 负 负 负 SF 1 OF 0正 SF 0 OF 1 正 SF 0 OF 0 OF SF相同 则dst src OF SF不同则dst srcOF SF 0 则dst src OF SF 1 则dst src 1 判断两数是否相等 无符号带符号方法相同ZF 1 则dst src ZF 0 则dst src CMPdst src后 根据标志位判断两数相等和大小 两数比较大小 117 加1 减1指令 INCdst dst dst 1DECdst dst dst 1对CF无影响 用于修改地址指针 计数dst reg mem 例 多字节加 减循环 MOVCX 4CLCNEXT MOVAL SI ADCAL DI MOV BX ALINCSIINCDIINCBXDECCXJNZNEXT CF xx xx xx xx SI xx xx xx xx DI xx xx xx xx BX 118 NEGdst dst 0 dstCF是借位标志 dst reg mem 0 dst dst 1求补就是求负 即正转为负 负转为正 绝对值不变 问题 多字节如何求补 求补指令 119 乘法指令 两种操作数 8位 8位 16位 16位 16位 32位无符号乘法 MULsrc AX AL 8位srcDX AX AX 16位src若AH或DX为0 则OF CF 0带符号乘法 IMULsrc 若AH或DX为低一半的符号扩展 则OF CF 0src reg mem 除CF OF外的标志位不确定 理解无符号乘法 带符号数乘法的硬件实现为什么加 减指令不分无符号 带符号 乘除指令要分 如何计算一个无符号数与一个带符号数相乘 除 120 16位 8位 商8位 余数8位 32位 16位 商16位 余数16位无符号除 DIVsrc AX 8位src AL 商 AH 余数DX AX 16位src AX 商 DX 余数带符号除 IDIVsrc 余数符号与被除数相同操作数 src reg mem 标志位均不确定 商超出范围则产生0号中断 被除数高8或16位必须比除数小 理解无符号除法 带符号数除法的硬件实现 符号扩展指令 不影响标志位字节扩展为字 CBW 若AL最高位为1则AH 0FFH 否则AH 0字扩展为双字 CWD 若AX最高位为1则DX 0FFFFH 否则DX 0例 127 7FH 007FH 128 80H FF80H 除法指令 121 3 2 2BCD码运算调整指令 DAA压缩型BCD码加法调整AAA非压缩型BCD码加法调整DAS压缩型BCD码减法调整AAS非压缩型BCD码减法调整AAM非压缩型BCD码乘法调整AAD非压缩型BCD码除法调整用法在1 7 2中已讲解 本节讲解调整原理 即硬件原理 122 压缩型加法调整 OF标志不确定 其余有影响DAA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论