第2章 微处理器与指令系统.ppt_第1页
第2章 微处理器与指令系统.ppt_第2页
第2章 微处理器与指令系统.ppt_第3页
第2章 微处理器与指令系统.ppt_第4页
第2章 微处理器与指令系统.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

2 1 第二章微处理器和指令系统 2 1Intel系列微处理器概述2 28086 8088微处理器2 3Pentium微处理器2 4Pentium微处理器指令系统 2 2 2 1 18086 8088微处理器2 1 280486微处理器2 1 3Pentium微处理器 80586 2 1 4PentiumPro微处理器2 1 5Pentium 微处理器2 1 6Pentium 微处理器2 1 7Pentium4微处理器 2 1Intel系列微处理器概述 2 3 2 1 18086 8088微处理器 8086是1978年推出的全16位微处理器 8088是1978年推出的准16位微处理器 二者除外数据总线位数 8086为16位 8088为8位 及与此相关的部分逻辑稍有差别外 内部结构和基本性能相同 指令系统完全兼容 在8086 8088的设计中 引入了两个重要的结构概念 指令流水线 存储器分段 这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展 正是这两个概念的引入 使8086 8088比原来的8位MPU在运行速度 处理能力和对存储空间的访问等性能方面有很大提高 2 4 2 1 280486微处理器 1 内部寄存器的容量都扩充到了32位或以上 具有全32位数据处理能力 并可进行64位的数据运算 2 片内存储管理部件可实现段页式存储管理 比80286可提供更大的虚拟存储空间和物理存储空间 3 新增了一种保护模式下的工作方式 即虚拟8086方式 4 指令流水线增加到了6级 5 提供了32位外部总线接口 最大数据传输速率显著提高 80486是继80386之后推出的第二代32位高性能微处理器 它以提高性能和面向多处理器系统为主要目标 80486继承了80386的各种优点 表现在以下几方面 2 5 2 1 280486微处理器 1 片内集成了一个浮点运算单元FPU 2 内含一个8KB的数据与指令合用的Cache 3 采用RISC技术 使芯片内的不规则控制部分减少 同时常用基本指令采用硬件逻辑控制执行 使基本指令可以用一个时钟周期完成 4 采用一种突发总线 BurstBus 的技术 使取得一个地址后 与该地址相关的一组数据可以连续输入 输出 有效地解决了微处理器同内存储器之间的数据交换问题 5 面向多处理器结构 增加了支持多机操作的指令 除以上80386 80486共有的特点之外 80486也采用了许多新技术 2 6 2 1 3Pentium微处理器 80586 1 采用超标量体系结构 2 内置的浮点运算部件采用超流水线技术 3 增加了分支指令预测 4 内置了指令和数据两个独立的超高速缓存器 避免了预取指令和数据可能发生的冲突 Pentium是一种高性能的32位微处理器 其对80486作了下列重大改进 2 7 5 采用64位外部数据总线 6 引入了大型机中采用的内部错误检测 功能冗余检验和错误报告等自诊断功能 7 进行了更多的可测性设计 8 提供了独特的性能监察功能 以利于软 硬件产品的优化和升级 9 提供了灵活的存储器页面管理 2 1 3Pentium微处理器 80586 2 8 精简指令集技术 二级缓冲结构 乱序执行和预测执行技术 三级超标量和14级超流水线结构 寄存器重命名技术 2 1 4PentiumPro微处理器 简称P6 中文名为 高能奔腾 在体系结构中采用了许多新的思想和新的技术 2 9 2 1 5Pentium 微处理器 P6级微处理器的第二代产品 从系统结构角度看 主要采用了以下几种先进技术 采用了由三种创新处理技巧结合的动态执行技术 即 多分支预测 数据流分析和推测执行 双重独立总线技术 DIB DualIndependentBus 多媒体增强技术 MMX技术 采用单指令流多数据流SIMD技术 新增加了57条功能强大的MMX指令 2 10 2 1 6Pentium 微处理器 Pentium 是第三代P6级微处理器产品 与Pentium 相比 有如下改进 前端总线的时钟频率为100MHz 采用0 18 m新工艺的Pentium 其前端总线达到133MHz 将256KB的L2Cache集成到了芯片内 增加了70条流式单指令多数据扩展SSE指令 首次设置了处理器序列号PSN 2 11 2 1 7Pentium4微处理器 1 采用了超级管道技术 使用长达20级的分支预测 恢复管道 而P6只有10级 2 它的简单算术逻辑单元 ALU 采用2倍的处理器核心频率运行 3 动态执行技术中的指令池能容下126条指令 4 内含一个4KB的分支目标缓冲 5 增加了由144条新指令组成的SSE2 它是第一个非P6核心结构的全新32位微处理器 与P6级微处理器相比 主要结构特点如下 2 12 2 28086 8088微处理器 内部结构指令流水线存储器分段 8086是全16位微处理器 8088是准16位微处理器 二者除了外数据总线位数及与此相关的部分逻辑稍有差别外 内部结构和基本性能相同 指令系统完全兼容 2 13 1 内部结构 2 28086 8088微处理器 2 14 2 指令流水线 指令队列的存在使EU和BIU并行工作 取指令和分析 执行指令操作可重叠进行 形成了两级指令流水线结构 减少了CPU等待时间 提高了CPU的利用率 加快了整机运行速度 降低了对存储器存取速度的要求 2 28086 8088微处理器 2 15 将1MB的物理存储空间分成若干个逻辑段 每段大小为64KB 段的起始单元地址叫段基址 存放在段寄存器中 通过4个段寄存器 CPU每次可同时对4个段进行寻址 3 存储器分段 2 28086 8088微处理器 2 16 分段方式不唯一 各段之间可以连续 分离 部分重叠或完全重叠 这主要取决于对各个段寄存器的预置内容 2 28086 8088微处理器 存储器分段结构示例 2 17 物理地址是1MB存储空间中的某一单元地址 用20位地址码表示 CPU访问存储器时 地址总线上送出的就是物理地址 逻辑地址在编程时采用 由段基址和偏移地址组成 两者均为16位 物理地址和逻辑地址 2 28086 8088微处理器 2 18 逻辑地址与20位物理地址的变换关系 物理地址 段基址 16 偏移地址 逻辑地址与物理地址的变换 2 28086 8088微处理器 2 19 2 3Pentium微处理器 2 3 1内部结构与外部引脚2 3 2内部寄存器2 3 3Pentium的四种工作方式 2 20 Pentium在结构上由如下功能部件组成 整数执行单元 浮点单元 指令Cache和数据Cache 指令预取单元 指令译码单元 地址转换与管理单元 总线接口单元 控制单元这些功能部件除地址转换与管理单元与80386 80486保持兼容外 其他都进行了重新设计 2 3 1内部结构和外部引脚 2 21 1 内部结构 2 2 1内部结构和外部引脚 1 总线接口单元主要用于管理访问外部存储器和I O端口必须的地址 数据和控制总线 完成预取指令 读 写数据等总线操作 3 预取缓冲单元预取缓冲单元在总线接口单元空闲时 负责提前去内存或指令Cache预取指令 其指令预取缓冲器在前一条指令执行结束之前可以预取多达94个字节的指令代码 4 指令译码单元将预取的指令译成Pentium可以执行的控制信号并送控制单元 对绝大多数指令来说 Pentium微处理器可以做到每个时钟周期以并行方式完成两条指令的译码操作 5 控制单元负责解释来自指令译码单元的指令字和控制ROM的微代码 控制部件的输出直接控制两条指令流水线和浮点单元 6 地址转换与存储管理单元Pentium的地址转换与存储管理单元与80386 80486保持完全兼容 由分段和分页部件组成 Pentium除继续支持4KB大小的页面外 还允许使用高达4MB的页面 从而减少了页面切换的频率 并加快了某些应用程序的执行 8 浮点运算单元 2 22 2 Pentium的外部引脚 2 23 基本寄存器系统级寄存器调试和模型专用寄存器浮点寄存器 Pentium的内部寄存器 按功能可分为4类 2 3 2Pentium内部寄存器 2 24 2 3 2Pentium内部寄存器 1 基本寄存器 EIP用于保存下一条待预取指令相对于代码基址的偏移量 它的低16位也可单独访问 称之为IP 2 25 标志寄存器位定义 2 3 2Pentium内部寄存器 2 26 段寄存器 Pentium有6个段寄存器 2 3 2Pentium内部寄存器 编程者可直接访问的 编程者不能访问的 2 27 实地址方式和虚拟8086方式下相同 段的长度固定为64KB 段选择器就是段寄存器 它保存的是逻辑段基址的高16位 将它的内容左移4位即可得到实际段基址 而不必使用描述符高速缓存器 在保护虚地址方式下 段的长度可以在1字节到4G字节之间变化 为了描述每个段的基址 属性和边界 为每个段定义了一个描述符 操作系统使用的各任务公用的段描述符放在一起构成全局描述符表GDT 某个任务专用的段描述符放在一起构成局部描述符表LDT Pentium段的定义与8086有所不同 2 3 2Pentium内部寄存器 2 28 描述符与描述符表 2 3 2Pentium内部寄存器 2 29 段的的选择符 为了说明一个段的描述符在哪个表中 表的序号是多少以及特权的高低 为每个段定义了一个16位的选择符 存于段选择器中 其格式为 2 3 2Pentium内部寄存器 2 30 将一个选择符装入一个段选择器时 处理器将自动从GDT或LDT中找到其对应的描述符装入相应描述符高速缓存器中 2 3 2Pentium内部寄存器 以后 每当访问存储器时 与所用段相关的段描述符高速缓冲器就自动参与该次存储器访问操作 转换关系 线性地址 段描述符高速缓存器中段基址 偏移地址 2 31 Pentium微处理器中包含一组系统级寄存器 即5个控制寄存器CR0 CR4和4个系统地址寄存器 这些寄存器只能由在特权级0上运行的程序 一般是操作系统 访问 2 2 2Pentium内部寄存器 控制寄存器 Pentium在80486控制寄存器CR0 CR3的基础上新增了一个控制寄存器CR4 这些寄存器用来存放全局特性的机器状态和实现对80X86 Pentium微处理器的多种功能的控制与选择 2 系统级寄存器 2 32 2 3 2Pentium内部寄存器 CR0 CR4 CR3 CR2 CR1 控制寄存器格式 2 33 系统地址寄存器 2 3 2Pentium的内部寄存器 系统地址寄存器 其中GDTR和LDTR分别用来存放GDT和LDT的32位线性基地址等内容 IDTR用来存放中断描述符表的基址和界限 TR用来存放任务状态段 TSS 的基址 界限和其他属性 只在保护方式下使用 所以又叫保护方式寄存器 用于把在保护方式下常用的数据基地址 界限和其他属性保存起来 以确保其快速性 2 34 Pentium处理器中提供了一组调试寄存器和一组模型专用寄存器 用于排除故障和用于执行跟踪 性能监测 测试及机器检查错误 2 3 2Pentium的内部寄存器 3 调试和模型专用寄存器 2 35 Pentium处理器取消了80386 80486中的测试寄存器TR 其功能由一组 模型专用寄存器 MSR ModelSpecialRegister 来实现 这一组MSR用于执行跟踪 性能监测 测试和机器检查错误 Pentium处理器采用两条指令RDMSR 读MSR 和WRMSR 写MSR 来访问这些寄存器 ECX中的值 8位值 确定将访问该组寄存器中哪一个MSR 2 3 2Pentium的内部寄存器 2 模型专用寄存器 2 36 2 3 3Pentium的四种工作方式 2 37 2 4Pentium微处理器指令系统 2 4 1基本数据类型2 4 2操作数寻址方式2 4 3Pentium指令系统概貌2 4 4数据传送类指令2 4 5算术运算类指令2 4 6逻辑运算和移位指令2 4 7串操作类指令2 4 8控制转移类指令 2 38 Pentium在其内部定点处理单元CPU和浮点处理单元FPU的支持下 共可处理7类数据 1 无符号二进制数2 带符号的二进制定点整数3 浮点数4 BCD码数5 串数据6 ASCII码数据7 指针数据 2 4 1基本数据类型 2 39 2 4 1基本数据类型 这类数不带任何符号信息 只含有量值域 仅CPU支持 分为三类 字节 字 双字 任何逻辑地址上的8位相邻位串 任何字节地址开始的2个相邻字节 低字节地址为该字地址 任何字节地址开始的2个相邻字 即4个相邻字节 最小字节地址为双字的地址 1 无符号二进制数 序数 2 40 这类数均以补码表示 有8位数 字节 16位数 字 32位数 双字 64位数 4字 四种 CPU支持前3种 FPU支持后3种 2 4 1基本数据类型 2 带符号的二进制定点整数 整数 2 41 2 4 1基本数据类型 这类数由FPU支持 有单精度 双精度和扩展精度三种形式 单精度数 双精度数 扩展精度数 3 浮点数 实数 2 42 BCD码数有压缩BCD码数和非压缩BCD码数两种 CPU两种数都支持 FPU只支持压缩BCD码数 且最大长度为80位 最多可处理20位BCD码数 2 4 1基本数据类型 5 串数据 这类数据仅CPU支持 包括 位串 字节 字 双字串 是从任何字节的任何位开始的相邻位的序列 最长可达232 1位 是字节 字 双字的相邻序列 最长可达232 1字节 4 BCD码数 2 43 2 4 1基本数据类型 包括ASCII码字符串和ASCII码数 0 F 两种 7 指针数据 包括近指针和远指针两种 近指针即32位指针 是一个32位的段内偏移量 段内寻址用 远指针即48位指针 由16位选择符和32位偏移量组成 用于跨段访问 6 ASCII码数据 2 44 关于数据类型的两点说明 1 在上述各类型数据中 基本的数据类型仍是字节 字和双字 一般应尽可能将字操作对准于偶地址 将双字操作对准于4的整数倍地址 但也允许不对准操作 以便在数据结构的处理上和存储器的有效利用上给系统设计人员和用户提供最大的灵活性 不过 对准和不对准获得的数据传递速度不一样 对准的字和双字可一次传递完 而未对准的字和双字需几次才能传递完 2 对于字和双字数据 80X86是采用低端低地址方式来存储的 即字数据被存储在两个相邻的字节单元之中 低位字节在低地址单元 高位字节在高地址单元 双字数据存储在四个连续字节单元中 最低位字节在最低地址单元 最高字节在最高地址单元 而字或双字数据的地址是指最低位字节所在的单元地址 2 4 1基本数据类型 2 45 2 4 2操作数寻址方式 1 寻址方式和有效地址概念2 11种寻址方式3 存储器寻址时的段约定4 应用举例 2 46 2 4 2寻址方式 寻址方式就是寻找指令中操作数地址的方式 操作数所在地址有三种可能 直接包含在指令中 即指令的操作数部分就是操作数本身 这种操作数叫立即数 对应的指令寻址方式称为立即数寻址 包含在CPU的某个内部寄存器中 这时指令中的操作数部分是CPU的一个寄存器 这种指令寻址方式称为寄存器寻址 在内存储器中 这时指令的操作数部分包含着该操作数所在的内存地址 这种指令寻址方式称为存储器寻址 1 寻址方式和有效地址概念 寻址方式 2 47 在Pentium系列MPU中 内存实际地址 PA 由段基地址和段内偏移地址两部分组成 为了适应处理各种数据结构的需要 段内偏移地址可由以下几部分组合而成 基址寄存器内容变址寄存器内容比例因子位移量 这四个基本部分称为偏移地址四元素 一般又将由这四种元素组合形成的偏移地址称为有效地址EA EA 基址 变址 比例因子 位移量 有效地址EA 2 4 2寻址方式 2 48 2 4 2寻址方式 16位和32位寻址时的四元素定义 2 49 保护方式下的寻址过程 地址转换过程 2 4 2寻址方式 2 50 2 4 2寻址方式 偏移地址四元素可优化组合出9种存储器寻址方式 加上立即数寻址和寄存器寻址 Pentium共有11种寻址方式 1 立即数寻址 2 寄存器寻址 3 直接寻址 4 寄存器间接寻址 5 基址寻址 6 变址寻址 7 比例变址寻址 8 基址加变址寻址 9 基址加比例变址寻址 10 带位移的基址加变址寻址 11 带位移的基址加比例变址寻址 2 11种寻址方式 2 51 2 4 2寻址方式 在这种寻址方式下 操作数作为立即数直接存在指令中 可为8位 16位或32位 以第3条指令为例 给出了立即数寻址方式的执行过程的动画演示 1 立即数寻址 2 52 2 4 2寻址方式 在这种方式下 操作数包含在指令规定的8位 16位或32位寄存器中 这种寻址方式指令编码短 无需从存储器取操作数 故执行速度快 2 寄存器寻址 寄存器直接寻址 2 53 2 4 2寻址方式 在这种方式下 指令中的操作数部分直接给出操作数有效地址EA 它和操作码一起放在存储器代码段中 可以是16位或32位整数 但操作数一般在数据段DS中 例 MOVAX DS 3000H 将DS段中3000H和3OO1H单元的内容送到AX中 假设DS 5000H 则此指令是将物理地址为53000H单元的内容送到AL寄存器 将53001H单元的内容送到AH寄存器 详情请看直接寻址方式的执行过程的动画演示 3 直接寻址 存储器直接寻址 2 54 2 4 2寻址方式 实际中对于直接寻址 如操作数在DS段中 则可直接写成 MOVAX 3000H 如操作数在DS之外的其他段 CS SS ES FS GS 中 指令中则必须用段寄存器名前缀 称为段超越前缀 予以指明 例如 MOVAX FS 3000H 直接寻址主要用于单个操作数的相对寻址场合 如简单的标量操作数寻址和静态分配数组的起始地址寻址等 2 55 2 4 2寻址方式 在这种方式下 操作数放在存储器中 但其有效地址EA放在寄存器中 即 EA 寄存器 寄存器的使用规定在16位寻址和32位寻址时不一样 4 寄存器间接寻址 2 56 2 4 2寻址方式 16位寻址时 偏移地址放在SI DI BP或BX中 这时又有两种段默认情况 若以SI DI BX间接寻址 则默认操作数在DS段中 例如 MOVAX SI 默认DS为段基址若以BP间接寻址 则默认操作数在SS段中 例如 MOVAX BP 默认SS为段基址动画演示 如果操作数不在上述规定的默认段 而是在其他段 则必须在指令中相应的操作数前加上段超越前缀 例如 MOVAX ES SI MOVAX DS BP 2 57 2 4 2寻址方式 32位寻址时 8个32位通用寄存器均可作寄存器间接寻址 例如 MOVEBX EAX 默认DS为段基址 传送双字给EBXMOVDX EBX 默认DS为段基址 传送字给DXMOVCH EAX 默认DS为段基址 传送字节给CH 除ESP EBP默认段寄存器为SS外 其余6个通用寄存器均默认段寄存器为DS 如操作数在默认段之外 指令中必须加段超越前缀 寄存器间接寻址的应用场合与直接寻址的应用场合相似 当更灵活 2 58 2 4 2寻址方式 在这种方式下 EA 基址寄存器 位移量 其中位移量一定要为常数 且跟随在操作码之后 与操作码一起存放在代码段中 16位寻址情况下 BX和BP作为基址寄存器 在缺省段超越前缀时 BX以DS作为默认段寄存器 BP以SS作为默认段寄存器 位移量可为8位或16位 32位寻址情况下 8个32位通用寄存器均可作基址寄存器 其中ESP EBP以SS为默认段寄存器 其余6个通用寄存器均以DS为默认段寄存器 位移量为8位或32位 例如 动画演示MOVEAX BX 24 也可写成MOVEAX 24 BX MOVECX EBP 50 也可写成MOVECX 50 EBP MOVDX EAX 1500H 也可写成MOVDX 1500H EAX 5 基址寻址 2 59 2 4 2寻址方式 在这种方式下 EA 变址寄存器 位移量指令书写格式和寻址执行过程与基址寻址相同 区别仅在于将基址寄存器改成变址寄存器 6 变址寻址 2 60 2 4 2寻址方式 16位寻址时 仅SI DI可作变址寄存器 且默认DS作为段基址寄存器 如 MOVAX COUNT SI 32位寻址时 除ESP外的任何通用寄存器均可作变址寄存器 且默认EBP以SS作段基址寄存器 其余均以DS作段基址寄存器 如 MOVEAX 5 EBP MOVECX DATA EAX 基址 变址寻址适于对一维数组的数组元素进行检索操作 位移量表示数组起始地址偏移量 基址 变址表示数组元素的下标 可变 2 61 2 4 2寻址方式 在这种方式下 EA 变址寄存器 比例因子 位移量 这种寻址方式只适于32位寻址一种情况 例如 MOVEAX TABLE ESI 4 TABLE是位移量 4是比例因子 比例变址寻址和基址 变址寻址的作用相似 也适用于对一维数组元素的检索 但当数组元素大小为2 4 8字节时 用它更方便 更高效 比例变址寻址方式的执行过程的动画演示 7 比例变址寻址 2 62 2 4 2寻址方式 在这种寻址方式下 EA 基址寄存器 变址寄存器 例如 MOVAX BX SI 或写成MOVAX BX SI 动画演示 它有16位寻址和32位寻址两种情况 每种情况下基址 变址寄存器的使用规定和段寄存器的默认规定与前面所述相同 但一种寻址方式中既有基址寄存器又有变址寄存器 而两个寄存器默认的段寄存器又不相同时 一般规定由基址寄存器来决定默认哪一个段寄存器作段基址指针 基址加变址寻址主要用于二维数组元素的检索和二重循环等 8 基址加变址寻址 2 63 2 4 2寻址方式 在这种方式下 EA 变址寄存器 比例因子 基址寄存器 它只有32位寻址一种情况 格式举例 MOVECX EDX 8 EAX 或MOVECX EDX 8 EAX MOVAX EBX 4 ESI 或MOVAX EBX 4 ESI 这种方式主要用于数组元素大小为2 4 8字节时的二维数组检索操作等场合 9 基址加比例变址寻址 2 64 2 4 2寻址方式 在这种方式下 EA 变址寄存器 基址寄存器 位移量 这种方式也分16位寻址和32位寻址两种情况 变址 基址寄存器的使用约定和对段寄存器的默认约定与前面所述相同 格式举例 MOVAX BX DI MASK 或MOVAX MASK BX DI ADDEDX ESI EBP 0FFFF000H 或ADDEDX 0FFFF000H ESI EBP 以第1条指令为例 给出了带位移的基址加变址寻址方式的执行过程的动画演示 这种寻址方式也是主要用于二维数组操作 位移量即为数组起始地址 10 带位移的基址加变址寻址 2 65 2 4 2寻址方式 这种方式将偏移地址四元素都用上了 即 EA 变址寄存器 比例因子 基址寄存器 位移量 它只有32位寻址一种情况 各种约定和默认情况同前所述 格式举例 INC EDI 8 ECX 40 或INC EDI 8 ECX 40 当二维数组的数组元素大小为2 4 8字节 且数组起始地址不为0时 适于用这种寻址方式进行数组检索操作 11 带位移的基址加比例变址寻址 2 66 2 4 2寻址方式 3 存储器寻址时的段约定 2 67 4 应用举例 例2 1已知80486工作在实地址方式下 其中一些寄存器的内容和一些存储单元的内容如图所示 试指出下列各条指令执行后 AX中的内容 MOVAX 2010H MOVAX BX MOVAX 1200H MOVAX BX MOVAX 1100H BX MOVAX BX SI MOVAX 1100H BX SI LEAAX SI 2 4 2寻址方式 2 68 2 4 2寻址方式 例2 2假定80486工作在实模式下 已知 DS 1000H SS 2000H SI 007FH BX 0040H BP 0016H 变量TABLE的偏移地址为0100H 请指出下列指令的源操作数字段是什么寻址方式 它的有效地址 EA 和物理地址 PA 分别是多少 MOVAX 1234H MOVAX TABLE MOVAX BX 100H MOVAX TABLE BP SI 2 69 Pentium的指令系统是在80X86系列指令系统的基础上逐步发展而形成的 在代码级具有向上兼容性 它增加了指令的种类 增强了一些指令的功能 提供了32位寻址方式和32位操作方式 并且包含全部浮点运算指令 Pentium指令的操作数可以是0 3个 根据寻址方式不同 可直接包含在指令中 也可存于寄存器或存储器中 每条指令的长度因指令而异 平均指令长度为3 2字节 指令的操作数宽度可以是8位 16位 32位 寻址宽度可以是16位或32位 Pentium指令系统的突出特点是 功能强 灵活性高 给编译程序和汇编语言程序的设计人提供了很宽的选择余地 2 4 3Pentium指令系统概貌 2 70 1 指令格式 2 4 3Pentium指令系统概貌 2 71 Pentium指令系统分为 整数指令 最常用部分浮点数指令操作系统型指令 2 指令分类 2 4 3Pentium指令系统概貌 2 72 数据传送是计算机中最基本 最常用 最重要的一类操作 如 这类指令寻址方式最丰富 除POPF外 均不影响标志寄存器的标志位 在实际程序中 它的使用频率最高 各种初始化操作 取操作数 保存结果 2 4 4数据传送类指令 2 73 通用数据传送指令 如数据传送指令 MOV 装入有效地址指令 LEA 段装入指令 交换类指令 XCHG和BSWAP 查表转换指令 XLAT 等 堆栈指令 如PUSH类 POP类指令等 数据类型变换指令 如数据宽度变换指令 带符号数符号位扩展 无符号数位扩展指令等 I O指令 如IN类 OUT类指令等 标志寄存器传送指令 2 4 4数据传送类指令 数据传送指令主要包括 2 74 1 传送指令MOV 指令操作 源操作数 目的操作数 指令格式 MOV目的操作数 源操作数 寻址规定 REG MEM SREG REGREG MEM SREGREG SREG MEMREG MEM IMM 2 4 4数据传送类指令 2 75 2 3 4数据传送类指令 2 76 MOV指令使用说明 源操作数和目的操作数的类型必须一致 目的操作数不能为立即数 CS和 E IP均不能用作指令的目的寄存器 段寄存器间不能直接传送 也不能直接将立即数送给段寄存器 源操作数为立即数 而目的操作数类型不确定时 要给目的操作数加类型说明 源操作数和目的操作数不能同为存储器操作数 2 4 4数据传送类指令 目的操作数 源操作数REG MEM SREG REGREG MEM SREGREG SREG MEMREG MEM IMM 2 77 MOVDS 100 MOV 1000H 23H 错 源 目的操作数不能同为存储器寻址 MOV 1000H 2000H 错 立即数不能直接赋给段寄存器 错 目的操作数长度不确定 MOVDATA 1133H MOVCS AX 依赖于DATA的定义 错 不能用传送指令改变代码段寄存器 MOVAX 0100H BX BP 错 地址寄存器不能同为基址寄存器 例2 3识别下列指令的正确性 对错误的指令 说明错误的原因 MOVAX 100MOVDS AX MOVWORDPTR 1000H 23H MOVAX 2000H MOV 1000H AX 2 3 4数据传送类指令 2 78 2 交换指令 操作 目的操作数 源操作数 格式 XCHG目的操作数 源操作数REG MEM REGREG MEM 说明 基本用法同MOV指令 当源或目的操作数为MEM操作数时 会自动激活LOCK信号 该特性常用于多机 多任务或多用户系统中的临界段 共享资源 访问 2 4 4数据传送类指令 2 79 例2 4临界段访问 测试与置位操作 TEST SET MOVAL 0FFHXCHGAL SEMAPHORE 读信号灯并置位ANDAL AL 产生条件码JNZTEST SET 忙时等待 临界段程序 MOVAL 0MOVSEMAPHORE AL 清信号灯 2 4 4数据传送类指令 2 80 说明 XLAT是一条隐含寻址的指令 隐含两个操作数 DS E BX存放表基址 AL存放查表参数 使用前要给隐含操作数赋初值 3 查表指令 格式 XLAT操作 EBX AL AL BX AL AL 2 4 4数据传送类指令 2 81 例2 5内存中自TABLE开始的16个单元连续存放着自然数0到15的平方值 构成一个平方表 任给一整数M在XX单元中 该数为0 M 15 查表求M的平方值 并将结果存入YY单元中 解 LEABX TABLEMOVAL XXXLATMOVYY AL 2 4 4数据传送类指令 2 82 4 堆栈指令PUSH POP 格式 PUSH源操作数REG16 MEM16 IMM16REG32 MEM32 IMM32操作 E SP 2 4 E SP 源操作数 SS E SP 1 压栈指令 2 4 4数据传送类指令 2 83 格式 POP目的操作数MEM16 MEM32 REG16 REG32操作 SS E SP 目的操作数 E SP 2 4 E SP 2 弹栈指令 2 4 4数据传送类指令 2 84 堆栈指令的操作数只能为字或双字 PUSH和POP要成对出现 以保持堆栈平衡堆栈指令也隐含了一个目的 源操作数 堆栈 压栈顺序是先压高字节后压低字节 弹栈则是先弹低字节后弹高字节 3 堆栈指令使用说明 2 4 4数据传送类指令 2 85 例2 6用堆栈操作指令将BX和CX中的两个16位数 其中BX是高16位 组成32位数传送到EAX寄存器中 PUSHBX 先压高16位PUSHCX 后压低16位POPEAX 解 2 4 4数据传送类指令 2 86 说明 I O端口有两种寻址方式 直接寻址 寻址范围为0 255 间接寻址 寻址范围为0 216 1 1 输入指令 格式 IN累加器 端口AL AX EAX IMM8AL AX EAX DX 操作 AL AX EAX I O端口 直接寻址 指令给出的立即数是I O端口地址 间接寻址 DX寄存器给出的是I O端口地址 5 I O指令 2 4 4数据传送类指令 2 87 2 输出指令 格式 OUT端口 累加器IMM8 AL AX EAXDX AL AX EAX操作 AL AX EAX I O端口 2 4 4数据传送类指令 2 88 例2 7设程序在数据段中定义的数组如下 NAMESDB TOM DB20DB ROSE DB30DB KATE DB25请指出下列指令是否正确 如正确 A累加器中的结果是多少 6 传送指令应用举例 2 4 4数据传送类指令 2 89 1 MOVBX OFFSETNAMESMOVAL BX 5 AL NAMES 5 20 2 MOVAX NAMES 错 源与目的操作数类型不一致 3 MOVAX WORDPTRNAMES 1 AX NAMES 1 MO 4D4FH 4 MOVBX 6MOVSI 5MOVAX NAMES BX SI 前两条指令正确 第三条错 源与目的操作数类型不一致 2 4 4数据传送类指令 2 90 5 MOVBX 6 2MOVSI 5MOVAX OFFSETNAMES BX SI INC AX 6 MOVBX 6MOVSI 5LEADI NAMES BX SI MOVAL DI DI NAMES偏移地址 BX SI NAMES偏移地址 11 AL NAMES 11 K 4BH 前两条指令正确 第三条错 OFFSET只能取直接变量的偏移地址 第四条错 非法寻址 2 4 4数据传送类指令 2 91 例2 880486工作在实地址方式时 DS 091DH BX 0024H 有关存储器的内容如图所示 求指令LESDI 32H BX 执行后的结果 LESDI 32H BX 2 4 4数据传送类指令 2 92 这类指令支持加 减 乘 除四种基本算术运算 其操作对象可以是字节 字 双字的无符号和有符号的二进制整数 也可以是无符号的压缩 非压缩BCD码数 还支持符号扩展指令和十进制调整指令 它的操作结果一般会影响标志寄存器中的状态标志位 如ZF CF SF OF AF PF等 2 4 5算术运算类指令 2 93 算术运算指令有 双操作数指令 如加 减 比较等 单操作数指令 如增 减 整数变反 乘除法指令等 无操作数指令 如十进制运算调整和符号位扩展等 三操作数指令 如有符号整数乘法指令IMUL等 2 4 5算术运算类指令 2 94 1 加法 减法指令 操作 ADD 目的 源 目的SUB 目的 源 目的ADC 目的 源 CF 目的SBB 目的 源 CF 目的 2 4 5算术运算类指令 2 95 加法 减法指令使用说明 ADD SUB指令用于单个字节 字 双字数的加 减法运算 ADC SBB指令则常用于多精度或多字节 多字 多双字数的加 减法运算 INC DECREG MEM与ADD SUBREG MEM 1指令的异同 两者都执行加1 减1操作 但前者不影响进位 而后者影响 2 96 解 用8086指令MOVAX YSUBX AX 低16位字数据相减MOVAX 2 Y SBB2 X AX 高16位字数据相减 用80386 486指令MOVEAX DWORDPTRYSUBDWORDPTRX EAX 两个32位双字数据X Y定义如下 XDW1234H 5678HYDW3FEAH A033H请编写计算X X Y的程序段 低位在前 例2 9 2 4 5算术运算类指令 2 97 2 整数变反指令 求补 格式 NEG目的操作数REG MEM操作 0 目的操作数 目的操作数应用 常用于求负数的绝对值 解 TESTAX 8000H 测试符号位JZNEXTNEGAXNEXT HLT 例2 10求AX中存放的有符号数的绝对值 2 4 5算术运算类指令 2 98 3 比较指令 格式 CMP目的操作数 源操作数REG REG MEM IMMMEM REG IMM CMP与SUB指令都执行减法操作 但前者不因操作结果改变目标操作数值 而后者改变 操作 目的操作数 源操作数 根据操作结果修改状态标志 但不改变目标操作数值 2 4 5算术运算类指令 2 99 乘法指令分为有符号数和无符号数乘法指令 IMUL MUL 无符号数乘法指令只有单操作数格式一种 有符号数乘法指令则有单操作数 双操作数和三操作数三种格式 4 乘法指令 2 4 5算术运算类指令 2 100 1 单操作数乘法指令 格式 MUL IMUL源操作数REG MEM 操作 MUL和IMUL分别为有符号数和无符号数乘法指令 两种指令除操作数类型不同外 操作完全相同 字 AX 源操作数 DX AX 双字 EAX 源操作数 EDX EAX 2 4 5算术运算类指令 2 101 单操作数乘法指令的被乘数是隐含的 在AL AX EAX中 而结果长度一定是被乘数 乘数的二倍 在AX DX AX EDX EAX中 源操作数不能为立即数 源操作数为存储器操作数 且类型不能确定时 要显式说明操作数类型 要根据是有符号数还是无符号数 分别选用IMUL或MUL指令指令执行影响CF和OF标志 若指令执行后 结果的高一半是有效数值位 则CF OF 1 否则CF OF 0 乘法指令使用说明 2 4 5算术运算类指令 2 102 例2 11 解 MULBL指令完成AL和BL中的两个无符号数相乘 AH含有效数字 OF 1 CF 1 AX 0A8CH 12C 96 若 AL 96H BL 12H 求分别执行MULBL和IMULBL指令后的结果及OF CF状态 2 4 5算术运算类指令 2 103 AH含有效数字 OF 1 CF 1 解 IMUL执行有符号数乘法 此时AL中的数是负数 真值为 6AH 即 用补码表示 AX F88CH AX 774H D4 6A 2 4 5算术运算类指令 2 104 格式 IMUL目的操作数 源操作数REG REG MEM IMM操作 目的操作数 源操作数 目的操作数 3 三操作数乘法指令格式 IMUL目的操作数 源操作数 立即数REG REG MEM IMM操作 源操作数 立即数 目的操作数 2 双操作数乘法指令 2 4 5算术运算类指令 2 105 5 除法指令 格式 DIV IDIV源操作数REG MEM操作 按源操作数类型 字节 AX 源 商存于AL中 余数存于AH 字 DX AX 源 商存于AX中 余数存于DX 双字 EDX EAX 源 商在EAX中 余数在EDX 2 4 5算术运算类指令 2 106 说明 除法指令的被除数是隐含的 且长度一定是除数的二倍 在AX DX AX EDX EAX中 所以 使用除法指令常要扩展被除数长度 扩展时无符号数一般用 MOVZXAX ALMOVDX 0MOVEDX 0有符号数一般用 CBW CWD CDQ 2 4 5算术运算类指令 2 107 MOVAX a a b在CX BX中 MOVAX c c在DX AX中 a b c在DX AX中 a b c a 商存入S IMULb MOVCX DX MOVBX AX CWD ADDAX BX ADCDX CX IDIVa MOVS AX 例2 12下列程序段完成S a b c a的运算 其中变量a b c和S均为带符号的字数据 结果的商存入S 余数则不计 填空完成下列程序 2 4 5算术运算类指令 2 108 6 BCD调整指令 格式 AAA AAS AAM AAD DAA DAS 功能 AAA AAS 未组合BCD加法 减法调整指令 隐含操作数为AL AAM 未组合BCD乘法调整指令 隐含操作数AX AH AL 将AX中乘积调整为两个未组合BCD数存于AH和AL DAA DAS 组合BCD加法 减法调整指令 隐含操作数为AL AAD 调整除法运算前AX中的被除数内容 操作 AH 10 AL AX 2 4 5算术运算类指令 2 109 BCD调整指令说明 DAA DAS AAA AAS隐含的操作寄存器是AL 所以BCD码加法 减法只能用累加器AL为目的操作数的加法 减法指令 且加法 减法指令后要跟调整指令 多字节 字和双字BCD加法 减法只能用带进位 借位的字节加法 减法指令实现 ASCII码数的运算与非压缩BCD码数的运算基本相同 但要保持结果仍为ASCII码 则需转换 AAM隐含的操作寄存器是AX 要跟在MUL指令之后 AAD指令的功能不是将除法后的结果调整为BCD码 而是在除法前将AX保存的两位非压缩BCD数调整为二进制数 该指令要放在DIV指令之前 2 4 5算术运算类指令 2 110 例2 13 解 MOVAL BYTEPTRXADDAL BYTEPTRY 低位相加DAA BCD码调整MOVBYTEPTRX AL 保存低位结果MOVAL BYTEPTRX 1 取字变量的高字节ADCAL BYTEPTRY 1 高位相加DAAMOVBYTEPTRX 1 AL 两个4位压缩BCD码定义如下 XDW3526HYDW1234H请编写计算X Y的程序段 2 4 5算术运算类指令 2 111 程序段MOVAX 405HMOVBL 06HAADDIVBL执行后AX的内容为 A 307HB 703HC 4231HD 806H A 例2 14 2 4 5算术运算类指令 2 112 功能 分别按位进行逻辑 与 或 异或 测试 和 非 格式 ANDORXORTEST 目标操作数 源操作数REG REG MEM IMMMEM REG IMM NOT目标操作数REG MEM 4 4 6逻辑运算与移位指令 1 逻辑运算指令 2 113 使用说明 编程时要根据操作合理选用指令 一般 对某些二进制位 清零 用逻辑 与 指令AND 对某些二进制位 置位 用逻辑 或 指令OR 对某些二进制位 求反 用逻辑 异或 指令XOR 全部位 求反 用逻辑 非 指令NOT 逻辑运算指令除NOT指令外 都影响标志寄存器的状态标志位 且逻辑运算后进位标志CF一定为0 所以逻辑运算指令常用于清0和清进位 4 4 6逻辑运算与移位指令 2 114 AND指令与TEST指令的相同之处是都执行按位 与 操作 两者执行后对标志寄存器中状态标志位的影响相同 不同之处是前者改变目标操作数的值 而后者并不改变目标操作数的值 所以TEST指令与CMP指令的用法类似 用于产生按位测试的条件码 例2 15 写出一条能完成下述操作的指令 将AX的高字节清零 低字节不变 将BX的低字节置成全 1 高字节不变 将CX的高字节变反 低字节不变 4 4 6逻辑运算与移位指令 2 115 例2 16已知寄存器DX AX的内容为32位带符号数 编写一段程序使DX AX的内容成为原来数据的绝对值 解 TESTDX 8000H 测试符号位 产生状态JZEXIT 符号位 0 结束NEGDX 求绝对值NEGAXSBBDX 0EXIT HLT 4 4 6逻辑运算与移位指令 2 116 2 移位指令 移位指令包括 算术移位指令 SAL SAR 逻辑移位指令 SHL SHR 循环移位指令 ROR ROL RCR RCL 双精度移位指令 SHLD SHRD 4 4 6逻辑运算与移位指令 2 117 使用说明 移位指令的源操作数采用立即数寻址时 8086指令只能为1 80386 486以上则为8位 实际使用低5位 移位指令常用于二进制数的倍乘和倍除 即算术 逻辑移n位 相当于把二进制数乘以或除以2n 要注意算术右移 SAR 与逻辑右移 SHR 的区别 前者在符号位和数值位依次右移的同时 用符号位充填符号位 而后者用0充填符号位 所以 有符号和无符号数倍乘用SHL SAL均可 但倍除时 有符号数用SAR和无符号数用SHR 移位指令也常用于循环控制 如逻辑尺控制循环 4 4 6逻辑运算与移位指令 2 118 例2 17试编写用移位和加法指令完成计算 EAX 9 4的程序段 解 EAX 9 4 EAX 8 EAX 4 MOVEBX EAX 保存EAXSAL SHLEAX 3 EAX 8 EAXADDEAX EBX EAX 8 EAX EAXSAR SHREAX 2 EAX 9 4 EAX 4 4 6逻辑运算与移位指令 2 119 2 4 7串操作类指令 串传送指令MOVSB MOVSW MOVSD串装入指令LODSB LODSW LODSD串存储指令STOSB STOSW STOSD串比较指令CMPSB CMPSW CMPSD串扫描指令SCASB SCASW SCASD串输入指令INSB INSW INSD串输出指令OUTSB OUTSW OUTSD 串操作指令是指用于对存储器中字节串 字串和双字串进行操作的指令 包括 2 120 串操作约定 用DS E SI寻址源串 允许段超越 用ES E DI寻址目的串 但ES段不能超越 由DF标志位决定 E SI E DI指针增减 DF 0 递增 DF 1 递减 由串长度决定指针增 减量大小 带重复前缀时 用 E CX作重复计数器 2 4 7串操作类指令 2 121 1 串传送指令 格式 MOVSB MOVSW MOVSDMOVS目的串 源串MEM MEM 操作 将DS E SI 所指的源串中的一个字节 字或双字传送到ES E DI 指的目的串中 然后 按DF指示和操作数长度修改 E S

温馨提示

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

评论

0/150

提交评论