微型计算机原理(16位).ppt

上传人:max****ui 文档编号:8572230 上传时间:2020-03-30 格式:PPT 页数:192 大小:3.74MB
返回 下载 相关 举报
微型计算机原理(16位).ppt_第1页
第1页 / 共192页
微型计算机原理(16位).ppt_第2页
第2页 / 共192页
微型计算机原理(16位).ppt_第3页
第3页 / 共192页
点击查看更多>>
资源描述
微型计算机原理基于16位机 微处理器 指令系统 概述 第一章 微型计算机概述 1946年 世界上出现第一台数字式电子计算机ENIAC 电子数据和计算器 发展到以大规模集成电路为主要部件的第四代 产生了微型计算机1971年 Intel公司设计了世界上第一个微处理器芯片Intel4004 开创了一个全新的计算机时代 1 1微型计算机的发展和应用 1 1 1微型计算机的发展 第1代 4位和低档8位微机4004 4040 8008第2代 中高档8位微机Z80 I8085 M6800 Apple II微机第3代 16位微机8086 8088 80286 IBMPC系列机 1 1 1微型计算机的发展 续 第4代 32位微机80386 80486 Pentium PentiumII PentiumIII Pentium432位PC机 Macintosh机 PS 2机第5代 64位微机Itanium 64位RISC微处理器芯片微机服务器 工程工作站 图形工作站 1 1 2微型计算机的应用 计算机应用通常分成如下各个领域科学计算 数据处理 实时控制计算机辅助设计 人工智能 由于微型计算机具有如下特点体积小 价格低工作可靠 使用方便 通用性强 所以 可以分为两个主要应用方向 1 1 2微型计算机的应用 用于数值计算 数据处理及信息管理方向通用微机 例如 PC微机功能越强越好 使用越方便越好用于过程控制及智能化仪器仪表方向专用微机 例如 单片机 工控机可靠性高 实时性强程序相对简单 处理数据量小 将CPU以及其他主要部件 如ROM RAM I O接口 都集成在一个微处理器芯片中例如 常用的MCS 51 MCS 96 1 2微型计算机的系统组成 区别 1 2 1微型计算机的硬件组成 微处理器子系统存储器I O设备和I O接口系统总线 系统总线 总线是指传递信息的一组公用导线总线是传送信息的公共通道微机系统采用总线结构连接系统功能部件总线信号可分成三组地址总线AB 传送地址信息数据总线DB 传送数据信息控制总线CB 传送控制信息 总线信号 地址总线AB输出将要访问的内存单元或I O端口的地址地址线的多少决定了系统直接寻址存储器的范围数据总线DBCPU读操作时 外部数据通过数据总线送往CPUCPU写操作时 CPU数据通过数据总线送往外部数据线的多少决定了一次能够传送数据的位数控制总线CB协调系统中各部件的操作 有输出控制 输入状态等信号控制总线决定了系统总线的特点 例如功能 适应性等 举例 举例 特点 1 2 2微型计算机的软件系统 为什么采用汇编语言 1 3IBMPC系列机系统 16位IBMPC系列机是32位微机的基础 8088CPU IBMPC机 IBMPC AT机 IBMPC XT机 1 3 1硬件基本组成 16位和32位PC机的基本部件相同 1 3 2主机板组成 微处理器子系统8088 16位内部结构 8位数据总线 20位地址总线 4 77MHz主频存储器ROM BIOS 主体为RAMI O接口控制电路8259A 8253 8237A 8255等I O通道62线的IBMPC总线 1 3 3存储空间的分配 常规内存 1MB基本RAM区 640KB保留RAM区 128KB扩展ROM区 128KB基本ROM区 64KB扩展内存 用作RAM区 1 3 4I O空间的分配 80 x86访问外设时 只使用低16位A0 A15 寻址64K个8位I O端口PC机仅使用低10位A0 A9 寻址1024个8位I O端口 第1章 1 4计算机中的数据表示 存储容量的表达比特b 二进制1位 字节B 二进制8位 1KB 210B 1024B1MB 220B 1GB 230B进制的表示二进制数用B或b结尾十进制数可不用结尾字母 也可用D或d结尾十六进制数用H或h结尾 返回 世界上第一台计算机ENIAC Intel4004和采用4004的计算器 返回 Apple微型计算机 Apple I Apple II 返回 IBMPC系列机 8088CPU IBMPC机 IBMPC AT机 IBMPC XT机 返回 英特尔微处理器芯片 80386 Pentium Pentium4 返回 明确3个概念的区别 微处理器 Microprocessor 一个大规模集成电路芯片内含控制器 运算器和寄存器等微机中的核心芯片微型计算机 Microcomputer 通常指微型计算机的硬件系统还有一般的说法 微机 微型机微型计算机系统 Microcomputersystem 指由硬件和软件共同组成的完整的计算机系统 返回 Intel80 x86CPU的地址线条数 Intel80 x86地址条数存储容量8086201MB8088201MB802862416MB80386324GB Pentium4 返回 Intel80 x86CPU的数据线条数 Intel80 x86数据位数80861680888802861680386 Pentium432 返回 系统总线的使用特点 除了CPU外 还有DMA控制器和协处理器都具有控制系统总线的能力 它们被称为 总线主控设备 在某一个时刻 只能由一个总线主控设备来控制系统总线在连接系统总线的各个设备中 某一个时刻只能有一个发送者向总线发送信号 但可以有多个设备从总线上同时获得信号 返回 第二章 微处理器 微处理器主要的性能指标 主频 第二章 外频 工作电压 制造工艺 地址线宽度 数据线宽度 内置协处理器 微处理器飞速发展 80386 80486 奔腾 奔腾2代 奔腾4代 80286 8086 奔腾3代 IA 64 安腾 4004 2 18086 8088微处理器 Intel公司1978年推出8086 1979年推出8088 于1981年用于IBMPC XT中 2 118086 8088的内部结构 一 总线接口部件BIU BusinterfaceUnit 二 执行部件 ExecutionUnit 结构 第2章 2 1 28088 8086的功能结构 8088的内部结构从功能上分成两个单元1 总线接口单元BIU管理8088与系统总线的接口负责CPU对存储器和外设进行访问2 执行单元EU负责指令的译码 执行和数据的运算两个单元相互独立 分别完成各自操作 还可以并行执行 实现指令预取 指令读取和执行的流水线操作 第2章 2 1 38088 8086的寄存器结构 8088 8086的寄存器组有8个通用寄存器4个段寄存器1个标志寄存器1个指令指针寄存器他们均为16位 图示 汇编语言程序员看到的处理器 就是寄存器所以 一定要熟悉这些寄存器的名称和作用 第2章 1 通用寄存器 8088有8个通用的16位寄存器 1 数据寄存器 AXBXCXDX 2 变址寄存器 SIDI 3 指针寄存器 BPSP4个数据寄存器还可以分成高8位和低8位两个独立的寄存器 这样又形成8个通用的8位寄存器AX AHALBX BHBLCX CHCLDX DHDL 内部结构 第2章 1 数据寄存器 AX称为累加器 Accumulator 使用频度最高 用于算术 逻辑运算以及与外设传送信息等BX称为基址寄存器 BaseaddressRegister 常用做存放存储器地址CX称为计数器 Counter 作为循环和串操作等指令中的隐含计数器DX称为数据寄存器 Dataregister 常用来存放双字长数据的高16位 或存放外设端口地址 第2章 1 数据寄存器 AX称为累加器 Accumulator 使用频度最高 用于算术 逻辑运算以及与外设传送信息等BX称为基址寄存器 BaseaddressRegister 常用做存放存储器地址CX称为计数器 Counter 作为循环和串操作等指令中的隐含计数器DX称为数据寄存器 Dataregister 常用来存放双字长数据的高16位 或存放外设端口地址 内部结构 第2章 2 变址寄存器 16位变址寄存器SI和DI常用于存储器变址寻址方式时提供地址SI是源地址寄存器 SourceIndex DI是目的地址寄存器 DestinationIndex 在串操作类指令中 SI DI还有较特殊的用法 现在不必完全理解 以后会详细展开 内部结构 第2章 3 指针寄存器 指针寄存器用于寻址内存堆栈内的数据SP为堆栈指针寄存器 StackPointer 指示堆栈段栈顶的位置 偏移地址 BP为基址指针寄存器 BasePointer 表示数据在堆栈段中的基地址SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址 堆栈 Stack 是主存中一个特殊的区域 采用 先进后出 或 后进先出 存取操作方式 而不是随机存取方式 用8088 8086形成的微机系统中 堆栈区域被称为堆栈段 内部结构 第2章 2 指令指针寄存器 IP InstructionPointer 为指令指针寄存器 指示主存储器指令的位置随着指令的执行 IP将自动修改以指示下一条指令所在的存储器位置IP寄存器是一个专用寄存器IP寄存器与CS段寄存器联合使用以确定下一条指令的存储单元地址 内部结构 第2章 3 标志寄存器 标志 Flag 用于反映指令执行结果或控制指令执行形式8088处理器的各种标志形成了一个16位的标志寄存器FLAGS 程序状态字PSW寄存器 程序设计需要利用标志的状态 内部结构 第2章 标志寄存器 分类 状态标志 用来记录程序运行结果的状态信息 许多指令的执行都将相应地设置它CFZFSFPFOFAF控制标志 可由程序根据需要用指令设置 用于控制处理器执行指令的方式DFIFTF 标志寄存器FLAGS 存储 内部结构 第2章 进位标志CF CarryFlag 当运算结果的最高有效位有进位 加法 或借位 减法 时 进位标志置1 即CF 1 否则CF 0 3AH 7CH B6H 没有进位 CF 0AAH 7CH 1 26H 有进位 CF 1 第2章 零标志ZF ZeroFlag 若运算结果为0 则ZF 1 否则ZF 0 3AH 7CH B6H 结果不是零 ZF 084H 7CH 1 00H 结果是零 ZF 1 注意 ZF为1表示的结果是0 第2章 符号标志SF SignFlag 运算结果最高位为1 则SF 1 否则SF 0 3AH 7CH B6H 最高位D7 1 SF 184H 7CH 1 00H 最高位D7 0 SF 0 有符号数据用最高有效位表示数据的符号所以 最高有效位就是符号标志的状态 第2章 奇偶标志PF ParityFlag 当运算结果最低字节中 1 的个数为零或偶数时 PF 1 否则PF 0 3AH 7CH B6H 10110110B结果中有5个 1 是奇数 PF 0 PF标志仅反映最低8位中 1 的个数是偶或奇 即使是进行16位字操作 第2章 溢出标志OF OverflowFlag 若算术运算的结果有溢出 则OF 1 否则OF 0 3AH 7CH B6H 产生溢出 OF 1AAH 7CH 1 26H 没有溢出 OF 0 返回 第2章 什么是溢出 处理器内部以补码表示有符号数8位表达的整数范围是 127 12816位表达的范围是 32767 32768如果运算结果超出这个范围 就产生了溢出有溢出 说明有符号数的运算结果不正确 3AH 7CH B6H 就是58 124 182 已经超出 128 127范围 产生溢出 故OF 1 补码B6H表达真值是 74 显然运算结果也不正确 B6H 10110110B 最高位为1 作为有符号数是负数对B6H求反加1等于 01001001B 1 01001010B 4AH 74所以 B6H表达有符号数的真值为 74 第2章 溢出和进位的区别 溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围 运算结果仍然正确溢出标志表示有符号数运算结果是否超出范围 运算结果已经不正确 第2章 溢出和进位的对比 例1 3AH 7CH B6H无符号数运算 58 124 182范围内 无进位有符号数运算 58 124 182范围外 有溢出 例2 AAH 7CH 1 26H无符号数运算 170 124 294范围外 有进位有符号数运算 86 124 28范围内 无溢出 第2章 溢出和进位的应用场合 处理器对两个操作数进行运算时 按照无符号数求得结果 并相应设置进位标志CF 同时 根据是否超出有符号数的范围设置溢出标志OF应该利用哪个标志 则由程序员来决定 也就是说 如果将参加运算的操作数认为是无符号数 就应该关心进位 认为是有符号数 则要注意是否溢出 第2章 溢出的判断 判断运算结果是否溢出有一个简单的规则 只有当两个相同符号数相加 包括不同符号数相减 而运算结果的符号与原数据符号相反时 产生溢出 因为 此时的运算结果显然不正确其他情况下 则不会产生溢出 例1 3AH 7CH B6H溢出例2 AAH 7CH无溢出例3 3AH 7CH无溢出例4 AAH 7CH 2DH溢出 返回 第2章 辅助进位标志AF AuxiliaryCarryFlag 3AH 7CH B6H D3有进位 AF 1 运算时D3位 低半字节 有进位或借位时 AF 1 否则AF 0 这个标志主要由处理器内部使用 用于十进制算术运算调整指令中 用户一般不必关心 第2章 方向标志DF DirectionFlag 用于串操作指令中 控制地址的变化方向 设置DF 0 存储器地址自动增加 设置DF 1 存储器地址自动减少 CLD指令复位方向标志 DF 0STD指令置位方向标志 DF 1 第2章 中断允许标志IF Interrupt enableFlag 控制可屏蔽中断是否可以被处理器响应 设置IF 1 则允许中断 设置IF 0 则禁止中断 CLI指令复位中断标志 IF 0STI指令置位中断标志 IF 1 第2章 陷阱标志TF TrapFlag 用于控制处理器进入单步操作方式 设置TF 0 处理器正常工作 设置TF 1 处理器单步执行指令 单步执行指令 处理器在每条指令执行结束时 便产生一个编号为1的内部中断这种内部中断称为单步中断所以TF也称为单步标志利用单步中断可对程序进行逐条指令的调试这种逐条指令调试程序的方法就是单步调试 第2章 2 1 48088 8086的存储器结构 存储器是计算机存储信息的地方 掌握数据存储格式 以及存储器的分段管理对以后的汇编程序设计非常重要你能区别寄存器 存储器 主存 外存 包括硬盘 光盘 磁带等存储介质 吗 答案 第2章 寄存器 存储器和外存的区别 寄存器是微处理器 CPU 内部暂存数据的存储单元 以名称表示 例如 AX BX 等存储器也就是平时所说的主存 也叫内存 可直接与CPU进行数据交换 主存利用地址区别外存主要指用来长久保存数据的外部存储介质 常见的有硬盘 光盘 磁带 U盘等 外存的数据只能通过主存间接地与CPU交换数据程序及其数据可以长久存放在外存 在运行需要时才进入主存 第2章 1 数据的存储格式 计算机中信息的单位二进制位Bit 存储一位二进制数 0或1字节Byte 8个二进制位 D7 D0字Word 16位 2个字节 D15 D0双字DWord 32位 4个字节 D31 D0最低有效位LSB 数据的最低位 D0位最高有效位MSB 数据的最高位 对应字节 字 双字分别指D7 D15 D31位 图示 第2章 存储单元及其存储内容 每个存储单元都有一个编号 被称为存储器地址每个存储单元存放一个字节的内容 图示 0002H单元存放有一个数据34H表达为 0002H 34H 第2章 多字节数据存放方式 多字节数据在存储器中占连续的多个存储单元 存放时 低字节存入低地址 高字节存入高地址 表达时 用它的低地址表示多字节数据占据的地址空间 图2 5中0002H 字 单元的内容为 0002H 1234H0002H号 双字 单元的内容为 0002H 78561234H 80 x86处理器采用 低对低 高对高 的存储形式 被称为 小端方式LittleEndian 相对应还存在 大端方式BigEndian 图示 第2章 数据的地址对齐 同一个存储器地址可以是字节单元地址 字单元地址 双字单元地址等等 视具体情况来确定 字单元安排在偶地址 xxx0B 双字单元安排在模4地址 xx00B 等 被称为 地址对齐 Align 对于不对齐地址的数据 处理器访问时 需要额外的访问存储器时间应该将数据的地址对齐 以取得较高的存取速度 第2章 2 存储器的分段管理 8088CPU有20条地址线最大可寻址空间为220 1MB物理地址范围从00000H FFFFFH8088CPU将1MB空间分成许多逻辑段 Segment 每个段最大限制为64KB段地址的低4位为0000B这样 一个存储单元除具有一个唯一的物理地址外 还具有多个逻辑地址 第2章 物理地址和逻辑地址 8088CPU存储系统中 对应每个物理存储单元都有一个唯一的20位编号 就是物理地址 从00000H FFFFFH分段后在用户编程时 采用逻辑地址 形式为段基地址 段内偏移地址 分隔符 物理地址14700H逻辑地址1460H 100H 第2章 逻辑地址 段地址说明逻辑段在主存中的起始位置8088规定段地址必须是模16地址 xxxx0H省略低4位0000B 段地址就可以用16位数据表示 就能用16位段寄存器表达段地址偏移地址说明主存单元距离段起始位置的偏移量每段不超过64KB 偏移地址也可用16位数据表示 第2章 物理地址和逻辑地址的转换 将逻辑地址中的段地址左移4位 加上偏移地址就得到20位物理地址一个物理地址可以有多个逻辑地址 逻辑地址1460 100 1380 F00物理地址14700H14700H 第2章 3 段寄存器 8088有4个16位段寄存器CS 代码段 指明代码段的起始地址SS 堆栈段 指明堆栈段的起始地址DS 数据段 指明数据段的起始地址ES 附加段 指明附加段的起始地址每个段寄存器用来确定一个逻辑段的起始地址 每种逻辑段均有各自的用途 内部结构 CS SS DS ES 如何分配各个逻辑段 第2章 代码段寄存器CS CodeSegment 代码段用来存放程序的指令序列代码段寄存器CS存放代码段的段地址指令指针寄存器IP指示下条指令的偏移地址处理器利用CS IP取得下一条要执行的指令 第2章 堆栈段寄存器SS StackSegment 堆栈段确定堆栈所在的主存区域堆栈段寄存器SS存放堆栈段的段地址堆栈指针寄存器SP指示堆栈栈顶的偏移地址处理器利用SS SP操作堆栈顶的数据 第2章 数据段寄存器DS DataSegment 数据段存放运行程序所用的数据数据段寄存器DS存放数据段的段地址各种主存寻址方式 有效地址EA 得到存储器中操作数的偏移地址处理器利用DS EA存取数据段中的数据 第2章 附加段寄存器ES ExtraSegment 附加段是附加的数据段 也保存数据 附加段寄存器ES存放附加段的段地址各种主存寻址方式 有效地址EA 得到存储器中操作数的偏移地址处理器利用ES EA存取附加段中的数据串操作指令将附加段作为其目的操作数的存放区域 第2章 如何分配各个逻辑段 程序的指令序列必须安排在代码段程序使用的堆栈一定在堆栈段程序中的数据默认是安排在数据段 也经常安排在附加段 尤其是串操作的目的区必须是附加段数据的存放比较灵活 实际上可以存放在任何一种逻辑段中 演示 第2章 段超越前缀指令 没有指明时 一般的数据访问在DS段 使用BP访问主存 则在SS段默认的情况允许改变 需要使用段超越前缀指令 8088指令系统中有4个 CS 代码段超越 使用代码段的数据SS 堆栈段超越 使用堆栈段的数据DS 数据段超越 使用数据段的数据ES 附加段超越 使用附加段的数据 示例 第2章 段超越的示例 没有段超越的指令实例 MOVAX 2000H AX DS 2000H 从默认的DS数据段取出数据采用段超越前缀的指令实例 MOVAX ES 2000H AX ES 2000H 从指定的ES附加段取出数据 总结 第2章 段寄存器的使用规定 第2章 寄存器的总结 8088有8个8位通用寄存器 8个16位通用寄存器8088有6个状态标志和3个控制标志8088将1MB存储空间分段管理 有4个段寄存器 对应4种逻辑段8088有4个段超越前缀指令 用于明确指定数据所在的逻辑段 熟悉上述内容后 就可以进入下节 内部图 8088的内部结构 8088的指令执行过程 图2 58088的存储格式 低地址 LSB MSB 逻辑段的分配 8088的内部结构 1234 内部暂存器 IP ES SS DS CS 输入 输出控制电路 外部总线 执行部分控制电路 ALU 标志寄存器 AHAL BHBL CHCL DHDL SP BP SI DI 通用寄存器 地址加法器 指令队列 执行部件 EU 总线接口部件 BIU 16位 20位 8位 8位 返回 返回 8088的指令执行过程 第2章 指令系统 第2章 2 28088 8086的寻址方式 从8088 8086的指令格式入手 论述 立即数寻址方式寄存器寻址方式存储器寻址方式进而熟悉8088 8086汇编语言指令格式 尤其是其中操作数的表达方法为展开8088 8086指令系统做好准备 第2章 指令的组成 操作码说明计算机要执行哪种操作 如传送 运算 移位 跳转等操作 它是指令中不可缺少的组成部分操作数是指令执行的参与者 即各种操作的对象有些指令不需要操作数 通常的指令都有一个或两个操作数 也有个别指令有3个甚至4个操作数 第2章 指令的助记符格式 操作数2 常被称为源操作数src 它表示参与指令操作的一个对象操作数1 成被称为目的操作数dest 它不仅可以作为指令操作的一个对象 还可以用来存放指令操作的结果分号后的内容是对指令的解释 操作码操作数1 操作数2 注释 汇编语句格式 第2章 指令的操作码和操作数 每种指令的操作码 用一个助记符表示 指令功能的英文缩写 对应着机器指令的一个或多个二进制编码指令中的操作数 可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址 第2章 操作数的寻址方式 指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做 操作数 寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式一方面 会影响处理器执行指令的速度和效率另一方面 对程序设计也很重要 MOV指令 第2章 2 2 1立即数寻址方式 指令中的操作数直接存放在机器代码中 紧跟在操作码之后 操作数作为指令的一部分存放在操作码之后的主存单元中 这种操作数被称为立即数imm可以是8位数值i8 00H FFH 也可以是16位数值i16 0000H FFFFH 立即数寻址方式常用来给寄存器和存储单元赋值 多以常量形式出现 演示 MOVAX 0102H AX 0102H 第2章 2 2 2寄存器寻址方式 操作数存放在CPU的内部寄存器reg中 8位寄存器r8 AH AL BH BL CH CL DH DL16位寄存器r16 AX BX CX DX SI DI BP SP4个段寄存器seg CS DS SS ES寄存器名表示其内容 操作数 演示 MOVAX BX AX BX 第2章 2 2 3存储器寻址方式 操作数在主存储器中 用主存地址表示程序设计时 8088采用逻辑地址表示主存地址段地址在默认的或用段超越前缀指定的段寄存器中指令中只需给出操作数的偏移地址 有效地址EA 8086设计了多种存储器寻址方式1 直接寻址方式2 寄存器间接寻址方式3 寄存器相对寻址方式4 基址变址寻址方式5 相对基址变址寻址方式 第2章 1 直接寻址方式 直接寻址方式的有效地址在指令中直接给出默认的段地址在DS段寄存器 可使用段超越前缀改变用中括号包含有效地址 表达存储单元的内容 演示 MOVAX 2000H AX DS 2000H MOVAX ES 2000H AX ES 2000H 第2章 2 寄存器间接寻址方式 有效地址存放在基址寄存器BX或变址寄存器SI DI中默认的段地址在DS段寄存器 可使用段超越前缀改变 演示 MOVAX BX AX DS BX 第2章 3 寄存器相对寻址方式 有效地址是寄存器内容与有符号8位或16位位移量之和 寄存器可以是BX BP或SI DI有效地址 BX BP SI DI 8 16位位移量段地址对应BX SI DI寄存器默认是DS 对应BP寄存器默认是SS 可用段超越前缀改变 演示 MOVAX SI 06H AX DS SI 06H MOVAX 06H SI AX DS SI 06H 第2章 4 基址变址寻址方式 有效地址由基址寄存器 BX或BP 的内容加上变址寄存器 SI或DI 的内容构成 有效地址 BX BP SI DI段地址对应BX基址寄存器默认是DS 对应BP基址寄存器默认是SS 可用段超越前缀改变 演示 MOVAX BX SI AX DS BX SI MOVAX BX SI AX DS BX SI 第2章 5 相对基址变址寻址方式 有效地址是基址寄存器 BX BP 变址寄存器 SI DI 与一个8位或16位位移量之和 有效地址 BX BP SI DI 8 16位位移量段地址对应BX基址寄存器默认是DS 对应BP基址寄存器默认是SS 可用段超越前缀改变 演示 MOVAX BX DI 6 AX DS BX DI 6 MOVAX 6 BX DI MOVAX 6 BX DI 第2章 存储器寻址方式中的变量 变量指示内存中的数据 变量名具有地址属性 存储器寻找方式中经常采用变量形式变量的定义WVARDW1234H 定义16位变量WVAR 具有初值1234H 假设其偏移地址为10H单独引用变量名是直接寻址方式MOVAX WVAR 指令功能 AX 1234H 等同于MOVAX 0010H 相对寻址方式中 变量名表示其偏移地址 相当于位移量MOVAX DI WVAR MOVAX WVAR DI 等同于MOVAX DI 0010H 第2章 相对寻址方式中的位移量 在寄存器相对和相对基址变址寻址方式中 其位移量不仅可用常量表示 也可用符号表示这个符号可以是变量名 例如WVAR变量 而且支持多种表达形式MOVAX DI WVAR 等同于MOVAX WVAR DI MOVAX BX SI WVAR 等同于MOVAX WVAR BX SI 等同于MOVAX WVAR BX SI 第2章 操作数的表达符号 1 第2章 操作数的表达符号 2 掌握操作数的寻址方式后 进入指令学习 汇编语言的两种语句格式 执行性语句 执行性语句用于表达处理器指令 也称为硬指令 汇编后对应一条指令代码 由处理器指令组成的代码序列是程序设计的主体标号 硬指令助记符操作数 操作数 注释 说明性语句 说明性语句用于表达伪指令 指示源程序如何汇编 变量怎样定义 过程怎么设置等名字伪指令助记符参数 参数 注释 MOV指令的功能 立即数寻址方式 寄存器寻址方式 直接寻址方式 间接寻址方式 相对寻址方式 基址变址寻址方式 相对基址变址寻址方式 第2章 指令系统 第2章 2 3数据传送类指令 数据传送是计算机中最基本 最重要的一种操作 传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外 均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA 第2章 2 3 1通用数据传送指令 提供方便灵活的通用传送操作有3条指令通用数据传送MOV数据交换XCHGAL与字节表间数据传送XLAT 第2章 1 传送指令MOV move 把一个字节或字的操作数从源地址传送至目的地址 MOVreg mem imm 立即数送寄存器或主存 MOVreg mem seg reg 寄存器送 段 寄存器或主存 MOVreg seg mem 主存送 段 寄存器 MOVreg mem seg 段寄存器送寄存器或主存 演示 MOV指令传送功能图解 第2章 MOV指令 立即数传送 movcl 4 cl 4 字节传送movdx 0ffh dx 00ffh 字传送movsi 200h si 0200h 字传送movbvar 0ah 字节传送 假设bvar是一个字节变量 定义如下 bvardb0movwvar 0bh 字传送 假设wvar是一个字变量 定义如下 wvardw0 明确指令是字节操作还是字操作 MOVreg mem imm 立即数送寄存器或主存 第2章 MOV指令 寄存器传送 movah al ah al 字节传送movbvar ch bvar ch 字节传送movax bx ax bx 字传送movds ax ds ax 字传送mov bx al bx al 字节传送 寄存器具有明确的字节和字类型 MOVreg mem seg reg 寄存器送 段 寄存器或主存 第2章 MOV指令 存储器传送 moval bx al ds bx movdx bp dx ss bp 0 movdx bp 4 dx ss bp 4 moves si es ds si 不存在存储器向存储器的传送指令 MOVreg seg mem 主存送 段 寄存器 第2章 MOV指令 段寄存器传送 mov si dsmovax ds ax dsmoves ax es ax ds 对段寄存器的操作不灵活 MOVreg mem seg 段寄存器送寄存器或主存 第2章 MOV指令传送功能图解 MOV指令也并非任意传送 非法指令的主要现象 CS 两个操作数的类型不一致 无法确定是字节量还是字量操作 两个操作数都是存储器 段寄存器的操作有一些限制 第2章 非法指令 两个操作数类型不一致 在绝大多数双操作数指令中 目的操作数和源操作数必须具有一致的数据类型 或者同为字量 或者同为字节量 否则为非法指令MOVAL 050AH 非法指令 修正 movax 050ahMOVSI DL 非法指令 修正 movdh 0 movsi dx 第2章 非法指令 无法确定是字节量还是字量操作 当无法通过任一个操作数确定是操作类型时 需要利用汇编语言的操作符显式指明MOV BX SI 255 非法指令 修正 movbyteptr bx si 255 byteptr说明是字节操作 movwordptr bx si 255 wordptr说明是字操作 第2章 非法指令 两个操作数都是存储器 8088指令系统除串操作指令外 不允许两个操作数都是存储单元 存储器操作数 MOVbuf2 buf1 非法指令 修正 假设buf2和buf1是两个字变量 movax buf1 movbuf2 ax 假设buf2和buf1是两个字节变量 moval buf1 movbuf2 al 第2章 非法指令 段寄存器的操作有一些限制 8088指令系统中 能直接对段寄存器操作的指令只有MOV等个别传送指令 并且不灵活MOVDS ES 非法指令 修正 movax es movds axMOVDS 100H 非法指令 修正 movax 100h movds axMOVCS SI 非法指令 指令存在 但不能执行 第2章 2 交换指令XCHG exchange 把两个地方的数据进行互换 寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据 XCHGreg reg mem reg reg mem 演示 例 第2章 例2 2数据交换 movax 1199h ax 1199hxchgah al ax 9911h 等同于xchgal ahmovwvar 5566h wvar是一个字量变量xchgax wvar ax 5566h wvar 9911h 等同于xchgwvar axxchgal byteptrwvar 1 ax 5599h wvar 6611h byteptrwvar 1 强制为字节量 只取高字节与AL类型交换 否则数据类型不匹配 第2章 3 换码指令XLAT translate 将BX指定的缓冲区中 AL指定的位移处的一个字节数据取出赋给AL 换码指令执行前 在主存建立一个字节量表格 内含要转换成的目的代码表格首地址存放于BX AL存放相对表格首地址的位移量换码指令执行后 将AL寄存器的内容转换为目标代码 XLAT al ds bx al 演示 第2章 2 3 2堆栈操作指令 堆栈是一个 后进先出FILO 或说 先进后出FILO 的主存区域 位于堆栈段中 SS段寄存器记录其段地址堆栈只有一个出口 即当前栈顶 用堆栈指针寄存器SP指定堆栈只有两种基本操作 进栈和出栈 对应两条指令PUSH和POP 图示 第2章 进栈指令PUSH 进栈指令先使堆栈指针SP减2 然后把一个字操作数存入堆栈顶部 PUSHr16 m16 seg SP SP 2 SS SP r16 m16 seg 演示 pushaxpush 2000h 第2章 出栈指令POP 出栈指令把栈顶的一个字传送至指定的目的操作数 然后堆栈指针SP加2 POPr16 m16 seg r16 m16 seg SS SP SP SP 2 popaxpopwvar 演示 第2章 堆栈操作的特点 堆栈操作的单位是字 进栈和出栈只对字量字量数据从栈顶压入和弹出时 都是低地址字节送低字节 高地址字节送高字节堆栈操作遵循先进后出原则 但可用存储器寻址方式随机存取堆栈中的数据堆栈段是程序中不可或缺的一个内存区 常用来临时存放数据传递参数保存和恢复寄存器 第2章 2 3 3标志操作指令 1 标志位操作指令CLC 复位进位标志 CF 0STC 置位进位标志 CF 1CMC 求反进位标志 CF CFCLD 复位方向标志 DF 0STD 置位方向标志 DF 1CLI 复位中断标志 IF 0STI 置位中断标志 IF 12 标志寄存器低字节与AH的传送指令3 标志寄存器出入堆栈指令 2 3 3标志寄存器传送指令 标志寄存器传送指令用来传送标志寄存器FLAGS的内容 方便进行对各个标志位的直接操作有2对4条指令低8位传送 LAHF和SAHF16位传送 PUSHF和POPF 标志低字节进出AH指令 LAHF AH FLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF ZF AF PF CF状态标志位分别送入AH的第7 6 4 2 0位 而AH的第5 3 1位任意 SAHF FLAGS的低字节 AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7 6 4 2 0位相应设置SF ZF AF PF CF标志 标志寄存器进出堆栈指令 PUSHF SP SP 2 SS SP FLAGSPUSHF指令将标志寄存器的内容压入堆栈 同时栈顶指针SP减2 POPF FLAGS SS SP SP SP 2POPF指令将栈顶字单元内容送标志寄存器 同时栈顶指针SP加2 例题 例 置位单步标志 pushf 保存全部标志到堆栈popax 从堆栈中取出全部标志orax 0100h 设置D8 TF 1 ax其他位不变pushax 将ax压入堆栈popf FLAGS AX 将堆栈内容取到标志寄存器 2 3 4地址传送指令 地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令LEA指针传送指令LDS和LES注意不是获取存储器单元的内容 有效地址传送指令LEA loadEA 将存储器操作数的有效地址传送至指定的16位寄存器中 例题 LEAr16 mem r16 mem的有效地址EA LEA 例 获取有效地址 movbx 0400hmovsi 3chleabx bx si 0f62h BX 0400h 003ch 0f62h 139EH 获得主存单元的有效地址 不是物理地址 也不是该单元的内容可以实现计算功能 LEA 指针传送指令 LDSr16 mem r16 mem DS mem 2LDS指令将主存中mem指定的字送至r16 并将mem的下一字送DS寄存器 LESr16 mem r16 mem ES mem 2LES指令将主存中mem指定的字送至r16 并将mem的下一字送ES寄存器 例题 例 地址指针传送 movwordptr 3060h 0100hmovwordptr 3062h 1450hlesdi 3060h es 1450h di 0100hldssi 3060h ds 1450h si 0100h mem指定主存的连续4个字节作为逻辑地址 32位的地址指针 送入DS r16或ES r16 2 3 5输入输出指令 8086通过输入输出指令与外设进行数据交换 呈现给程序员的外设是端口 Port 即I O地址8086用于寻址外设端口的地址线为16条 端口最多为216 65536 64K 个 端口号为0000H FFFFH每个端口用于传送一个字节的外设数据 输入输出寻址方式 8086的端口有64K个 无需分段 设计有两种寻址方式直接寻址 只用于寻址00H FFH前256个端口 操作数i8表示端口号间接寻址 可用于寻址全部64K个端口 DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式 输入指令IN 将外设数据传送给CPU内的AL AX INAL i8 字节输入 AL I O端口 i8直接寻址 INAL DX 字节输入 AL I O端口 DX间接寻址 INAX i8 字输入 AX I O端口 i8直接寻址 INAX DX 字输入 AX I O端口 DX间接寻址 IN 例题 例 输入字量 直接寻址 字节量输入inal 21hmovah alinal 20h 直接寻址 字量输入inax 20h 间接寻址 字量输入movdx 20hinax dx 两段功能相同字量数据传送实际上实现了连续的两个端口地址的字节量传送 IN 输出指令OUT 将CPU内的AL AX数据传送给外设 OUTi8 AL 字节输出 I O端口 AL i8直接寻址 OUTDX AL 字节输出 I O端口 AL DX间接寻址 OUTi8 AX 字输出 I O端口 AX i8直接寻址 OUTDX AX 字输出 I O端口 AX DX间接寻址 OUT 例题 例 输出字节量 间接寻址 字节量输出movdx 3fchmoval 80houtdx al OUT MOV指令的功能 XCHG指令的功能 XLAT指令的功能 堆栈的图示 SS SP 0000H 栈顶 存储器 高地址 堆栈段 INAL 21H OUT43H AL PUSH指令的功能 POP指令的功能 第2章 指令系统 第2章 2 4算术运算类指令 算术运算类指令用来执行二进制的算术运算 加减乘除 这类指令会根据运算结果影响状态标志 有时要利用某些标志才能得到正确的结果 使用他们时请留心有关状态标志重点掌握加法指令 ADD ADC INC减法指令 SUB SBB DEC CMP NEG 第2章 2 4 1加法和减法指令 加法指令 ADD ADC和INC减法指令 SUB SBB DEC NEG和CMP他们分别执行字或字节的加法和减法运算 除INC和DEC不影响CF标志外 其他按定义影响全部状态标志位操作数组合 运算指令助记符reg imm reg mem运算指令助记符mem imm reg 第2章 1 加和减指令 ADDdest src 加法 dest dest src ADD指令使目的操作数加上源操作数 和的结果送到目的操作数SUBdest src 减法 dest dest src SUB指令使目的操作数减去源操作数 差的结果送到目的操作数 第2章 例题2 7加法 movax 7348h AX 7348Haddal 27h AL 48H 27H 6FH AX 736FH OF 0 SF 0 ZF 0 PF 1 CF 0addax 3fffh AX 736FH 3FFFH B36EH OF 1 SF 1 ZF 0 PF 0 CF 0 第2章 例题2 7减法 subah 0f0h AH B3H F0H C3H AX C36EH OF 0 SF 1 ZF 0 PF 1 CF 1movwordptr 200h 0ef00h 200H EF00H 标志不变sub 200h ax 200H EF00H C36EH 2B92H OF 0 SF 0 ZF 0 PF 0 CF 0subsi si SI 0 OF 0 SF 0 ZF 1 PF 1 CF 0 第2章 2 带进位加和减指令 ADCdest src 加法 dest dest src CF ADC指令除完成ADD加法运算外 还要加上进位CF 结果送到目的操作数SBBdest src 减法 dest dest src CF SBB指令除完成SUB减法运算外 还要减去借位CF 结果送到目的操作数 第2章 3 比较指令CMP compare CMPdest src 做减法运算 dest src CMP指令将目的操作数减去源操作数 但差值不回送目的操作数比较指令通过减法运算影响状态标志 用于比较两个操作数的大小关系 cmpax bxcmpal 100 第2章 4 增量和减量指令 INCreg mem 增量 加1 reg mem reg mem 1DECreg mem 减量 减1 reg mem reg mem 1INC指令和DEC指令是单操作数指令与加法和减法指令实现的加1和减1不同的是 INC和DEC不影响CF标志 incsi si si 1decbyteptr si si si 1 第2章 5 求补指令NEG negtive NEGreg mem reg mem 0 reg memNEG指令对操作数执行求补运算 即用零减去操作数 然后结果返回操作数求补运算也可以表达成 将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG指令也是一个单操作数指令 第2章 2 4 3乘法和除法指令 乘法指令分无符号和有符号乘法指令MULreg mem 无符号乘法IMULreg mem 有符号乘法除法指令分无符号和有符号除法指令DIVreg mem 无符号除法IDIVreg mem 有符号除法 第2章 2 5位操作类指令 位操作类指令以二进制位为基本单位进行数据的操作当需要对字节或字数据中的各个二进制位操作时 可以考虑采用位操作类指令注意这些指令对标志位的影响1 逻辑运算指令ANDORXORNOTTEST2 移位指令SHLSHRSAR3 循环移位指令ROLRORRCLRCR 第2章 2 5 1逻辑运算指令 双操作数逻辑指令AND OR XOR和TEST设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 它们的操作数组合与ADD SUB等一样 运算指令助记符reg imm reg mem运算指令助记符mem imm reg单操作数逻辑指令NOT不影响标志位 操作数与INC DEC和NEG一样 NOTreg mem 第2章 逻辑与指令AND 对两个操作数执行逻辑与运算 结果送目的操作数 ANDdest src dest dest src 只有相 与 的两位都是1 结果才是1 否则 与 的结果为0 第2章 逻辑或指令OR 对两个操作数执行逻辑或运算 结果送目的操作数 ORdest src dest dest src 只要相 或 的两位有一位是1 结果就是1 否则 结果为0 第2章 逻辑异或指令XOR 对两个操作数执行逻辑异或运算 结果送目的操作数 XORdest src dest dest src 只有相 异或 的两位不相同 结果才是1 否则 结果为0 第2章 测试指令TEST 对两个操作数执行逻辑与运算 结果并不送目的操作数 仅按AND指令影响标志 TESTdest src dest src AND与TEST指令的关系 同SUB与CMP指令的关系一样 第2章 逻辑非指令NOT 对一个操作数执行逻辑非运算 NOTreg mem reg mem reg mem 按位取反 原来是 0 的位变为 1 原来是 1 的位变为 0 第2章 例2 6逻辑运算 moval 75h AL 75Handal 32h AL 30H CF OF 0 SF 0 ZF 0 PF 1oral 71h AL 71H CF OF 0 SF 0 ZF 0 PF 1xoral 0f1h AL 80H CF OF 0 SF 1 ZF 0 PF 0notal AL 7FH 标志不变 第2章 例2 17逻辑运算指令的应用 andbl 11110110b BL中D0和D3清0 其余位不变orbl 00001001b BL中D0和D3置1 其余位不变xorbl 00001001b BL中D0和D3求反 其余位不变 AND指令可用于复位某些位 同0相与 不影响其他位 OR指令可用于置位某些位 同1相或 不影响其他位 XOR指令可用于求反某些位 同1相异或 不影响其他位 第2章 2 5 2移位指令 将操作数移动一位或多位 分成逻辑移位和算术移位 分别具有左移或右移操作移位指令的第一个操作数是指定的被移位的操作数 可以是寄存器或存储单元 后一个操作数表示移位位数 该操作数为1 表示移动一位该操作数为CL CL寄存器值表示移位位数 移位位数大于1只能CL表示 按照移入的位设置进位标志CF 根据移位后的结果影响SF ZF PF 第2章 逻辑左移指令SHL SHLreg mem 1 CL reg mem左移1或CL位 最低位补0 最高位进入CF 演示 第2章 逻辑右移指令SHR SHRreg mem 1 CL reg mem右移1 CL位 最高位补0 最低位进入CF 演示 第2章 算术左移指令SAL SALreg mem 1 CL 与SHL是同一条指令 演示 第2章 算术右移指令SAR SARreg mem 1 CL reg mem右移1 CL位 最高位不变 最低位进入CF 演示 第2章 例2 18数据移位 movdx 6075h DX 0110000001110101Bshldx 1 DX 1100000011101010B CF 0 SF 1 ZF 0 PF 0sardx 1 DX 1110000001110101B CF 0 SF 1 ZF 0 PF 0shrdx 1 DX 0111000000111010B CF 1 SF 0 ZF 0 PF 1movcl 4 CL 4 标志不变sardx cl DX 0000011100000011B CF 1 SF 0 ZF 0 PF 1 第2章 例2 19将AL寄存器中的无符号数乘以10 xorah ah 实现AH 0 同时使CF 0shlax 1 AX 2 ALmovbx ax BX AX 2 ALshlax 1 AX 4 ALshlax 1 AX 8 ALaddax bx AX 8 AL 2 AL 10 AL 逻辑左移一位相当于无符号数乘以2逻辑右移一位相当于无符号数除以2 第2章 2 5 3循环移位指令 循环移位指令类似移位指令 但要将从一端移出的位返回到另一端形成循环 分为 ROLreg mem 1 CL 不带进位循环左移RORreg mem 1 CL 不带进位循环右移RCLreg mem 1 CL 带进位循环左移RCRreg mem 1 CL 带进位循环右移循环移位指令的操作数形式与移位指令相同 按指令功能设置进位标志CF 但不影响SF ZF PF AF标志 演示 演示 演示 演示 第2章 32位数据移位 将DX AX中32位数值左移一位shlax 1rcldx 1 考虑32位数据的右移等操作 SHL和SAL指令的功能 SHR指令的功能 SAR指令的功能 ROL指令的功能 ROR指令的功能 RCL指令的功能 RCR指令的功能
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!