




已阅读5页,还剩230页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章80 x86微处理器 3 180 x86微处理器简介3 28086 8088微处理器3 38086 8088存储器和I O组织3 4从80286到Pentium系列的技术发展 3 180 x86微处理器简介 80 x86微处理器是美国Intel公司生产的系列微处理器 该公司成立于1968年 1969年就设计了4位的4004芯片 1973年开发出8位的8080芯片 1978年正式推出16位的8086微处理器芯片 由此开始了Intel公司的80 x86系列微处理器的生产历史 本节简要介绍Intel公司80 x86系列微处理器的发展过程及其特性 表3 1给出了80 x86系列微处理器概况 下面通过对表中有关技术数据的分析来说明Intel80 x86系列微处理器的发展情况 表中 集成度 是指CPU芯片中所包含的晶体管数 主频 是指芯片所使用的主时钟频率 它直接影响计算机的运行速度 数据总线 是计算机中各个组成部件间进行数据传送时的公共通道 内数据总线宽度 是指CPU芯片内部数据传送的宽度 位数 外数据总线宽度 是指CPU与外部交换数据时的数据宽度 显然 数据总线位数越多 数据交换的速度就越快 地址总线 是在对存储器或I O端口进行访问时 传送由CPU提供的要访问的存储单元或I O端口的地址信息的总线 其宽度决定了处理器能直接访问的主存容量大小 如8086有20根地址线 使用这20根地址线上不同地址信息的组合 可直接对220 1M个存储单元进行访问 PentiumII有36根地址线 因此它可直接寻址的最大地址范围为236 64G 高速缓冲存储器Cache的使用 大大减少了CPU读取指令和操作数所需的时间 使CPU的执行速度显著提高 为了满足微型计算机对存储器系统高速度 大容量 低成本的要求 目前 微型计算机系统采用如图3 1所示的三级存储器组织结构 即由高速缓冲存储器Cache 主存和外存组成 表3 180 x86系列微处理器概况 当前正在执行的程序或要使用的数据必须从外存调入主存后才能被CPU读取并执行 主存容量通常为MB级 理论上可达GB级 如PentiumII可配置的内存最大容量可达236 64G 但事实上 基于成本和必要性考虑 目前 微型计算机内存配置一般都不会达到其理论允许值 当前没有使用的程序可存入外存 如硬盘 软盘 光盘等 外存的容量通常很大 可达GB甚至TB级 而高速缓冲存储器的最大特点是存取速度快 但容量较小 通常为KB级 将当前使用频率较高的程序和数据通过一定的替换机制从主存放入Cache CPU在取指令或读取操作数时 同时对Cache和主存进行访问 如果Cache命中 则终止对主存的访问 直接从Cache中将指令或数据送CPU处理 由于Cache的速度比主存快得多 因此 Cache的使用大大提高了CPU读取指令或数据的速度 图3 1存储器三级结构 80386之前的CPU都没有Cache 80386CPU内无Cache 而由与之配套使用的Intel82385Cache控制器实现CPU之外的Cache管理 80486之后的CPU芯片内部都集成了一至多个Cache 需要说明的是 80 x86CPU在发展过程中 存储器的管理机制发生了较大变化 8086 8088CPU对存储器的管理采用的是分段的实方式 80286CPU除了可在实方式下工作外 还可以在保护方式下工作 而80386CPU之后的处理器则具有三种工作方式 实方式 保护方式和虚拟8086方式 在保护方式下 机器可提供虚拟存储管理和多任务管理机制 虚拟存储的实现 为用户提供了一个比实际主存空间大得多的程序地址空间 从而可使用户程序的大小不受主存空间的限制 多任务管理机制的实现 可允许多个用户或一个用户的多个任务同时在机器上运行 从80386开始 微处理器除支持实方式和保护方式外 又增加了一种虚拟8086方式 在这种方式下 一台机器可以同时模拟多个8086处理器的工作 有关存储器管理机制的详细介绍 请参阅3 4 2 80 x86存储器管理 一节 3 28086 8088微处理器 8086是Intel系列的16位微处理器 使用HMOS工艺制造 芯片上集成了2 9万个晶体管 用单一的 5V电源供电 封装在标准的40引脚双列直插式管壳内 时钟频率5MHz 10MHz 8086有16条数据总线 可以处理8位或16位数据 有20条地址总线 可以直接寻址1M 220 字节的存储单元和64K个I O端口 在8086推出后不久 为方便原8位机用户 Intel公司很快推出了8088微处理器 其指令系统与8086完全兼容 CPU内部结构仍为16位 但外部数据总线是8位的 这样设计的目的主要是为了与原有的8位外围接口芯片兼容 并以8088为CPU组成了IBMPC PC XT等准16位微型计算机 由于其性能价格比高 很快占领了市场 3 2 18086 8088内部结构一 总线接口单元BIU总线接口单元BIU的功能是负责完成CPU与存储器或I O设备之间的数据传送 具体任务是 指令队列出现空字节 8088CPU1个空字节 8086CPU2个空字节 时 从内存取出后续指令 BIU取指令时 并不影响EU的执行 两者并行工作 大大提高了CPU的执行速度 EU需要从内存或外设端口读取操作数时 根据EU给出的地址从内存或外设端口读取数据供EU使用 EU的运算结果 数据或控制命令等由BIU送往指定的内存单元或外设端口 总线接口单元内有4个16位段寄存器 代码段寄存器CS CodeSegment 数据段寄存器DS DataSegment 堆栈段寄存器SS StackSegment 和附加数据段寄存器ES ExtraSegment 一个16位的指令指针寄存器IP InstructionPointer 一个20位地址加法器 6字节指令队列缓冲器 一个与EU通讯的内部寄存器以及总线控制电路等 图3 28086CPU内部结构框图 1 段寄存器8086CPU的地址引脚有20根 能提供20位的地址信息 可直接对1M个存储单元进行访问 但CPU内部可用来提供地址信息的寄存器都是16位的 那么如何用16位寄存器实现20位地址的寻址呢 8086 8088采用了段结构的内存管理的方法 将指令代码和数据分别存储在代码段 数据段 堆栈段 附加数据段中 这些段的段地址分别由段寄存器CS DS SS ES提供 而代码或数据在段内的偏移地址则由有关寄存器或立即数给出 代码段寄存器CS存储程序当前使用的代码段的段地址 代码段用来存放程序的指令代码 下一条要读取指令在代码段中的偏移地址由指令指针寄存器IP提供 数据段寄存器DS用来存放程序当前使用的数据段的段地址 一般来说 程序中所用到的原始数据 中间结果以及最终结果都存放在数据段中 如果程序中使用了字符串处理指令 则源字符串也存放在数据段中 堆栈段寄存器SS用来存放程序当前所使用的堆栈段的段地址 堆栈是在存储器中开辟的一个特定区域 详见3 3 4 堆栈操作 一节 附加数据段寄存器ES用来存放程序当前使用的附加数据段的段地址 附加数据段通常用于存放字符串操作时的目的字符串 程序员在编写汇编语言源程序时 应该按照上述规定将程序的各个部分放在规定的段内 每个源程序必须至少有一个代码段 而数据段 堆栈段和附加数据段则根据程序的需要决定是否设置 2 指令指针寄存器指令指针寄存器IP用来存放下一条要读取的指令在代码段中的偏移地址 IP在程序运行中能自动加1修正 从而使其始终存放的是下一条要读取的指令在代码段的偏移地址 由于CS和IP的内容决定了程序的执行顺序 因此程序员不能直接用赋值指令对其内容进行修改 有些指令能使IP和CS的值改变 如跳转指令 或使其值压入堆栈或从堆栈中弹出恢复原值 如子程序调用指令和返回指令 3 20位地址加法器8086 8088CPU在对存储单元进行访问以读取指令或读 写操作数时 必须在地址总线上提供20位的地址信息 以便选中对应的存储单元 那么 CPU是如何产生20位地址的呢 CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的 存储器中每个存储单元的地址可有以下两种表示方式 逻辑地址 其表达形式为 段地址 段内偏移地址 段内偏移地址又称为 有效地址EA EffectiveAddress 在读指令时 段地址由代码段寄存器CS提供 当前要读取指令在代码段中的偏移地址由指令指针寄存器IP提供 在读取或存储操作数时 根据具体操作 段地址由DS ES或SS提供 段内偏移地址由指令给出 物理地址 CPU与存储器进行数据交换时在地址总线上提供的20位地址信息称为物理地址 物理地址的形成过程如图3 3所示 当由IP提供或由EU根据指令所提供寻址方式计算出寻址单元的16位段内偏移地址后 把该偏移地址和段寄存器内容左移四位后 相当于乘以10H 得到的段基址 段内第一个存储单元的物理地址 同时送到BIU中的地址加法器 形成一个20位的物理地址 从而实现对存储单元的访问 由逻辑地址求物理地址的公式为 物理地址 段地址 10H 段内偏移地址如假设当前 CS 20A8H IP 2008H 那么 下一条从内存中读取的指令所在存储单元的物理地址为 20A8H 10H 2008H 22A88H 图3 3物理地址的形成 4 指令队列缓冲器8086的指令队列有6个字节 8088的指令队列有4个字节 对8086而言 当指令队列出现2个空字节 对8088而言 指令队列出现1个空字节时 BIU就自动执行一次取指令周期 将下一条要执行的指令从内存单元读入指令队列 它们采用 先进先出 原则 按顺序存放 并按顺序取到EU中去执行 当EU执行一条需要到存储器或I O端口读取操作数的指令时 BIU将在执行完现行取指令的存储器周期后的下一个存储周期 对指令所指定的存储单元或I O端口进行访问 读取的操作数经BIU送EU进行处理 当EU执行跳转 子程序调用或返回指令时 BIU就使指令队列复位 并从指令给出的新地址开始取指令 新取的第1条指令直接经指令队列送EU执行 随后取来的指令将填入指令队列缓冲器 指令队列的引入使得EU和BIU可并行工作 即BIU在读指令时 并不影响EU单元执行指令 EU单元可以连续不断地直接从指令队列中取到要执行的指令代码 从而减少了CPU为取指令而等待的时间 提高了CPU的利用率 加快了整机的运行速度 二 执行单元EU执行单元EU不与系统外部直接相连 它的功能只是负责执行指令 执行的指令从BIU的指令队列缓冲器中直接得到 执行指令时若需要从存储器或I O端口读取操作数时 由EU向BIU发出请求 再由BIU对存储器或I O端口进行访问 EU由下列部件组成 1 16位算术逻辑单元 ALU 用于进行算术和逻辑运算 2 16位标志寄存器FLAGS 用来存放CPU运算的状态特征和控制标志 3 数据暂存寄存器 协助ALU完成运算 暂存参加运算的数据 4 通用寄存器 包括4个16位数据寄存器AX BX CX DX和4个16位指针与变址寄存器SP BP与SI DI 5 EU控制电路 它是控制 定时与状态逻辑电路 接收从BIU中指令队列取来的指令 经过指令译码形成各种定时控制信号 对EU的各个部件实现特定的定时操作 8088CPU内部结构与8086基本相似 两者的执行单元EU完全相同 其指令系统 寻址方式及程序设计方法都相同 所以两种CPU完全兼容 区别仅在于总线接口单元BIU 归纳起来主要有以下几个方面的差异 1 外部数据总线位数不同 8086外部数据总线16位 在一个总线周期内可以输入 输出一个字 16位数据 而8088外部数据总线8位 在一个总线周期内只能输入 输出一个字节 8位数据 2 指令队列缓冲器大小不同 8086指令队列可容纳6个字节 且在每一个总线周期中从存储器取出2个字节的指令代码填入指令队列 而8088指令队列只能容纳4个字节 在一个机器周期中取出一个字节的指令代码送指令队列 3 部分引脚的功能定义有所区别 3 2 28086 8088寄存器结构 图3 48086 8088CPU内部寄存器结构 一 通用寄存器通用寄存器包括四个数据寄存器 两个地址指针寄存器和两个变址寄存器 1 数据寄存器AX BX CX DX数据寄存器一般用于存放参与运算的操作数或运算结果 每个数据寄存器都是16位的 但又可将高 低8位分别作为两个独立的8位寄存器来用 高8位分别记作AH BH CH DH 低8位分别记作AL BL CL DL 例如AX可当作两个8位寄存器AH AL使用 注意 8086 8088CPU的14个寄存器除了这4个16位寄存器能分别当作两个8位寄存器来用之外 其它寄存器都不能如此使用 上述4个寄存器一般用来存放数据 但它们各自都有自己的特定用途 AX Accumulator 称为累加器 用该寄存器存放运算结果可使指令简化 提高指令的执行速度 此外 所有的I O指令都使用该寄存器与外设端口交换信息 BX Base 称为基址寄存器 8086 8088CPU中有两个基址寄存器BX和BP BX用来存放操作数在内存中数据段内的偏移地址 BP用来存放操作数在堆栈段内的偏移地址 CX Counter 称为计数器 在设计循环程序时使用该寄存器存放循环次数 可使程序指令简化 有利于提高程序的运行速度 DX Data 称为数据寄存器 在寄存器间接寻址的I O指令中存放I O端口地址 在做双字长乘除法运算时 DX与AX一起存放一个双字长操作数 其中DX存放高16位数 2 地址指针寄存器SP BPSP StackPointer 称为堆栈指针寄存器 在使用堆栈操作指令 PUSH或POP 对堆栈进行操作时 每执行一次进栈或出栈操作 系统会自动将SP的内容减2或加2 以使其始终指向栈顶 BP BasePointer 称为基址寄存器 作为通用寄存器 它可以用来存放数据 但更经常更重要的用途是存放操作数在堆栈段内的偏移地址 3 变址寄存器SI DISI SourceIndex 称为源变址寄存器 DI DestinationIndex 称为目的变址寄存器 这两个寄存器通常用在字符串操作时存放操作数的偏移地址 其中SI存放源串在数据段内的偏移地址 DI存放目的串在附加数据段内的偏移地址 二 段寄存器为了对1M个存储单元进行管理 8086 8088对存储器进行分段管理 即将程序代码或数据分别放在代码段 数据段 堆栈段或附加数据段中 每个段最多可达64K个存储单元 段地址分别放在对应的段寄存器中 代码或数据在段内的偏移地址由有关寄存器或立即数给出 8086 8088的四个段寄存器分别为 CS CodeSegment 称为代码段寄存器 用来存储程序当前使用的代码段的段地址 CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址 DS DataSegment 称为数据段寄存器 用来存放程序当前使用的数据段的段地址 DS的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址 SS StackSegment 称为堆栈段寄存器 用来存放程序当前所使用的堆栈段的段地址 堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区 主要用于调用子程序或执行中断服务程序时保护断点和现场 ES ExtraSegment 称为附加数据段寄存器 用来存放程序当前使用的附加数据段的段地址 附加数据段用来存放字符串操作时的目的字符串 表3 28086 8088段寄存器与提供段内移地址的寄存器之间的默认组合 三 控制寄存器IP InstructionPointer 称为指令指针寄存器 用来存放下一条要读取的指令在代码段内的偏移地址 用户程序不能直接访问IP FLAGS称为标志寄存器 它是一个16位的寄存器 但只用了其中9位 这9位包括6个状态标志位 3个控制标志位 如图3 5所示 图3 58086 8088的标志寄存器 1 状态标志位状态标志位用来反映算术和逻辑运算结果的一些特征 如结果是否为 0 是否有进位 借位 溢出等 不同指令对状态标志位的影响是不同的 下面分别介绍这6个状态标志位的功能 CF CarryFlag 进位标志 当进行加减运算时 若最高位发生进位或借位则CF为1 否则为0 通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围 PF ParityFlag 奇偶标志位 当指令执行结果的低8位中含有偶数个1时 PF为1 否则为0 AF AuxiliaryFlag 辅助进位标志位 当执行一条加法或减法运算指令时 若结果的低字节的低4位向高4位有进位或借位 则AF为1 否则为0 ZF ZeroFlag 零标志位 若当前的运算结果为0 则ZF为1 否则为0 SF SignFlag 符号标志位 当运算结果的最高位为1时 SF 1 否则为0 OF OverflowFlag 溢出标志位 当运算结果超出了带符号数所能表示的数值范围 即溢出时 OF 1 否则为0 用来判断带符号数运算结果是否溢出 例3 1设变量x 11101111B y 11001000B X 0101101000001010B Y 0100110010100011B 请问分别执行x y和X Y操作后标志寄存器中各状态位的状态如何 2 控制标志位控制标志位有3个 用来控制CPU的操作 由程序设置或清除 它们是 TF TrapFlag 跟踪 陷阱 标志位 它是为测试程序的方便而设置的 若将TF置1 8086 8088CPU处于单步工作方式 否则 将正常执行程序 IF InterruptFlag 中断允许标志位 是用来控制可屏蔽中断的控制标志位 若用STI指令将IF置1 表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号 若用CLI指令将IF清0 则禁止CPU接受可屏蔽中断请求信号 IF的状态对非屏蔽中断及内部中断没有影响 DF DirectionFlag 方向标志位 若用STD将DF置1 串操作按减地址方式进行 也就是说 从高地址开始 每操作一次地址自动递减 若用CLD将DF清0 则串操作按增地址方式进行 即每操作一次地址自动递增 注意 有关寄存器 尤其是在存储器寻址时用来存放操作数在段内偏移地址的地址寄存器和标志寄存器中各控制标志位的使用方法 将在后续章节中涉及到时还将进一步详细介绍 请读者务必熟练掌握 3 2 3总线周期的概念为了便于对8086 8088CPU引脚功能的说明 本节简要介绍总线周期的概念 8086 8088CPU在与存储器或I O端口交换数据时需要启动一个总线周期 按照数据的传送方向来分 总线周期可分为 读 总线周期 CPU从存储器或I O端口读取数据 和 写 总线周期 CPU将数据写入存储器或I O端口 8086 8088CPU基本的总线周期由4个时钟周期组成 如图3 6所示 时钟周期是CPU的基本时间计量单位 由CPU主频决定 如8086的主频为5MHz 1个时钟周期就是200ns 一个时钟周期又称为一个T状态 因此基本总线周期用T1 T2 T3 T4表示 图3 6 a 给出典型的总线周期波形图 在T1状态CPU把要读 写的存储单元的地址或I O端口的地址放到地址总线上 若是 写 总线周期 CPU从T2起到T4 把数据送到总线上 并写入存储器单元或I O端口 若是 读 总线周期 CPU则从T3起到T4从总线上接收数据 T2状态时总线浮空 允许CPU有个缓冲时间把输出地址的写方式转换成输入数据的读方式 图3 68086 8088基本总线周期 图3 6 b 是具有空闲状态的总线周期 如果在一个总线周期之后不立即执行下一个总线周期 即CPU此时执行的指令不需要对存储器或I O端口进行访问 且目前指令队列满而不需要到内存中读指令 那么系统总线就处于空闲状态 即执行空闲周期 在空闲周期中可包括一个或多个时钟周期 在这期间 在高4位的总线上 CPU仍驱动前一个总线周期的状态信息 而在低16位的总线上 则根据前一个总线周期是读还是写周期来决定 若前一个周期为写周期 CPU会在总线的低16位继续驱动数据信息 若前一个总线周期为读周期 CPU则使总线的低16位处于浮空状态 在空闲周期 尽管CPU对总线进行空操作 但在CPU内部 仍然进行着有效的操作 如执行某个运算 在内部寄存器之间传送数据等 图3 6 c 是具有等待状态的总线周期 在T3状态结束之前 CPU测试READY信号线 如果为有效的高电平 则说明数据已准备好 可进入T4状态 若READY为低电平 则说明数据没有准备好 CPU在T3之后插入1个或多个等待周期TW 直到检测到READY为有效高电平后 CPU会自动脱离TW而进入T4状态 这种延长总线周期的措施允许系统使用低速的存储器芯片 3 2 48086 8088引脚及其功能 图3 78086 8088CPU引脚 8086 8088芯片的引脚应包括20根地址线 16根 8086 或8根 8088 数据线以及控制线 状态线 电源线和地线等 若每个引脚只传送一种信息 那么芯片的引脚将会太多 不利于芯片的封装 因此 8086 8088CPU的部分引脚定义了双重功能 如第33引脚MN MX上电平的高低代表两种不同的信号 第31到24引脚在CPU处于两种不同的工作方式 最大工作方式和最小工作方式 时具有不同的名称和定义 引脚9到16 8088CPU 及引脚2到16和39 8086CPU 采用了分时复用技术 即在不同的时刻分别传送地址或数据信息等 一 8086CPU引脚8086CPU引脚按功能可分为三大类 电源线和地线 地址 数据引脚以及控制引脚 1 电源线和地线电源线VCC 第40引脚 输入 接入 10 单一 5V电源 地线GND 引脚1和20 输入 两条地线均应接地 2 地址 数据 状态 引脚地址 数据分时复用引脚AD15 AD0 AddressData 引脚39及引脚2 16 传送地址时单向输出 传送数据时双向输入或输出 地址状态分时复用引脚A19 S6 A16 S3 Address Status 引脚35 38 输出 三态总线 采用分时输出 即在T1状态作地址线用 T2 T4状态输出状态信息 当访问存储器时 T1状态输出A19 A15 与AD15 AD0一起构成访问存储器的20位物理地址 CPU访问I O端口时 不使用这4个引脚 A19 A16保持为0 状态信息中的S6为0用来表示8086CPU当前与总线相连 所以在T2 T4状态 S6总为0 以表示CPU当前连在总线上 S5表示中断允许标志位IF的当前设置 IF 1时 S5为1 否则为0 S4 S3用来指示当前正在使用哪个段寄存器 如表3 3所示 表3 3S4与S3组合代表的正在使用的寄存器 3 控制引脚 1 NMI Non MaskableInterrupt 引脚17 非屏蔽中断请求信号 输入 上升沿触发 此请求不受标志寄存器FLAGS中中断允许标志位IF状态的影响 只要此信号一出现 在当前指令执行结束后立即进行中断处理 2 INTR InterruptRequest 引脚18 可屏蔽中断请求信号 输入 高电平有效 CPU在每个指令周期的最后一个时钟周期检测该信号是否有效 若此信号有效 表明有外设提出了中断请求 这时若IF 1 则当前指令执行完后立即响应中断 若IF 0 则中断被屏蔽 外设发出的中断请求将不被响应 程序员可通过指令STI或CLI将IF标志位置1或清零 3 控制引脚 1 NMI Non MaskableInterrupt 引脚17 非屏蔽中断请求信号 输入 上升沿触发 此请求不受标志寄存器FLAGS中中断允许标志位IF状态的影响 只要此信号一出现 在当前指令执行结束后立即进行中断处理 2 INTR InterruptRequest 引脚18 可屏蔽中断请求信号 输入 高电平有效 CPU在每个指令周期的最后一个时钟周期检测该信号是否有效 若此信号有效 表明有外设提出了中断请求 这时若IF 1 则当前指令执行完后立即响应中断 若IF 0 则中断被屏蔽 外设发出的中断请求将不被响应 程序员可通过指令STI或CLI将IF标志位置1或清0 3 CLK Clock 引脚19 系统时钟 输入 它通常与8284A时钟发生器的时钟输出端相连 该时钟信号有效高电平与时钟周期的比为1 3 4 RESET 引脚21 复位信号 输入 高电平有效 复位信号使处理器马上结束现行操作 对处理器内部寄存器进行初始化 8086 8088要求复位脉冲宽度不得小于4个时钟周期 复位后 内部寄存器的状态如表3 4所示 系统正常运行时 RESET保持低电平 表3 4复位后内部寄存器的状态 5 READY 引脚22 数据 准备好 信号线 输入 它实际上是所寻址的存储器或I O端口发来的数据准备就绪信号 高电平有效 CPU在每个总线周期的T3状态对READY引脚采样 若为高电平 说明数据已准备好 若为低电平 说明数据还没有准备好 CPU在T3状态之后自动插入一个或几个等待状态TW 直到READY变为高电平 才能进入T4状态 完成数据传送过程 从而结束当前总线周期 6 引脚23 等待测试信号 输入 当CPU执行WAIT指令时 每隔5个时钟周期对引脚进行一次测试 若为高电平 CPU就仍处于空转状态进行等待 直到引脚变为低电平 CPU结束等待状态 执行下一条指令 以使CPU与外部硬件同步 7 Read 引脚32 读控制信号 输出 当 0时 表示将要执行一个对存储器或I O端口的读操作 到底是从存储单元还是从I O端口读取数据 取决于M 8086 或IO 8088 信号 8286为具有三态输出的8位数据总线收发器 用于需要增加驱动能力的系统 在8086系统中需要2片8286 而在8088系统中只用1片就可以了 系统中还有一个等待状态产生电路 它向8284A的RDY端提供一个信号 经8284A同步后向CPU的READY线发数据准备就绪信号 通知CPU数据已准备好 可以结束当前的总线周期 当READY 0时 CPU在T3之后自动插入TW状态 以避免CPU与存储器或I O设备进行数据交换时 因后者速度慢而丢失数据 图3 88086最小方式系统结构 8 HLDA HoldAcknowledge 引脚30 总线保持响应信号 输出 当CPU接收到HOLD信号后 这时如果CPU允许让出总线 就在当前总线周期完成时 在T4状态发出高电平有效的HLDA信号给以响应 此时 CPU让出总线使用权 发出HOLD请求的总线主设备获得总线的控制权 图3 98086最大方式系统结构 在最大方式下 第24 31引脚的功能如下 1 QS1 QS0 InstructionQueueStatus 引脚24 25 指令队列状态信号 输出 QS1 QS0两个信号电平的不同组合指明了8086 8088内部指令队列的状态 其代码组合对应的含义如表3 6所示 表3 6QS1 QS0的代码组合对应的含义 4 8088与8086引脚的区别8088与8086绝大多数引脚的名称和功能是完全相同的 仅有以下三点不同 1 AD15 AD0的定义不同 在8086中都定义为地址 数据分时复用引脚 而在8088中 由于只需要8条数据线 因此 对应于8086的AD15 AD8这8根引脚在8088中定义为A15 A8 它们在8088中只做地址线用 2 引脚34的定义不同 在最大方式下 8088的第34引脚保持高电平 而8086在最大方式下34引脚的定义与最小方式下相同 3 38086 8088存储器和I O组织 3 3 18086 8088存储器组织1 8086 8088存储空间8086 8088有20条地址线 可直接对1M个存储单元进行访问 每个存储单元存放一个字节型数据 且每个存储单元都有一个20位的地址 这1M个存储单元对应的地址为00000H FFFFFH 如图3 10所示 一个存储单元中存放的信息称为该存储单元的内容 如图3 10所示 00001H单元的内容为9FH 记为 00001H 9FH 图3 10数据在存储器中的存放 若存放的是字型数据 16位二进制数 则将字的低位字节存放在低地址单元 高位字节存放在高地址单元 如从地址0011FH开始的两个连续单元中存放一个字型数据 则该数据为DF46H 记为 0011FH DF46H 若存放的是双字型数据 32位二进制数 这种数一般作为地址指针 其低位字是被寻址地址的偏移量 高位字是被寻址地址所在段的段地址 这种类型的数据要占用连续的4个存储单元 同样 低字节存放在低地址单元 高字节存放在高地址单元 如从地址E800AH开始的连续4个存储单元中存放了一个双字型数据 则该数据为66A65E65H 记为 E800AH 66A65E65H 2 存储器的段结构8086 8088CPU中有关可用来存放地址的寄存器如IP SP等都是16位的 故只能直接寻址64KB 为了对1M个存储单元进行管理 8086 8088采用了段结构的存储器管理方法 8086 8088将整个存储器分为许多逻辑段 每个逻辑段的容量小于或等于64KB 允许它们在整个存储空间中浮动 各个逻辑段之间可以紧密相连 也可以互相重叠 用户编写的程序 包括指令代码和数据 被分别存储在代码段 数据段 堆栈段和附加数据段中 这些段的段地址分别存储在段寄存器CS DS SS和ES中 而指令或数据在段内偏移地址可由对应的地址寄存器或立即数给出 如表3 8所示 表3 8存储器操作时段地址和段内偏移地址的来源 如果从存储器中读取指令 则段地址来源于代码段寄存器CS 偏移地址来源于指令指针寄存器IP 如果从存储器读 写操作数 则段地址通常由数据段寄存器DS提供 必要时可通过指令前缀实现段超越 将段地址指定为由CS ES或SS提供 偏移地址则要根据指令中所给出的寻址方式确定 这时 偏移地址通常由寄存器BX SI DI以及立即数等提供 这类偏移地址也被称为 有效地址 EA 如果操作数是通过基址寄存器BP寻址的 则此时操作数所在段的段地址由堆栈段段寄存器SS提供 必要时也可指定为CS SS或ES 详见第4章 寻址方式 一节 如果使用堆栈操作指令 PUSH或POP 进行进栈或出栈操作 以保护断点或现场 则段地址来源于堆栈段寄存器SS 偏移地址来源于堆栈指针寄存器SP 详见本节 4 堆栈操作 如果执行的是字符串操作指令 则源字符串所在段的段地址由数据段寄存器DS提供 必要时可指定为CS ES或SS 偏移地址由源变址寄存器SI提供 目的字符串所在段的段地址由附加数据段寄存器ES提供 偏移地址由目的变址寄存器DI提供 以上这些存储器操作时段地址和偏移地址的约定是由系统设计时事先已规定好的 编写程序时必须遵守这些约定 3 逻辑地址与物理地址由于采用了存储器分段管理方式 8080 8088CPU在对存储器进行访问时 根据当前的操作类型 取指令或存取操作数 以及读取操作数时指令所给出的寻址方式 CPU就可确定要访问的存储单元所在段的段地址以及该单元在本段内的偏移地址 如表3 8所示 我们把通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址 记为 段地址 偏移地址 CPU在对存储单元进行访问时 必须在20位的地址总线上提供一个20位的地址信息 以便选中所要访问的存储单元 我们把CPU对存储器进行访问时实际寻址所使用的20位地址称为物理地址 物理地址是由CPU内部总线接口单元BIU中的地址加法器根据逻辑地址产生的 由逻辑地址形成20位物理地址的方法为 段地址 10H 偏移地址 其形成过程如图3 3所示 图3 11给出了存储器分段示意 如果当前的 IP 1000H 那么 下一条要读取的指令所在存储单元的物理地址为 CS 10H IP 1000H 10H 1000H 11000H如果某操作数在数据段内的偏移地址为8000H 则该操作数所在存储单元的物理地址为 DS 10H 8000H 2A0FH 10H 8000H 320F0H 图3 11存储器分段示意图 4 堆栈操作堆栈是在存储器中开辟的一个特定区域 堆栈在存储器中所处的段称为堆栈段 和其他逻辑段一样 它可在1MB的存储空间中浮动 其容量可达64KB 开辟堆栈的目的主要有以下两点 1 存放指令操作数 变量 此时 由于操作数在堆栈段中 对操作数进行访问时 段地址自然由堆栈段寄存器SS来提供 操作数在该段内的偏移地址由基址寄存器BP来提供 2 保护断点和现场 此为堆栈的主要功能 所谓保护断点 是指主程序在调用子程序或执行中断服务程序时 为了使执行完子程序或中断服务程序后能顺利返回主程序 必须把断点处的有关信息 如代码段寄存器CS的内容 需要时 指令指针寄存器IP的内容以及标志寄存器FLAGS的内容等 压入堆栈 执行完子程序或中断服务程序后按 先进后出 的原则将其弹出堆栈 以恢复有关寄存器的内容 从而使主程序能从断点处继续往下执行 保护断点的操作由系统自动完成 不需要程序员干预 保护现场是指将在子程序或中断服务程序中用到的寄存器的内容压入堆栈 在返回主程序之前再将其弹出堆栈 以恢复寄存器原有的内容 从而使其返回后主程序能继续正确执行 保护现场的工作要求程序员在编写子程序或中断服务程序时使用进栈指令PUSH和出栈指令POP完成 有关PUSH和POP指令的使用方法将在第4章 8086 8088指令系统 一节中介绍 下面简要介绍进栈和出栈操作的过程 在执行进栈和出栈操作时 段地址由堆栈段寄存器SS提供 段内偏移地址由堆栈指针寄存器SP提供 SP始终指向栈顶 当堆栈空时 SP指向栈底 如图3 12所示 设在存储器中开辟了100H个存储单元的堆栈段 当前 SS 2000H 堆栈空时 SP 0100H 即此时SP指向栈底 如图3 12 a 所示 由于PUSH和POP指令要求操作数为字型数据 因此 每进行一次进栈操作 SP值减2 如图3 12 b 所示 每进行一次出栈操作 SP值加2 如图3 12 c 所示 在进栈和出栈操作过程中 SP始终指向栈顶 图3 12进栈与出栈操作示意图 图3 138086存储器高低位库的连接 表3 98086存储器高低位库选择 图3 14从8086存储器的偶数和奇数地址读字节和字读偶地址单元中的字节 b 读奇地址单元中的字节 c 读偶地址单元中的字 d 读奇地址单元中的字 在8088系统中 可直接寻址的存储空间同样也是1MB 但其存储器的结构与8086有所不同 它的1MB存储空间同属于一个单一的存储体 即存储体为1M 8位 它与总线之间的连接方式很简单 其20根地址线A19 A0与8根数据线分别与8088CPU对应的地址线和数据线相连 8088CPU每访问一次存储器只能读 写一个字节信息 因此在8088系统的存储器中 字型数据需要两次访问存储器才能完成读 写操作 3 3 28086 8088的I O组织8086 8088系统和外部设备之间是通过I O接口电路来联系的 每个I O接口都有一个或几个端口 在微机系统中每个端口分配一个地址号 称为端口地址 一个端口通常为I O接口电路内部的一个寄存器或一组寄存器 8086CPU对I O设备的读 写操作与对存储器的读 写操作类似 当CPU与偶地址的I O设备实现16位数据的存取操作时 可在一个总线周期内完成 当CPU与奇地址的I O设备实现16位数据的存取操作时 要占用两个总线周期才能完成 需要说明的是 8086 8088CPU的I O指令可以用16位的有效地址A15 A0来寻址0000 FFFFH共64K个端口 但IBMPC系统中只使用了A9 A010位地址来作为I O端口的寻址信号 因此 其I O端口的地址仅为000 3FFH共1K个 3 4从80286到Pentium系列的技术发展 3 4 180 x86寄存器组寄存器在计算机中起着非常重要的作用 每个寄存器相当于运算器中的一个存储单元 但由于寄存器位于CPU内部 对它们进行访问时不需要启动一个总线周期 因此其存取速度要比存储器快得多 寄存器用来存放计算过程中所需要的或所得到的各种信息 包括操作数地址 操作数以及运算的中间结果等 对程序设计人员来讲 了解CPU内部寄存器结构并掌握其使用方法是进行汇编语言程序设计的关键和基础 寄存器可分为程序可见寄存器和程序不可见寄存器两大类 所谓程序可见寄存器 是指在汇编语言程序设计中可以通过指令来访问的寄存器 程序不可见寄存器是指一般用户程序中不能访问而由系统所使用的寄存器 本节将从程序设计角度介绍80 x86CPU内部程序可见寄存器的结构和使用方法 而对于那些程序不可见寄存器将在随后介绍CPU结构时对其做必要说明 从本章3 2 2节 8086 8088寄存器结构 中可以看出 8086 8088CPU中程序可见寄存器可分为三类 通用寄存器 段寄存器和控制寄存器 80286之后的CPU中寄存器同样也分为上述三类 只不过有关寄存器的功能和位数有所扩充而已 图3 15给出了80 x86的程序可见寄存器组 下面分别加以说明 1 通用寄存器 对于80386及其后续机型则是图3 15中所示的完整的寄存器 它们是32位的通用寄存器 包括EAX EBX ECX EDX ESP EBP ESI和EDI 这些寄存器可以用来存放不同宽度的数据 其中 EAX EBX ECX和EDX可作为32位寄存器来用 其低16位既可作为一个16位寄存器来用 分别记为AX BX CX和DX 也可作为两个8位寄存器来用 分别记为AH AL BH BL CH CL和DH DL ESP EBP ESI和EDI可作为32位寄存器来用 其低16位也可用做一个16位寄存器 分别记为SP BP SI和DI 需要注意的是 这些寄存器以字节或字的形式被访问时 不被访问的其他部分不受影响 如访问AH时 EAX的高16位和低8位不受影响 图3 1580 x86CPU内部程序可见寄存器组 此外 在8086 8088以及80286进行存储器寻址时 8个通用寄存器中只有地址指针寄存器 SP和BP 变址寄存器 SI和DI 以及基址寄存器BX这5个寄存器可以用来存放操作数在存储器段内的偏移地址 在80386及其后续机型中 所有这8个32位通用寄存器既可以存放数据 也可以存放地址 也就是说 这些寄存器都可以用来提供操作数在段内的偏移地址 对于这8个通用寄存器的专用特性 80386及其后续机型的32位通用寄存器的专用特性与8086 8088以及80286的16位通用寄存器的专用特性是相同的 如ECX的计数特性 ESI和EDI分别作为字符串操作指令中源串和目的串的地址寄存器等 2 控制寄存器8086 8088和80286的控制寄存器包括指令寄存器IP和FLAGS两个16位寄存器 80286中的这两个寄存器与前面介绍的8086 8088中相同 只不过80286中的标志寄存器FLAGS比8086 8088中的FLAGS多定义了两个标志 如图3 16所示 80386及其后续机型也有两个32位专用寄存器EIP和EFLAGS 它们的作用与相应的16位寄存器相同 标志寄存器FLAGS各位的定义如图3 16所示 其中新定义位的作用将在后面涉及时介绍 图3 1680 x86标志寄存器 3 段寄存器与8086 8088CPU相同 80286CPU中也有4个段寄存器CS DS SS和ES 它们的功能在本章前面 8086 8088寄存器结构 一节中已做了详细介绍 在此不再赘述 在80386及其以后的80 x86CPU中 除上述4个段寄存器外 又增加了2个段寄存器FS和GS 它们也是附加的数据段寄存器 如图3 15所示 除非专门指定 一般情况下 各段在存储器中的分配是由操作系统负责的 在80 x86中 段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系 这种默认关系 80286与8086 8088相同 见表3 2 80386及其后续CPU中段寄存器与提供段内偏移地址的寄存器之间的默认组合如表3 10所示 表3 1080386及其后续CPU中段寄存器与提供段内偏移地址的寄存器之间的默认组合 3 4 280 x86存储器管理存储器管理是由微处理器的存储器管理部件MMU提供的对系统存储器资源进行管理的机制 其目的是方便程序对存储器的应用 本节从应用角度出发 介绍80 x86系列微处理器的存储器管理机制 从8086 8088到Pentium 80 x86系列微处理器的存储器管理机制有了较大变化 8086 8088只有一种存储器管理方式 即实地址方式 简称实方式 80286CPU具有两种工作方式 即实方式和保护虚地址方式 简称保护方式 80386及其以后的CPU有三种工作方式 即实方式 保护方式和虚拟8086方式 1 实地址方式 简称实方式 实方式是80 x86系列CPU共有的存储器管理模式 而8086 8088CPU只能工作在此方式下 正如3 3节所介绍的那样 8086 8088CPU通过对存储器分段来实现对1M个存储器单元的直接访问 CPU中BIU单元的地址加法器根据指令中给出的段地址和段内偏移地址 通过将段地址乘以10H 16 即左移4位 再与段内偏移量相加得到一个20位的物理地址 该20位的物理地址加载到20位的地址总线上 即可实现对8086 8088系统1M个存储单元的访问 80286 80386 80486以及Pentium的地址总线位数分别增加为24 32 32 36 见表3 1 但在实方式下 它们都只能使用低20位地址线 它们所能寻址的存储空间与8086 8088一样 也只有1MB 在实方式下 CPU把从指令中得到的逻辑地址 段地址 段内偏移地址 转换为20位物理地址 不管CPU的实际地址引脚有多少根 在此方式下工作时 只能用其低20根地址线对1M个存储单元进行访问 2 保护虚拟地址方式 简称保护方式 在实方式下 80286及其后续CPU只相当于一个快速的8086 没有真正发挥这些高性能CPU的作用 而这些CPU的特点是能可靠地支持多用户系统 即使是单用户 也可支持多任务操作 这就要求用新的存储器管理机制 保护方式对存储器系统进行管理 1 虚拟存储器的概念虚拟存储器 VirtualMemory 是一种存储器管理技术 它提供比物理存储器大得多的存储空间 使程序设计人员在编写程序时 不用考虑计算机内存的实际容量 就可以编写并运行比实际配置的物理存储器空间大得多的用户程序 虚拟存储器由存储器管理机制以及一个大容量的快速硬盘存储器 内存 或光盘支持 在程序运行时 只把虚拟地址空间的一小部分映射到主存储器中 其余暂不使用部分则仍存储在硬盘上 当访问主存储器的范围发生变化时 再把虚拟存储器的对应部分从磁盘调入内存 而对主存中目前不再使用的部分 可根据一定的替换策略将其从主存储器送回到硬盘 虚拟存储器地址是一种概念性的逻辑地址 虚拟存储器系统是在存储器体系层次结构 辅存 主存 高速缓存 的基础上 通过CPU内的存储器管理部件MMU 进行虚拟地址和实地址自动变换而实现的 对每个编程者是透明的 变址空间很大 2 虚拟存储器的基本结构按照主存 或内存 与外存 辅助存储器 之间信息交换时信息传送单位的不同 虚拟存储器可分为段式虚拟存储器 页式虚拟存储器和段页式虚拟存储器三种 1 段式虚拟存储器 段是利用程序的模块化性质 按照程序的逻辑结构划分成的多个相对独立的部分 段作为独立的逻辑单位可被其他程序段调用 这样就形成段间连接 产生规模较大的程序 因此 把段作为信息单位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 本册综合教学设计-2025-2026学年小学信息技术(信息科技)四年级上册新世纪版
- 9《古代科技 耀我中华 》第2课时(教学设计)部编版道德与法治五年级上册
- 人教版初中历史与社会七年级上册 3.1.1 稻作文化的印记 说课稿
- 2025年中考生物试题分类汇编:生物与环境(第1期)解析版
- 8《升国旗》教学设计-2024-2025学年统编版语文一年级上册
- 第3课时三位数的减法(教学设计)-2024-2025学年三年级上册数学人教版
- 2025年全国中级育婴员职业技能考试A证题库(含答案)
- 2025年全国西式面点师(技师)理论考试题库(含答案)
- 蒸馒头劳动课课件
- 文库发布:蒸馏课件
- 2025年新华出版社有限责任公司招聘笔试参考题库含答案解析
- 2025至2030年中国老花眼镜数据监测研究报告
- 2024年达人直播带货运营协议书模板
- 《汽车电工电子》课程标准
- 血氧饱和度监测
- GB/T 23604-2024钛及钛合金产品力学性能试验取样方法
- 小学五年级家长会-主题班会
- 10kV线路施工应急预案
- 《植物细胞》教学课件
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 医学教材 肠内营养相关性腹泻的预防处置课件
评论
0/150
提交评论