CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt

上传人:max****ui 文档编号:6328372 上传时间:2020-02-22 格式:PPT 页数:40 大小:295.81KB
返回 下载 相关 举报
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第1页
第1页 / 共40页
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第2页
第2页 / 共40页
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
第二章IBMPC微型计算机2 18086 8088CPU的内部结构由于汇编语言是建立在机器指令基础之上的 是一种描述硬件运作的语言 所以要学习汇编语言 必须对它对应的硬件结构先作了解 特别是对于CPU 因为每一种CPU都有自己的指令系统 必须先对CPU的内部结构和工作机制作一个概要的理解 一般CPU由如下三个部分组成 1 控制器 计算机系统中控制所有功能部件 包括控制器本身 协同工作 自动执行计算机程序的功能部件 它通过对机器指令进行译码得到所需的控制信号 并根据时钟信号使各种控制信号在适当的时刻产生 从而产生一系列时序过程来完成指令所要求的操作 2 运算器 计算机系统中加工 处理数据的功能部件 其功能包括算术运算和逻辑运算 3 寄存器 CPU内部一般提供一组零散的存储单元 每一个存储单元都能存储二进制数据 并且都有自己独特的功能和相应的名称 这一组CPU内部的存储单元通常称为寄存器 8086和8088CPU内部结构大致是一致的 内部处理的最大二进制数都是16位的 只不过8086针对的数据总线是16位的 8088是8位的 也就是说 只是CPU的外部引脚有所区别 8086 8088CPU内部结构大致如教材上P18的图2 3所示 CPU中的寄存器 8086CPU中总共有14个物理寄存器 逻辑上的寄存器有22个 下面就它们的功能分别来讨论 参见教材P20图2 5 a 段寄存器 包括CS CodeSegment SS StackSegment DS DataSegment ES ExtraSegment 四个16位物理寄存器 用于存放程序所要使用的4个存储段的段基值 分别对应于内存中的四块存储区域 代码段 堆栈段 数据段 附加段 段 内存中一段连续的空间 在程序中具有特定的用途 每个程序都可能会使用这样四个段 其中代码段是必须的 实用的程序通常至少包含代码段 堆栈段 数据段 代码段用于存放程序的机器指令序列 堆栈段用于存放程序使用堆栈指令所保存的数据 自动保存的断点等信息 数据段存放程序直接使用的数据 附加段中的内容不确定 可以由程序开发人员根据实际需要自己决定 b 地址指针寄存器 包括BX SI DI BP SP IP五个16位寄存器 用于存放逻辑地址的偏移量或者偏移量的一部分 分量 其作用在寻址时类似于游标 通过相对于段基址的相对字节距离来定位具体的字节或字单元 BX称为基址寄存器 可以用于存放偏移量或者是偏移量的一部分 后面介绍指令寻址方式时会详细分析 通常和DS ES这两个段寄存器配合使用 用于定位数据段或附加段中的内存单元 SI称为源变址寄存器 用于存放偏移量或者是偏移量的一部分 通常和DS ES这两个段寄存器配合使用 用于定位数据段或附加段中的内存单元 在串操作指令中 SI用于指明源串偏移量 所以被称为源变址寄存器 DI称为目的变址寄存器 用于存放偏移量或者是偏移量的一部分 通常和DS ES这两个段寄存器配合使用 用于定位数据段或附加段中的内存单元 在串操作指令中 DI用于指明目的串偏移量 所以被称为目的变址寄存器 BP称为基址指针寄存器 用于存放偏移量 通常和SS段寄存器配合使用 用于定位堆栈段中的内存单元 SP称为堆栈指针 用于存放偏移量 只能和SS段寄存器配合使用 且始终指向堆栈的栈顶 在堆栈指令中隐含的使用它来定位栈顶数据 IP称为指令指针 用于存放偏移量 只能和CS段寄存器配合使用 且始终指向代码段中下一条将要读取到CPU指令队列的那条指令 修改IP中内容的操作是CPU在每读取一条指令到指令队列后自动进行的 使它指向要读取的下一条指令 跳转指令中可以隐含的修改IP寄存器中的内容 c 数据寄存器 包括AX BX CX DX这样4个16位的寄存器 在逻辑上一个16位的数据寄存器可以看成是3个寄存器 例如AX 可以把它作为一个16位的数据寄存器来使用 也可以把它的高低8位分开 高8位为AH寄存器 低8位为AL寄存器 在使用上要注意逻辑上不同的寄存器可能在物理上是相互覆盖的 这里的寄存器BX在上面提到过 它既可以用作数据寄存器 也可以用作地址指针寄存器 d 标志寄存器 8086CPU提供一个16位的标志寄存器FR 对这个寄存器的使用在指令中往往是隐含的 值得注意的是 FR是按位操作的 每一个二进制位都有自己特定的含义 具体每一位的含义可以参见教材P23的图2 8及其说明 一般在汇编语言程序中的运算指令或者标志位控制指令会影响特定标志位 可以通过转移指令来判断标志位的变化 从而实现程序中的分支结构或者循环结构 标志寄存器是实现程序中分支 循环结构的重要硬件基础 进位标志位CF CarryFlag 在CPU进行算术运算指令时 如果该指令要影响CF标志 并且用户把操作数看作无符号数 那么该标志位是有效标志 它标志着上次算术运算最高位 对字操作是第15位 字节是第7位 是否产生进位 加法指令 或者借位 减法指令 如果有进位或借位产生 那么CF 1 如果没有 那么CF 0 CF标志位位于FR的第0位 例1 观察下面的加减法运算 判断最后CF标志应该为什么值 注意 算术运算中的操作数必须理解为无符号数 这样CF标志的值才有意义 10110011 01010001100000100这次字节的加法运算后 最高位向更高一位产生了进位 CF应该等于1 00110000 00001101000111101这次字节的加法运算后 最高位没有向更高一位产生进位 CF应该等于0 01010101 00111110000010111这次字节的减法运算后 最后位没有向更高一位产生借位 CF应该等于0 奇偶标志位PF ParityFlag 如果CPU所执行的指令要影响PF标志 并且该指令得到的数据结果低8位中含有偶数个 1 时 PF 1 含有奇数个 1 PF 0 注意无论指令的操作数有多么长 只有低8位数据中1的个数能够影响到PF标志的取值 PF标志位位于FR的第2位 辅助进位标志位AF AuxiliaryCarryFlag 在CPU执行算术运算指令时 如果该指令要影响AF标志 并且用户把操作数看作无符号数 AF标志才有意义 如果低字节中的低4位向高4位产生进位或借位时 也就是第3位向第4位产生进位或借位 AF被置为1 如果低4位没有向高4位产生进位或借位 AF被置为0 AF标志 又称半进位标志 位于FR的第4位 判别标准 和CF一样 使用无符号数的加减运算来作判断 只是判断进位和借位的位置不在操作数的最高位 而是在低字节的第3位 4 零值标志位ZF ZeroFlag 如果CPU执行的指令要影响ZF标志 并且保证ZF标志是有意义的 那么当指令得到的结果数据各位全为 0 时 则ZF置 1 否则ZF置 0 ZF标志位位于FR的第6位 实用价值 ZF标志的使用主要是进行比较 并根据比较的结果来进行程序的分支或循环 例如 对两个整数进行比较 即对两个整数进行相减的操作 如果两个数是相等的 那么结果为0 ZF 1 如果不等 那么结果非0 ZF 0 5 符号标志位SF SignFlag 如果CPU执行的指令要影响SF标志 并且用户把指令得到的结果数据看作带符号数 那么当结果为负数时 SF置 1 当结果为正数时 SF置 0 也就是说 SF标志位的取值和结果数据的最高位是一致的 因为补码的最高位就是符号位 SF标志位位于FR的第7位 6 溢出标志位OF OverflowFlag 如果CPU执行算术运算指令 并且用户把操作数看作带符号数时 OF标志位的取值才有意义 如果运算结果超出了补码的表示范围 对字节来说 是 128到127 对字来说 是 32768到32767 那么解释为溢出 OF置为1 如果运算结果没有超出补码的表示范围 OF置为0 OF标志位位于FR的第11位 7 单步 或跟踪 标志位TF TraceFlag 前面讲到的标志位都属于状态标志位 是指令根据自己的执行情况而为后续指令留下的一些可供参考的状态信息 TF标志位是一个控制标志位 和前面所讲的标志位功能不同 它是用于触发单步中断的 如果使用指令将TF标志位置为1 那么CPU将进入单步执行指令的工作方式 每执行完一条指令就会触发单步中断 执行单步中断服务程序 一般会在屏幕上显示CPU内部各寄存器和标志位的状态 以便用户观察该指令产生的影响 进入中断时 TF标志会自动被清0 所以中断服务程序的执行并不会出现单步执行的情况 中断服务程序结束后TF标志会恢复中断以前的设置 TF标志为用户单步调试自己的程序提供了相应的硬件基础 如果使用指令将TF标志清0 那么将会使CPU退出单步运行模式 回到连续执行机器指令的状态 TF标志位位于FR的第8位 8 中断标志位IF Interrupt enableFlag 这也是一个控制标志位 用于控制CPU是否处理可屏蔽中断 如果使用指令将IF标志置为1 那么CPU将会处理任何可屏蔽中断 如果使用指令将IF标志置为0 那么CPU将不会处理可屏蔽中断 IF标志位位于FR的第9位 注意 IF标志只能屏蔽可屏蔽中断 对于一些由严重错误或故障引起的不可屏蔽中断则是无法屏蔽的 9 方向标志位DF DirectionFlag 这也是一个控制标志位 用于控制串操作指令存取数据的方向 如果使用指令将DF标志置为0 每执行完一次串操作以后 源串地址指针SI和目的串地址指针DI中的内容会自动递增 如果使用指令将DF标志置为1 那么每执行完一次串操作以后 SI和DI中的内容会自动递减 寄存器的分类可以参见教材P20图2 5 地址指针寄存器和数据寄存器统称为通用寄存器 总共有8个 除了各自特殊的功能外 它们都可以用于存放数据 指令指针和标志寄存器统称为控制寄存器 指令指针直接控制机器指令的执行流程 标志寄存器可以由标志位间接影响机器指令的执行流程或者运算结果 段寄存器用于指示当前运行程序中可以使用的4个当前段 主存储器2 2 18086 8088系统中主存储器的编址方式以及数据的存放方式主存储器就是前面提到的内部存储器 简称内存 它是以字节为单位进行存储单元编址的 也就是说 内存中每一个字节都有自己独一无二的地址 CPU读写内存中的数据最小单位为字节 8086 8088系统中地址线有20条 每个地址可以用20位的无符号二进制数来表示 为了表达方便 在程序中常常使用5位16进制数来表示内存单元的地址 系统的寻址范围为00000H到0FFFFFH 可以寻址1MB的内存空间 内存中字节的编址可以参见教材P24的图2 9 CPU访问内存中的数据 可以以字节为单位 也可以以字为单位 字节是基本单位 一个字数据 16位 在内存中将占据相邻的两个字节单元 数据的低8位存放在低地址单元 高8位存放在高地址单元 例1 把16位数据5342H放入地址为20000H的字单元 试说明其存放方式 20000H 42H20001H 53H 例2 参见教材P25图2 10 试说明CPU读取地址为10000H 10002H的字节单元时 将分别读取到什么样的数据 读取地址为10000H 10001H的字单元时 将分别读取到什么样的数据 10000H 56H 字节 10002H 12H 字节 10000H 3456H 字 10001H 1234H 字 内存中存放的数据可以看作字节数据 也可以看作字数据 具体以什么样的方式来访问内存单元中的数据关键在于编制程序的人如何来解释和使用内存中的数据 2 2 28086 8088系统中存储单元的地址及其表示方法8086和8088CPU都提供20条地址引脚 也就是说它的寻址范围为220个字节 即1MB的内存空间 但是 8086 8088内部寄存器和内部总线都只有16位 不能够直接形成20位的地址 CPU的设计者采用了一种分段管理内存的方法来解决这个问题 使用段寄存器来存放16位的段基值 无符号数 使用其他寄存器来存放16位的偏移量 也称有效地址EffectiveAddress 缩写为EA 为无符号数 由段基值和偏移量组成的内存单元地址表示形式称为逻辑地址 在CPU访问内存单元时会使用地址加法器来计算内存单元的地址 见教材P19 如图2 4 先把段基值左移4位 也就是在右边添上4个0 相当于乘以16 生成20位的段基址 然后加上16位的偏移量 就是要访问的内存单元地址 这种CPU在最终访问内存单元时使用的20位地址称为物理地址 一个段由它的段基址起始 即一个段的起始地址为段基址 这个起始地址由放在段寄存器中的段基值决定 注意段基址一定是可以被16整除的 因为它最后4个二进制位都为0 所以并不是所有的20位地址都可以作为段基址 只有能被16整除的地址可以作为段基址 这样的地址有1M 16 64K个 也就是说 在8086 8088系统的内存空间 最多可以组织64K个段 一个段的最大空间由16位偏移量决定 最大偏移量用16进制数表示为0FFFFH 换算为十进制可得到一个段的最大空间大小 为64KB 在汇编语言程序中 可以根据实际情况定义多个段 程序中的段按照其功能可以分为数据段 代码段 堆栈段 附加段
展开阅读全文
相关资源
相关搜索

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


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

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


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