微机原理与接口技术第3章sy.ppt_第1页
微机原理与接口技术第3章sy.ppt_第2页
微机原理与接口技术第3章sy.ppt_第3页
微机原理与接口技术第3章sy.ppt_第4页
微机原理与接口技术第3章sy.ppt_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

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

文档简介

1 杭州电子科技大学生仪学院 微机原理与接口技术 2 第二章内容回顾 3 第二章重点之一 8086CPU内部结构 4 第二章重点之二 8086CPU引脚及功能 最小模式 8086区别 5 第二章重点之三 逻辑地址的组成 段基址 偏移地址物理地址的形成 段基址 16 偏移地址 存储器的分段管理 6 8086系统 第二章重点之四 存储器的分体结构 7 第二章重点之五 堆栈的概念及工作过程 8 第二章重点之六 最小模式系统 组成 与最大模式系统的区别 14 31 36 9 读总线周期 动画 第二章重点之七 8086最小模式下的CPU工作时序 基本概念 复位 启动时序 读 写时序 系统的复位与启动 动画 10 第三章8086的寻址方式和指令系统 8086的寻址方式微机系统指令的机器码表示方法8086的指令系统 内容提要 11 3 18086的寻址方式 概述 3 18086的寻址方式 概述 计算机的指令包括 操作码 操作数 操作的性质操作的对象 存放在寄存器 存储器 I O端口地址 立即数 由寻址方式决定 寻址方式 指令中说明操作数所在地址的方法 指令分类 单操作数 双操作数 无操作数 双操作数指令形式 操作码目的操作数 源操作数 12 3 18086的寻址方式 概述 各种寻址方式指令执行速度不同 操作数在寄存器中指令执行速度快 在CPU内部立即执行 立即数寻址指令执行速度较快 直接从指令队列中取数 操作数在存储器中指令执行速度较慢 通过总线与CPU交换数据 CPU进行读 写存储器的操作 把一个偏移量送到BIU 计算出20位物理地址 执行总线周期存取操作数 13 3 18086的寻址方式 概述 寻址方式举例 14 3 18086的寻址方式 概述 8086指令的寻址方式类型 一 立即寻址方式二 寄存器寻址方式三 直接寻址方式四 寄存器间接寻址方式五 寄存器相对寻址方式六 基址变址寻址方式七 相对基址变址寻址方式八 其它 15 3 18086的寻址方式 立即寻址方式 一 立即寻址方式 ImmediateAddressing 1 含义 操作数是立即数 即8位或16位的常数 直接包含在指令中 2 特点 翻译成机器码时 立即数是指令的一部分 紧跟在操作码之后存放在代码段内 在取出指令的同时也就取出了操作数 立即有操作数可用 所以称之为立即寻址 l6位数 高字节 代码段的高地址单元 低字节 低地址单元 3 作用 常用于给寄存器赋初值 16 3 18086的寻址方式 立即寻址方式 例MOVCX 2A50H解 将立即数2A50H送到CX寄存器中 又例 MOVCL 20H 4 注意 立即数可以送到寄存器 一个存储单元 8位 两个连续的存储单元 16位 中去 立即数只能作源操作数 不能作目的操作数 以A F打头的数字出现在指令中时 前面必须加数字0 以免与其它符号相混淆 如 0AF22H MOVCX 2A50H 17 3 18086的寻址方式 寄存器寻址方式 二 寄存器寻址方式 RegisterAddressing 1 含义 操作数包含在寄存器中 寄存器的名称由指令指定 2 特点 16位操作数 寄存器可以是AX BX CX DX SI DI SP和BP等 8位操作数 寄存器AH AL BH BL CH CL DH和DL 3 作用 寄存器之间传递数据 例MOVDX AX解 AX 送到CX寄存器中 AX内容不变 又例 MOVBL AL 4 注意 源操作数的长度必须与目的操作数 致 注 以下寻址方式下 指令的操作数在存储器中 要先求物理地址才能获得操作数 18 3 18086的寻址方式 直接寻址方式 三 直接寻址方式 DirectAddressing 1 含义 存储单元的有效地址EA 即 操作数的偏移地址 直接由指令给出 2 特点 机器码中 有效地址存放在代码段中指令的操作码之后 而该地址单元中的数据总是存放在存储器中 须先求出操作数的物理地址 再从存储器中取得操作数 操作数的物理地址 16 DS EA3 作用 实现对存储单元的读 写操作 19 3 18086的寻址方式 直接寻址方式 例MOVAX 2000H 解 设DS 3000H 且有 32000H 1234H由指令得 有效地址EA 物理地址 则 AX 指令执行过程如图所示 注 如用AL替代AX 则AL 2000H 16 3000H 2000H 32000H 1234H 34H 20 3 18086的寻址方式 直接寻址方式 4 注意 DS 默认的段寄存器 指令中有效地址的表示 立即数 以便与立即数相区别 关于段超越前缀 有效地址前用 称为修改属性运算符 修改运算属性 可对代码段 CS 堆栈段 SS 或附加段 ES 寄存器所指出的存储区直接寻址 例 MOVAX ES 3000H 物理地址 16 ES 3000H 关于符号地址 用来代替数值地址 即给存储单元起个名字 例 AREA1DW1234H 伪指令定义 MOVAX AREA1 解 DS 3000H 偏移地址AREA1 2000H时 例 AREA1EQU2000H 伪指令定义 MOVAX AREA1 解 AX 2000H AX 1234H 如右图所示 等价于 MOVAX AREA1 21 3 18086的寻址方式 寄存器间接寻址方式 四 寄存器间接寻址方式 RegisterIndirectAddressing 1 含义 操作数的有效地址放在寄存器中 2 特点 使用寄存器 基址寄存器BX BP 变址寄存器SI DI 操作数的物理地址 16 DS BX SI DI或 16 SS BP3 作用 有效地址可以存放在寄存器中 22 3 18086的寻址方式 寄存器间接寻址方式 例MOVBX SI 解 设 DS 1000H SI 2000H 12000H 318BH则 物理地址 指令执行后 BX 指令执行过程如图所示 16 DS SI 10000H 2000H 12000H 318BH 23 4 注意 寄存器名称外必须加方括号 以区别寄存器寻址方式 段超越前缀用来从默认段以外的段中取得数据 例MOVBX ES SI 关于默认段 指定寄存器BX SI或DI 默认操作数存放在数据段DS中 DS BX SI DI 指定寄存器BP 默认操作数存放在数据段SS中 SS BP 3 18086的寻址方式 寄存器间接寻址方式 24 3 18086的寻址方式 寄存器相对寻址方式 五 寄存器相对寻址方式 RegisterRelativeAddressing 1 含义 操作数的有效地址是基址或变址寄存器的内容与8位或16位位移量 Displacement 之和 即 BX BP EA 8位偏移量 16位偏移量 SI DI 2 特点 使用 BX BP SI DI 操作数的物理地址 16 DS BX SI DI COUNT或 16 SS BP COUNT 25 3 18086的寻址方式 寄存器相对寻址方式 例MOVBX COUNT SI 或 MOVBX COUNT SI 解 设 DS 3000H SI 2000H 位移量COUNT 4000H 36000H 318BH则 物理地址 指令执行后 BX 318BH 16 DS SI COUNT 30000H 2000H 4000H 36000H 26 3 注意 寄存器名称外必须加方括号 位移量可以在括号内 也可以在括号外 段超越前缀来从默认段以外的段中取得数据 例MOVDH ES ARRAY SI 关于默认段 指定寄存器BX SI或DI 默认操作数存放在数据段DS中 DS BX SI DI 指定寄存器BP 默认操作数存放在数据段SS中 SS BP 3 18086的寻址方式 寄存器相对寻址方式 27 3 18086的寻址方式 基址变址寻址方式 六 基址变址寻址方式 RegisterRelativeAddressing 1 含义 操作数的有效地址是一个基址寄存器 BX BP 的内容与一个变址寄存器 SI DI 的内容之和 2 特点 使用的寄存器 基址寄存器BX BP 变址寄存器SI DI 操作数的物理地址 16 DS BX SI DI或 16 SS BP SI DI3 注意 寄存器SI和DI BP和BX不能同时出现在 中 28 3 18086的寻址方式 基址变址寻址方式 例MOVAX BX SI 或 MOVAX BX SI 解 设 DS 3000H SI 0500H BX 1200H 31700H 0ABCDH则 物理地址 指令执行后 AX 16 DS SI BX 30000H 0500H 1200H 31700H 0ABCDH 29 3 18086的寻址方式 相对基址变址寻址方式 七 相对基址变址寻址方式 RelativeBasedIndexedAddressing 1 含义 操作数的有效地址是一个基址寄存器 BX BP 和一个变址寄存器 SI DI 的内容 再加上8位或16位位移量之和 即 BX SI EA 位移量 BP DI 2 特点 使用的寄存器 基址寄存器BX BP 变址寄存器SI DI 操作数的物理地址 16 DS BX SI DI 8 16位位移量或 16 SS BP SI DI 8 16位位移量3 注意 寄存器SI和DI BP和BX不能同时出现在 中 30 3 18086的寻址方式 相对基址变址寻址方式 例MOVAX MASK BX SI 或 MOVAX MASK BX SI 解 设 DS 3000H SI 0300H BX 1500H MASK 0200H 21A00H 26BFH则 物理地址 指令执行后 AX 16 DS SI BX MASK 20000H 0300H 1500H 0200H 21A00H 26BFH 31 3 18086的寻址方式 寻址方式总结 寻址方式总结 带方括号的地址表达式必须遵循下列规则 1 立即数可以出现在方括号内 表示直接地址 如 2000H 2 只有BX BP SI DI这四个寄存器可以出现在 内 它们可以单独出现 也可以相加 或与常数相加 但 BX和BP寄存器 SI和DI寄存器不允许出现在同一个 内 3 方括号表示相加 下面几种写法等价 6 BX SI BX 6 SI BX SI 6 32 3 18086的寻址方式 寻址方式总结 4 不同寄存器对应不同的隐含段基址 SS BP DS BX SI DI 物理地址 16 相应段基址 EAEA BX BP SI DI DISP 注 可以是单一寄存器 两个寄存器组合 和DISP组合 DISP也可以为0 可用段超越前缀修改段基址 33 3 18086的寻址方式 其它 八 其它 1 隐含寻址 指令中不指明操作数 但有隐含规定的寻址方式 如 指令DAA 对寄存器AL中的数据进行十进制数调整 结果仍保留在AL中 2 I O端口寻址 8086有直接端口和间接端口两种寻址方式 直接端口寻址方式 指令直接提供端口地址 8位立即数 可访问端口00 FFH 即256个端口 例如 INAL 63H 表示将瑞口63H中的内容送进AL寄存器 间接端口寻址方式 端口地址由寄存器DX提供 端口号为0000 FFFFH 例如 MOVDX 213H DX 口地址号213HINAL DX AL 端口213H中的内容 34 3 18086的寻址方式 其它 3 一条指令有多种寻址方式 源操作数和目的操作数同样适用上述寻址方法 例MOV BX AL解 设 BX 3600H DS 1000H AL 05H则 目的操作数的物理地址 16 DS BX 10000H十3600H 13600H指令执行结果为 13600H 05H 4 转移类指令寻址 后面讨论 35 3 2指令的机器码表示方法 3 2节自学 不做考试要求 3 2指令的机器码表示方法 目的和特点 汇编语言源程序 用汇编语言 即主要由指令系统组成的语言 编写的程序 编译程序执行源程序机器码运算结果编码特点 8086指令的二进制编码非常多 很难以一张表实现指令与机器语言的对照 为每种基本指令类型给出一个编码格式 对照格式填上不同的数字表示不同的寻址方式 数据类型 即可求得每条指令的机器码 指令通常由操作码和操作数两部分组成 8086指令系统采用变长指令 指令的长度可由1 6字节组成 36 3 38086的指令系统 3 38086的指令系统 分类 分为以下六类 数据传送指令算术运算指令逻辑运算和移位指令字符串处理指令控制转移指令处理器控制指令 37 一 数据传送指令 注 数据传送指令共14条 除SAHF和POPF指令外 对标志位均没有影响 3 38086的指令系统 数据传送指令 38 1 通用数据传送指令 GeneralPurposeDataTranfer 3 38086的指令系统 数据传送指令 MOV传送指令 Move 指令格式 MOV目的 源指令功能 实现CPU的内部寄存器间或寄存器与存储器间的数据传送 例 MOVAX 0FF00H MOV DI AX MOVCX 1000H MOVBL 40MOVWORDPTR SI 01H MOVAL BL 39 3 38086的指令系统 数据传送指令 注意 指令中至少要有 项明确说明传送的是字节还是字 IP寄存器不能用作源操作数或目的操作数 立即数和CS寄存器不能用作目的操作数 除了源操作数为立即数的情况外 两个操作数中必有一个是寄存器 但不能都是段寄存器 这就是说 MOV指令不能在两个存储单元之间直接传送数据 也不能在两个段寄存器之间直接传送数据 40 3 38086的指令系统 数据传送指令 通常 数据通常存放在数据段中 例如 某个程序的数据段 DATASEGMENT 数据段开始AREA1DB14H 3BH 定义字节变量AREA2DB3DUP 0 复制操作ARRAYDW3l00H 01A6H 定义字变量STRINGDB GOOD DATAENDS 数据段结束汇编后 DATA将被赋予一个具体的段地址 各变量将自偏移地址0000H开始依次存放 各符号地址等于它们在数据段中的偏移量 AREA1的偏移地址为0000H AREA2的偏移地址为0002H ARRAY的偏移地址为0005H STRING的偏移地址为0009H 41 3 38086的指令系统 数据传送指令 例MOVDX OFFSETARRAY解 ARRAY的偏移地址 DX OFFSET 取后面的符号偏移地址的值 设 ARRAY的定义如上图所示则 DX 0005H 例MOVAL AREA1 AL AREA1中的内容14HMOVAREA2 AL 0002H单元 14H例MOVAX TABLE BP DI 解 将地址为l6 SS BP DI TABLE的字存储单元中的内容送进AX 42 3 38086的指令系统 数据传送指令 PUSH进栈指令指令格式 PUSH源指令功能 数据入堆栈工作过程 SP SP 2 SP 1 SP 源源操作数要求 可以是16位通用寄存器 段寄存器 存储器中的数据字 但不能是立即数 POP出栈指令指令格式 POP目的指令功能 数据出堆栈工作过程 目的 SP 1 SP SP SP 2 目的操作数要求 可以是16位通用寄存器 段寄存器 存储单元 但CS不能作目的操作数 高地址 栈底 SP 压入 弹出 栈顶 SS 最大容量64K SP总是指向偶地址单元 段址 43 3 38086的指令系统 数据传送指令 工作过程 44 3 38086的指令系统 数据传送指令 XCHG交换指令 Exchange 指令格式 XCHG目的 源指令功能 源操作数 目的操作数数据交换 操作数要求 交换可以在寄存器之间 寄存器与存储器之间进行 段寄存器不能作为操作数 不能直接交换两个存储单元中的内容 例设AX 2000H DS 3000H BX 1800H 3lA00H 1995H 则执行指令XCHGAX BX 200H 后 结果如何 解 把内存中的一个字与AX中的内容进行交换 源操作数的物理地址 3000H 10H十1800H十200H 31A00H 指令执行后 AX 1995H 3lA00H 2000H 45 3 38086的指令系统 数据传送指令 指令格式 XLAT转换表或 XLAT指令功能 使累加器 AL 中的一个值变换为内存表格中的某一个值 一般用来实现编码制的转换 即查表功能 XLAT指令使用步骤 使用之前必须先建立一个表格 表格中的内容是所需要转换的代码 将转换表的起始地址装入 BX寄存器 欲查的某项与表头地址的位移量 AL 即表格最多包含256个字节 执行XLAT指令后 根据位移量从表中查到转换后的代码值 AL寄存器中 XLAT表转换指令 TableLookup Translation 46 3 38086的指令系统 数据传送指令 例若十进制数字0 9的LED七段码对照表如下表所示 试用XLAT指令求数字5的七段码值 解 程序如下 TABLEDB40H 79H 24H 30H 19H 建表 表格起始地址为TABLEDB12H 02H 78H 00H 18H 七段码存于对TABLE的 位移量为0 9的单元位移 MOVAL 5 AL 数字5的位移量MOVBX OFFSETTABLE BX 表格首地址XLATTABLE 查表得 AL 12H 47 3 38086的指令系统 数据传送指令 2 输入输出指令 InputandOutput IN指令 指定端口中的数据 累加器OUT指令 累加器中的数据 指定端口 IN输入指令 Input 指令格式 INAL 端口地址 端口地址 00 FFH 直接包含在IN指令里 或INAX 端口地址 共允许寻址256个端口 直接寻址 INAL DX 端口地址 0FFH时 先将端口号送DX寄存器 再执行输入操作 或INAX DX 共允许寻址64K个端口 间接寻址指令功能 从8位端口读入一个字节到AL寄存器 或从16位端口读一个字到AX寄存器 注意 16位端口由两个地址连续的8位端口组成 16位端口输入 先将给定端口中的字节送进AL 再把端口地址加1 然后将该端口中的字节读入AH 48 3 38086的指令系统 数据传送指令 例INAL 0F1H INAX 80H MOVDX 310H INAL DX 例ATODEQU54H 设A D转换器口地址为54HINAL ATOD 注 IN指令中也可使用符号地址 AL 从F1H端口读入一个字节 AL 80H口的内容 AH 81H口的内容 端口地址310H先送入DX中 AL 310H端口的内容 AL 54H口的内容 49 3 38086的指令系统 数据传送指令 OUT输出指令 Output 指令格式 OUT端口地址 AL 端口地址 00 FFH 直接包含在IN指令里 或OUT端口地址 AX 共允许寻址256个端口 直接寻址 OUTDX AL 端口地址 0FFH时 先将端口号送DX寄存器 再执行输出操作 或OUTDX AX 当共允许寻址64K个端口 间接寻址指令功能 将AL中的一个字节写到一个8位端口 或把AX中的一个字写到一个16位端口 注意 对16位端口进行输出操作时 是对两个连续的8位端口进行输出操作 50 3 38086的指令系统 数据传送指令 例OUT85H AL MOVDX 0FF4H OUTDX AL MOVDX 300H OUTDX AX 85H端口 AL内容 端口地址DX 0FF4H 0FF4H端口 AL内容 DX指向300H端口 300H端口 AL内容 301H端口 AH内容 51 3 地址目标传送指令 AddressObjectTransfers 3 38086的指令系统 数据传送指令 共三条指令 传送地址码 可传送操作数的段地址和偏移地址 LEA取有效地址指令 LoadEffectiveAddress 指令格式 LEA目的 源指令功能 源操作数地址的偏移量 目的操作数所在寄存器要求 源操作数 必须是存储单元 目的操作数 必须是一个除段寄存器之外的16位寄存器 注意 与MOV指令的区别 52 3 38086的指令系统 数据传送指令 例假设SI 1000H DS 5000H 51000H 1234HLEABX SI 执行完该指令后 BX MOVBX SI 执行完该指令后 BX 例LEABX TABLE MOVBX OFFSETTABLE 例某数组含20个元素 每个元素占一个字节 序号为 0 19 设DI指向数组开头处 把序号为6的元素的偏移地址送到BX中 用什么指令来实现 解 l000H 1234H 可用MOV指令代替LEA指令两条指令等价 LEABX 6 DI 只能用LEA实现 不能用MOV 53 3 38086的指令系统 数据传送指令 LDS将双字指针送到寄存器和DS指令 LoadPointerusingDS 指令格式 LDS目的 源指令功能 源操作数指定的存储单元中的4字节地址指针 一对目的寄存器 其中 前两个字节 偏移地址 指定的目的寄存器 常用SI寄存器 后两个字节 段地址 DS寄存器 操作数要求 源操作数 必须是存储单元 该单元开始的连续4个字节存放一个变量的地址指针 目的操作数 必须是16位寄存器 常用SI寄存器 但不能用段寄存器 例设 DS 1200H 12450H 0F346H 12452H 0A90H 执行指令LDSSI 450H 后 结果如何 解 SI 0F346H DS 0A90H 54 3 38086的指令系统 数据传送指令 LES将双字指针送到寄存器和ES指令 LoadPointerusingES 指令格式 LES目的 源指令功能 源操作数指定的存储单元中的4字节地址指针 一对目的寄存器 其中 前两个字节 偏移地址 指定的目的寄存器 常用DI寄存器 后两个字节 段地址 ES寄存器 例设 DS 0100H BX 0020H 01020H 0300H 01022H 0500H 执行指令LESDI BX 后 结果如何 解 DI 0300H ES 0500H 55 4 标志传送指令 FlagTransfers 3 38086的指令系统 数据传送指令 读取标志指令 LAHF 5 3 0为任意值 标志寄存器低8位 AH设置标志指令 SAHF 标志寄存器低8位 AH把标志寄存器的内容压入堆栈 PUSHF从堆栈弹出到标志寄存器 POPF 参见 处理器控制命令 56 3 38086的指令系统 算术运算指令 二 算术运算指令 概述 算术运算指令可处理4种类型的数无符号二进制整数带符号二进制整数无符号压缩十进制整数 PackedDecimal 无符号非压缩十进制整数 UnpackedDecimal 一个8位二进制数可看成4种不同类型的数 所表示的数值亦不同 57 3 38086的指令系统 算术运算指令 数的表示 二进制数 可以是8位或16位 若是带符号数 则用补码表示 压缩十进制数 一个字节中存放两个BCD码十进制数 非压缩十进制数 个字节的低半字节存放十进制数 高半字节为全零 例如 对十进制数字58 压缩十进制数表示 只需一个字节 即01011000B 非压缩十进制数表示 需两个字节 即00000101B和00001000B 4种数的类型的表示方法如下 58 3 38086的指令系统 算术运算指令 算术运算指令的种类 59 1 加法指令 Addition ADD加法指令 Addition 指令格式 ADD目的 源指令功能 目的 源十目的 ADC带进位的加法指令 AdditionwithCarry 指令格式 ADC目的 源指令功能 目的 源十目的十CF操作数的要求 包括上两条指令 源操作数 可以是寄存器 存储器 立即数 目的操作数 只能用寄存器 存储单元 注意 源 目的操作数不能同时为存储器 且类型必须一致 即都是字节或字 这两条指令影响的标志位为 CF OF PF SF ZF和AF 3 38086的指令系统 算术运算指令 60 3 38086的指令系统 算术运算指令 例两种加法指令的实例ADDAL 18H ADCBL CL ADCAX DX ADDAL COST BX ADDCOST BX BL 例用加法指令对两个8位16进制数5EH和3CH求和 并分析加法运算指令执行后对标志位的影响 解 MOVAL 5EH MOVBL 3CH ADDAL BL AL AL十18H BL BL十CL十CF AX AX十DX十CF AL内容和地址 DS COST BX 的存储字节相加 结果送AL 将BL与物理地址 DS COST十BX 的存储字节相加 结果留在该存储单元中 AL 5EH 94 BL 3CH 60 结果AL 9AH 61 3 38086的指令系统 算术运算指令 讨论 ADD对标志位的影响 两个数的相加过程 010111105EH 94 00111100即 3CH 60100110109AH 154运算后标志位 ZF AF CF SF PF OF 对标志的解释 人为决定 两个加数都看成无符号数时 运算结果为9AH 即十进制数154 在这种情况下 SF和OF都没有意义 我们只关心ZF和CF标志 在BCD码运算或奇偶校验时才考虑AF或PF标志 两个加数都当成带符号数时 符号标志SF和溢出标志OF很重要 而进位标志CF没有意义 带符号数能表示的范围 128 127 而本例中 两个正数94和60相加 其和为154 由于154超过了范围 即产生了溢出 OF 1 0 1 0 1 1 1 62 3 38086的指令系统 算术运算指令 INC增量指令 Increment 指令格式 INC目的指令功能 目的 目的十1操作数的要求 通用寄存器 内存 注意 这条指令主要用在循环程序中 对地址指针和循环计数器等进行修改 指令执行后影响AF OF PF SF和ZF 但不影响进位标志CF 该指令只有一个操作数时 如果要使内存单元的内容增1 程序中必须说明该存储单元是字还是字节 INC指令的两个应用例子 例INCBL BL寄存器中内容增1INCCX CX寄存器中内容增1例INCBYTEPTR BX 内存字节单元内容增1INCWORDPTR BX 内存字单元内容增1其中 PTR为类型说明符 前面加BYTE说明操作数类型为字节 加WORD则说明操作数类型为字 63 3 38086的指令系统 算术运算指令 AAA加法的ASCII调整指令 ASCIIAdjustforAddition 指令格式 AAA指令功能 将AL寄存器中的运算结果调整为1位非压缩十进制数 仍保留在AL 如果AF 1 表示向高位有进位 则进到AH寄存器中 使用前提 用ADD或ADC指令对两个非压缩十进制数或ASCII码表示的十进制数作加法 运算结果已存在AL 注 非压缩十进制数的高4位为全0 低4位为十进制数字0 9 例如 将9表示成00001001 调整过程 若AL低4位 9或AF 1则 AL AL十6 用与操作 将AL高4位清0 AF置1 CF置1 AH AH十l否则 将AL寄存器的高4位清0 64 3 38086的指令系统 算术运算指令 例若AL BCD9 BL BCD5 求两数之和 解 设AH 0 则运算过程如下 ADDAL BL 00001001 09H 00000101 05H AAA 00001110 低4位 9 00000110 加6调整 00010100 00001111 清高4位 00000100 AL 04H CF 1 AF 1 AH 1 结果为AX 0104H 表示非压缩十进制数14 ASCII码表示的十进制数 高半字节均为3 运算时需用AND指令将它屏蔽 只要使用AAA指令 可以不必屏蔽高半字节 便能在AX中得到一个正确的非压缩十进制数 65 3 38086的指令系统 算术运算指令 例求ASCII码表示的数9 39H 与5 35H 之和 解 设AH 0 则运算过程如下 MOVAL 9 AL 39HMOVBL 5 BL 35HADDAL BL 00111001 9 00110101 5 AAA 01101110 低4位 9 00000110 加6调整 01110100 00001111 清高4位 00000100 AL 4 CF 1 AF 1 AH 1 结果为AX 0104H 表示非压缩十进制数14 在AAA指令后加上一条 或 指令ORAX 3030H 便使AX中的结果变成了ACSII码3134H 66 3 38086的指令系统 算术运算指令 DAA加法的十进制调整指令 DecimalAdjustforAddition 指令格式 DAA指令功能 将两个压缩BCD数相加后的结果调整为正确的压缩BCD数 使用前提 相加后的结果必须在AL中 才能使用DAA指令 调整过程 若AL的低4位 9或AF 1 则AL AL十6 对低4位进行调整 若AL的高4位 9或CF 1 则AL AL十60H 对高4位进行调整 并使CF置1 否则CF置0 67 3 38086的指令系统 算术运算指令 例若AL BCD38 BL BCDl5 求两数之和 解 运其过程如下 ADDAL BL 00111000 38H 00010101 15H DAA 01001101 低4位 9 00000110 加6调整 01010011 AL 53H 结果为 AL BCD53 CF 0 调整过程 若AL的低4位 9或AF 1 则AL AL十6 对低4位进行调整 若AL的高4位 9或CF 1 则AL AL十60H 对高4位进行调整 并使CF置1 否则CF置0 68 3 38086的指令系统 算术运算指令 例若AL BCD88 BL BCD49 求两数之和 解 运算过程为 ADDAL BL 10001000 88H 01001001 49H DAA 11010001 AF 1 低4位9 01100000 加60H调整 00110111 AL 37H 结果为 AL BCD37 CF 1 调整过程 若AL的低4位 9或AF 1 则AL AL十6 对低4位进行调整 若AL的高4位 9或CF 1 则AL AL十60H 对高4位进行调整 并使CF置1 否则CF置0 69 3 38086的指令系统 算术运算指令 2 减法指令 Subtraction SUB减法指令 Subtraction 指令格式 SUB目的 源指令功能 目的 目的 源例SUBAX BX AX AX BXSUBDX 1850H DX DX 1850H 70 3 38086的指令系统 算术运算指令 SBB带借位的减法指令 SubtractwithBorrow 指令格式 SUBB目的 源指令功能 目的 目的 源 CF SBB主要用于多字节减法中 例SUBBAL CL AL AL CL CF DEC减量指令 Decrement 指令格式 DEC目的指令功能 目的 目的一l例DECBX BX BX 1DECWORDPTR BP 堆栈段中位于 BP 偏置处的字减1 71 3 38086的指令系统 算术运算指令 NEG取负指令 Negate 指令格式 NEG目的指令功能 目的 0 目的 即 对目的操作数取负例NEGAX 将AX中的数取负NEGBYTEPTR BX 对数据段中位于 BX 偏置处的字节取负 CMP比较指令 Compare 指令格式 CMP目的 源指令功能 目的 源注意 结果不回送到目的操作数中 仅反映在标志位上 用途 用在比较两个数大小又不破坏原操作数的场合 例CMPAL 80H AL与80H作比较CMPBX DATA1 BX与数据段中偏移量为DATA1处的字比较 72 3 38086的指令系统 算术运算指令 减法指令小结 上述五种指令都做减法运算 对于双操作数指令 SUB SBB CMP 源操作数可以是寄存器 存储器或立即数 目的操作数可以是寄存器 存储器 但不能为立即数 两个操作数不能同时为存储器 对于单操作数指令 DEC NEG 目的操作数可以是寄存器 存储器 但不能为立即数 如果是存储器操作数 还必须说明其类型是字节还是字 运算之后 除DEC指令不影响CF标志外 它们均影响OF SF ZF AF PF和CF标志 在减法操作后 如果源操作数大于目的操作数 需要借位时 进位 借位标志CF将被置1 73 3 38086的指令系统 算术运算指令 例设AL 10110001B DL 01001010B 求AL DL 解 SUBAL DL 与加法操作一样 对结果的解释取决于参与运算的数的性质运算过程如下 二进制减法当成无符号数当成带符号数10110001177 79 01001010 74 74 01100111103 103运算后标志位 ZF 0 AF 1 CF 0 SF 0 PF 0 OF 1 讨论 两数为无符号数 表示177与74的差是103 CF 0表示没有借位 SF和OF无意义 两数为带符号数 表示 79 74 结果应为 153 但结果却为正数 103 这是由于 153溢出造成的 此时 SF和OF有重要意义 74 3 38086的指令系统 算术运算指令 AAS减法的ASCII调整指令 ASCIIAdjustforSubtraction 指令格式 AAS指令功能 将AL寄存器中的运算结果调整为正确的非压缩十进制数之差 仍保留在AL中 使用前提 用SUB或SBB指令对两个非压缩十进制数或ASCII码表示的十进制数作减法 运算结果已存在AL 调整过程 若AL寄存器的低4位 9或AF 1 则 AL AL 6 AF置1 将AL寄存器高4位清零 AH AH l CF置l否则 不需要调整 75 3 38086的指令系统 算术运算指令 例设AL BCD3 CL BCD8 求两数之差 解 运算过程如下 SUBAL CL 00000011 BCD3 00001000 BCD8 AAS 11111011 低4位 9 00000110 减6调整 11110101 00001111 高4位清0 00000101 AL 05H 结果为BCD5 CF 1 表示向高位有借位 注意 如果有借位 则CF置1 AAS指令必须紧跟在SUB或SBB指令之后 调整过程 若AL寄存器的低4位 9或AF 1 则 AL AL 6 AF置1 将AL寄存器高4位清零 AH AH l CF置l否则 不需要调整 76 3 38086的指令系统 算术运算指令 DAS减法的十进制调整指令 DecimalAdjustforSubtraction 指令格式 DAS指令功能 将AL中两个压缩BCD数相减后的结果调整为正确的压缩BCD数 高4位和低4位分别进行调整 使用前提 在两个压缩十进制数用SUB或SBB相减后 结果必须在AL中 调整过程 如果AL寄存器的低4位 9或AF 1则 AL AL 6 AF置1 如果AL高半字节 9或标志位CF l则 AL AL 60H CF置1 77 3 38086的指令系统 算术运算指令 例设AL BCD56 CL BCD98 求两数之差 解 运算过程如下 SUBAL CL 01010110 BCD56 10011000 BCD98 DAS 10111110 低4位 9 AF 1 00000110 减6调整 10111000 高4位 9 01100000 减60H调整 01011000 AL 58H 结果为 AL BCD58 CF 1 表示有借位 调整过程 如果AL寄存器的低4位 9或AF 1 则 AL AL 6 AF置1 如果AL高半字节 9或标志位CF l 则 AL AL 60H CF置1 78 3 38086的指令系统 算术运算指令 3 乘法指令 Multiply MUL无符号数乘法指令 Multiply 指令格式 MUL源指令功能 把源操作数和累加器中的数都当成无符号数 然后将两数相乘 源操作数是一个字节 AX AL 源 即 原操作数与累加器AL中的内容相乘 乘积为双倍长的16位数 高8位送到AH 低8位送AL 源操作数是一个字 DX AX AX 源 即 原操作数与累加器AX的内容相乘 结果为32位数 高位字放在DX寄存器中 低位字放在AX寄存器中 操作数要求 可以是寄存器 存储单元 但不能是立即数 源操作数可以是字节或字 源操作数是存储单元时 必须在操作数前加B或w说明是字节还是字 79 3 38086的指令系统 算术运算指令 例MULDL AX AL DLMULCX DX AX AX CXMULB SI AX AL 内存中某字节 B说明字节乘法MULW BX DX AX AX 内存中某字 W说明字乘法注意 MUL指令执行后影响CF和OF标志 如果结果的高半部分 字节操作为AH 字操作为DX 不为零 表明其内容是结果的有效位 则CF和OF均置1 否则 CF和OF均清0 据此可检测并去除结果中的无效前导零 乘法指令使AF PF SF和ZF的状态不定 80 3 38086的指令系统 算术运算指令 例设AL 55H BL 14H 计算它们的积 解 MULBL结果 AX 06A4H 由于AH 06H 0 高位部分有效 所以置CF 1 OF 1 例试计算FFH FFH 解 用二进制表示成如下形式 作为无符号数 表示255 255 65025 结果正确 作为带符号数 表示 1 1 511 显然结果不正确 可见 用MUL指令作带符号数的乘法 会得到错误的结果 用IMUL指令 才能使 1 1 得到正确的结果0000000000000001 81 3 38086的指令系统 算术运算指令 IMUL整数乘法指令 IntegerMultiply 指令格式 IMUL源指令功能 把源操作数和累加器中的数都作为带符号数 进行相乘 注意 存放结果的方式与MUL相同 源操作数为字节 与AL相乘 双倍长结果送到AX中 源操作数为字 与AX相乘 双倍长结果送到DX和AX中 最后给乘积赋予正确的符号 对标志位的影响 乘积的高半部分不是低半部分的符号扩展 不是全零或全1 则高位部分为有效位 表示它是积的一部分 于是置CF 1 OF 1 结果的高半部分为全零或全1 表明它仅包含了符号位 那么使CF 0 OF 0 AF PF SF和ZF不定 例设AL 28 BL 59 试计算它们的乘积 解 IMULBL注 结果 1652D 0000011001110100B 0674HAX F98CH 1652D 1652D 1111100110001100B F98CHCF 1 OF 1 82 3 38086的指令系统 算术运算指令 AAM乘法的ASCII调整指令 ASCIIAdjustforMultiply 指令格式 AAM指令功能 对AL中的两个非压缩十进制数相乘的乘积进行十进制数的调整 在AX中得到正确的非压缩十进制数的乘积 高位在AH中 低位在AL中 注意 两个ASCII码数相乘之前 先屏蔽掉每个数字的高半字节 使每个字节包含一个非压缩十进制数 BCD数 再用MUL指令相乘 乘积放到AL寄存器中 然后用AAM指令进行调整 标志位的影响 影响ZF SF和PF 但AF CF和OF无定义 8086 8088指令系统中 十进制乘法运算不允许采用压缩十进制数 调整指令仅此一条 调整过程 把AL寄存器内容除以10 商放在AH中 余数在AL中 即 AH AL 10所得的商 AL AH 10所得的余数 83 3 38086的指令系统 算术运算指令 例求两个非压缩十进制数09和06之乘积 解 MOVAL 09H 置初值MOVBL 06HMULBL AL 09与06之乘积36HAAM 调整得AH 05H 十位 AL 04H 个位 结果 AX 0504H 即BCD数54 例如果AL和BL中分别存放9和6的ASCII码 求两数之积 解 用以下指令实现 ANDAL 0FH 屏蔽高半字节ANDBL 0FHMULBL 相乘AAM 调整如要将结果转换成ASCII码 可用指令ORAX 3030H实现 使AX 3534H 84 3 38086的指令系统 算术运算指令 4 除法指令 Division DIV无符号数除法指令 Division unsigned 指令格式 DIV源指令功能 对两个无符号二进制数进行除法操作 源操作数为字节 16位被除数必须放在AX中 8位除数为源操作数 AL AX 源 字节 的商AH AX 源 字节 的余数若被除数只有8位 必须把它放在AL中 并将AH清0 源操作数为字 32位被除数在 DX AX 中 16位除数作源操作数 AX DX AX 源 字 的商DX DX AX 源 字 的余数若被除数 除数都是16位 则将16位被除数送到AX中 再将DX寄存器清0 注意 源操作数可以是寄存器 存储单元 可以是字 也可以是字节 被除数和除数一样 商和余数也都为无符号数 DIV指令执行后 所有标志位均无定义 85 3 38086的指令系统 算术运算指令 IDIV整数除法指令 IntegerDivision 指令格式 IDIV源指令功能 对两个带符号二进制数进行除法操作 也称为带符号数除法 注意 商和余数都是带符号数 且规定余数的符号和被除数的相同 指令执行后 所有标志位均无定义 无论对 DIV 还是 IDIV 都要注意溢出问题 字节操作时 被除数的高8位绝对值大于除数的绝对值 产生溢出 即商数超过了目标寄存器AL所能存放数的范围 对于无符号数 允许最大商为FFH 对于带符号数 允许商的范围为 127 127 或 81H 7FH 字操作时 被除数的高16位绝对值大于除数的绝对值 产生溢出 即商数超过了目标寄存器AX所能存放数的范围 对于无符号数 允许最大商为FFFFH 对于带符号数 允许商的范围为 32767 32767 或 8001H 7FFFH 带符号数除法指令 字节操作时要求被除数为16位 字操作时要求被除数为32位 如果被除数不满足这个条件 不能简单地将高位置0 而应该用符号扩展指令 SignExtension 将被除数转换成除法指令所要求的格式 86 3 38086的指令系统 算术运算指令 例两个无符号数7A86H和04H相除 商应为多少 解 MOVAX 7A86HMOVBL 04HDIVBL结果 正确的商应为1EA1H 由于BL中的除数04H为字节 被除数为字 商1EA1H大于AL中能存放的最大无符号数FFH 产生除法错误中断 87 3 38086的指令系统 算术运算指令 CBW把字节转换为字指令 ConvertBytetoWord 指令格式 CBW指令功能 把寄存器AL中字节的符号位扩充到AH的所有位 AH被称为AL的符号扩充 扩展方法 若AL中的D7 0 则将这个0扩展到AH中 使AH 00H 即 若AL中的D7 1 则将这个1扩展到AH中 使AH FFH 即 注意 CBW指令执行后 不影响标志位 例编程求 38 3的商和余数 解 MOVAL 11011010B 被除数 38的补码MOVCH 00000003B 除数 3CBW 将AL符号扩展到AH中 使AX 1111111111011010BIDIVCH AX CH AL 11110100B 12 商 AH 11111110 2 余数 88 3 38086的指令系统 算术运算指令 CWD把字转换成双字指令 ConvertWordtoDoubleWord 指令格式 CWD指令功能 把AX中字的符号值扩充到DX寄存器的所有位 扩展方法 若AX的D15 0 则DX 0000H 即 若AX的D15 1 则DX FFFFH 即 注意 CWD指令执行后 也不影响标志位 89 3 38086的指令系统 算术运算指令 AAD除法的ASCII调

温馨提示

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

评论

0/150

提交评论