微型计算机基本系统结构,微型计算机系统结构.ppt

微型计算机系统结构.ppt

第2章8086 8088微型计算机系统结构 2 1微型计算机系统组成原理 2 1 1计算机的硬件基本结构 冯 依曼型计算机的基本工作原理可分为程序存储和程序控制 在物理结构上 计算机由运算器 控制器 存储器以及输入设备和输出设备组成 计算机基本组成 运算器是对信息进行加工 运算的部件 负责执行算术运算和逻辑运算 控制器根据程序中的指令发出各种控制信号 使各部件协同工作以完成程序所要求的各种操作 通常把它们做在1块电路芯片上 称为中央处理器 简称CPU 计算机基本组成 寄存器是CPU内部的存储单元 作用是暂存需要反复使用的数据 计算机的存储器系统分为内存与外存 内存可与CPU真接相连 外存为软盘 硬盘 光盘等 它不可与CPU直接交换数据 其数据必须先读入内存才可被CPU使用 外存在CPU看来是一种I 0设备 CPU一般由寄存器阵列RS 算术逻辑运算单元ALU 控制器和内部总线及缓冲器组成 存储器是用来存放程序 原始数据和中间结果的记忆装置 8086 8088中这个寄存器称为IP 并且指向下一条要取出的指令而不是要执行的指令 计算机基本组成 输入设备 用于将程序和原始数据送入计算机中 如键盘 鼠标等 输出设备 用来输出运算结果或对外部设备的控制信号 如显示器 打印机等 输入设备和输出设备简称为I O设备 I O设备一般不与CPU直接相连 而是通过称为I O接口的电路与CPU相连 I O接口匹配双方的工作速度和转换不兼容的信号 整个内存储器系统由若干个存储单元组成 每个存储单元可存放8位二进制数 即1B 为了便于识别 每个存储单元都有1个编号 称为地址 地址采用几位二进制数编号 取决于CPU地址引脚的数目 例如 某CPU有8根地址线 则存储单元应用8位二进制数编号 8位二进制可表示28 256个数 故系统最多可有256个存储单元 如右图所示 微型计算机是在微处理器的控制下自动进行工作的 而微处理器发出控制的依据则是用户的程序指令 假设要进行如下运算 3 5 1 这一运算过程分如下步骤进行 1 取数3 2 取数5并做3 5运算 得结果8 3 取数1并做8 1运算 得结果7 4 保存运算结果到存储器中 5 停机 CPU能完成的1个基本动作称为指令 以上运算过程由5条指令实现 一条指令应包含两个部分 操作码 表示进行什么操作 如 加法 和操作数 参加运算的数据 如加法运算中的被加数和加数 这两部分在计算机内都用二进制数表示 也有少数指令没有操作数 它表示的动作不需要参数或使用固定的参数 在程序中 若需要处理的数据较多 将数据集中放在内存的一个地方 称为数据区 而将指令代码集中放在内存的另一个地方 称为代码区 当用户程序装入内存后 只要使程序计数器PC指向其代码区的起始位置 则下次CPU取指令时即取了用户程序的代码 从而开始执行用户程序 2 1 2计算机的基本工作原理 1 PC 00H 从地址00H处取一条指令 设第一条指令占2B 取出后PC自动加2 CPU随后执行所取指令 指令操作码指出应将操作数3放入累加器A内 2 PC 02H 从地址02H处取一条指令 设第二条指令占2B 取出后PC自动加2 CPU随后执行刚才所取指令 指令操作码指出应将操作数5与累加器A的内容相加 并将结果8暂存A内 3 PC 04H 从地址04H处取一条指令 设第三条指令占2B 取出后PC自动加2 CPU随后执行刚才所取指令 指令操作码指出应将累加器A内容与操作数1相减 结果7暂存在A内 4 PC 06H 从地址06H处取一条指令 设第四条指令占2B 取出后PC自动加2 CPU随后执行刚才所取指令 指令操作码指出应将累加器A中内容保存到操作数所指定的内存单元中 5 PC 08H 从地址08H处取一条指令 设第五条指令占1B 取出后PC自动加1 CPU随后执行刚才所取指令 该指令无操作数 指令操作码指出CPU应暂停 故CPU不再往下取指令 假设程序代码放在内存地址00H开始处 执行过程如下 8086的内部结构按功能分为 1 总线接口单元BIU 总线接口单元BIU是8086同存储器和I O设备之间的接口部件 负责对全部引脚的操作 即8086所有对存储器和I O设备的操作功能都是由BIU完成的 总线接口单元BIU由20位地址加法器 4个段寄存器 16位指令指针IP 指令队列缓冲器和总线控制逻辑电路等组成 2 2 18086CPU概述 2 28086的编程结构 2 执行单元EU 执行单元EU主要负责执行指令 它包含1个16位的运算器ALU 8个16位的寄存器 1个16位标志寄存器FLAGS 1个数据暂存寄存器和执行单元的控制电路 这个单元进行所有指令的解释和执行 同时管理上述有关的寄存器 8086中 BIU负责取指令 EU负责执行指令 若指令要求访问内存或I O设备 由EU请求BIU完成 BIU将指令机器码取到指令队列缓冲器中 6B 而与此同时EU可以从指令队列缓冲器中取出已有指令进行执行 这样使得取指令和执行指令可以同时进行 这种并行处理技术极大提高了8086的程序执行速度 当遇到转移 循环 子程序调用或返回等非顺序执行类指令时 需要清空指令队列缓冲器 这时EU要等待BIU重新取指令 8086CPU内部结构示意图 20位地址加法器 4个段寄存器 16位指令指针IP 指令队列缓冲器 总线控制逻辑电路 执行单元的控制电路 8个16位的寄存器 1个16位标志寄存器FLAGS 1个16位的运算器ALU 1个数据暂存寄存器 8086微处理器内部有14个16位寄存器 这14个寄存器分为三大类 8086寄存器 通用寄存器 数据寄存器 变址寄存器 指针寄存器 AX累加器 BX基数寄存器 CX计数寄存器 DX数据寄存器 SP堆栈指针寄存器 BP基址指针寄存器 SI源变址寄存器 DI目的变址寄存器 段寄存器 CS代码段寄存器 DS数据段寄存器 SS堆栈段寄存器 ES附加段寄存器 控制寄存器 IP指令指针寄存器 FLAG标志寄存器 2 2 28086寄存器结构 1 通用寄存器 通用寄存器用途比较广泛 一般用在算术和逻辑运算指令中 用来存放算术运算的源 目的操作数 某些通用寄存器还常用来存放存储器操作数的地址 通用寄存器共8个 包括数据寄存器4个 指针寄存器2个和变址寄存器2个 1 数据寄存器 数据寄存器有4个 这4个寄存器比较特殊 每个均既可作为1个16位寄存器使用 又可作为两个8位寄存器使用 当用作16位时 称为AX BX CX DX 当用作8位时 高8位分别称为AH BH CH DH 低8位分别称为AL BL CL DL 2 指针寄存器 指针寄存器有两个 均是16位寄存器 堆栈指针SP用以指出在堆栈操作中栈顶的位置 入栈 PUSH 和出栈 POP 指令要用到这一位置 基址指针BP指出要处理的数据在堆栈段中的基地址 故称为基址指针寄存器 3 变址寄存器 在字符串处理中 被处理的数据称为源操作数 它们的偏移地址存放在源变址寄存器SI中 而处理后的字符串的偏移地址则放在目的变址寄存器DI中 注意 8个通用寄存器一般均可用来存放指令的操作数或保存运算结果 但在某些操作中又必须专用某个寄存器 如I O操作时必须使用AX 循环指令中必须使用CX 指针和变址实际上是相同的概念 都是存储单元地址 一般指令中用来存放存储单元的地址可作用BX BP SI DI之一 但字符串操作指令中必须使用SI和DI 而堆栈操作中必须使用SP来存放栈顶单元地址 2 段寄存器 段寄存器是专用寄存器 用在存储器访问时存放段的基址 3 控制寄存器 1 指令指针寄存器 指令指针寄存器IP中存放着下一条要取出指令的偏移地址 它具有自动加1功能 每取出1B的指令机器码 它就自动加1 使它指向下一个要取的内存单元 这个寄存器由CPU内部使用 CPU正是利用此寄存器才确保程序中的指令能依次执行 程序中不可访问此寄存器 但某些指令具有隐含改变IP的功能 如转移 循环 调用子程序等指令 2 标志寄存器 OF溢出标志位 当补码运算有溢出时 OF为1 否则为0 标志寄存器FLAG是8086的1个重要寄存器 它是按位使用的 标志寄存器共16位 8086中只使用了9位 标志寄存器格式如下 状态标志位有6位 CPU在执行完1条影响标志寄存器的指令中 依据运算结果的状态对这些进行填写 程序员可用相关指令查看状态标志位从而得知运算结果的某些特点 2 2 3标志寄存器 控制标志位有3位 其作用是控制CPU执行程序的方式 程序员可用指令改变这些位的值 从而改变CPU运行程序的方式 DF方向标志位 用以指定字符串处理时的方向 当该位置1时 字符串以递减顺序处理 即地址以从高到低顺序递减 反之 则以递增顺序处理 IF中断允许标志位 用来控制8086是否允许接收外部可屏蔽中断请求 若IF 1 8086能响应外部可屏蔽中断请求 反之则不响应 TF跟踪标志位 是为调试程序而设定的陷井控制位 当该位置1时 8086处于单步状态 此时每执行完1条指令就自动产生1次内部中断 当该位复位后 8086恢复正常工作 SF符号标志位 它和运算结果的最高位相同 标志寄存器FLAG是8086的1个重要寄存器 它是按位使用的 标志寄存器共16位 8086中只使用了9位 标志寄存器格式如下 状态标志位有6位 CPU在执行完1条影响标志寄存器的指令中 依据运算结果的状态对这些进行填写 程序员可用相关指令查看状态标志位从而得知运算结果的某些特点 2 2 3标志寄存器 AF辅助进位标志位 当执行1次加法 或减法 运算使结果的低4位向高4位 若为16位运算 则是低8位向高8位 有进位 或借位 时 AF为1 否则为0 该位是为BCD码运算的调整指令而设的 ZF零标志位 若当前的运算结果为零 ZF为1 否则为0 PF奇偶标志位 该标志位反映运算结果中1的个数是偶数还是奇数 当指令执行结果的低8位中含有偶数个1时 PF为1 否则为0 CF进 借位标志位 当执行1次加法 或减法 运算使最高位向前产生进位 或借位 时 CF为1 否则为0 6个状态标志位的功能是 CF进 借位标志位 当执行1次加法 或减法 运算使最高位向前产生进位 或借位 时 CF为1 否则为0 PF奇偶标志位 该标志位反映运算结果中1的个数是偶数还是奇数 当指令执行结果的低8位中含有偶数个1时 PF为1 否则为0 AF辅助进位标志位 当执行1次加法 或减法 运算使结果的低4位向高4位 若为16位运算 则是低8位向高8位 有进位 或借位 时 AF为1 否则为0 该位是为BCD码运算的调整指令而设的 ZF零标志位 若当前的运算结果为零 ZF为1 否则为0 SF符号标志位 它和运算结果的最高位相同 OF溢出标志位 当补码运算有溢出时 OF为1 否则为0 01100100 100 01100100 100 11001000 10101011 85 11111111 1 110101010 D7向前无进位 故运算后CF 0 结果超过了 127 有溢出 故OF 1 D7向前有进位 故运算后CF 1 结果不小于 128 无溢出 故OF 0 进位标志用于无符号数的运算 而溢出标志用于带符号数的运算 注意不要混淆 如何判断A B两个数值型数据的大小 计算A B 有符号数 利用SF和OF判断 SF OF 0 即 SF与OF相同 A B SF OF 1 即 SF与OF相异 A B 无符号数 利用CF判断 CF 0 即 无借位 A B CF 1 即 有借位 A B DF方向标志位 用以指定字符串处理时的方向 当该位置1时 字符串以递减顺序处理 即地址以从高到低顺序递减 反之 则以递增顺序处理 IF中断允许标志位 用来控制8086是否允许接收外部可屏蔽中断请求 若IF 1 8086能响应外部可屏蔽中断请求 反之则不响应 TF跟踪标志位 是为调试程序而设定的陷井控制位 当该位置1时 8086处于单步状态 此时每执行完1条指令就自动产生1次内部中断 当该位复位后 8086恢复正常工作 3个控制标志位的功能是 2 3存储器的使用 2 3 1存储器的逻辑结构 每个存储器单元可存放1B的数据 即8位二进制数 每个存储单元要有1个惟一地址 以作为CPU访问时的标识 当CPU要访问某个存储单元时 CPU在地址总线上放上目标存储单元的地址 经过地址译码器译码 即可找到相应的单元 存储器结构示意图 在8086 8088系统中 1个多字节数据在内存中的存放规则为 高字节占高地址 低字节占低地址 并且用最低字节的地址代表这个数的地址 8086 8088CPU有20条地址线 因而其发出的地址信号是20位二进制数 由于每个地址对应1个存储单元 故存储单元的地址也是20位二进制数 由于20位二进制数写起来太长 所以人们一般改用等价的十六进制表示 即5位十六进制数 20位二进制数可表示220 1MB 因而8086 8088系统中存储单元的个数最多为1MB 即8086 8088的寻址空间为1MB 内存分段使用方案 分段 即将1MB的内存从逻辑上分为若干个小块 每个小块称为1个段 分段是逻辑上的概念 不是将内存硬件进行了物理分隔 所以不同的程序可以使用不同的的分段方法 而不会对物理内存造成影响 分段以后 对每个段的存储单元用16位数从0开始重新进行编址 这个地址称为段内偏移量 简称为偏移量 16位二进制数最多能寻址的空间为216 64KB 故1个段不能多于64K个存储单元 当段长度达到64KB时 偏移量的范围从0000H FFFFH 段内偏移量是16位的 解决了运算和存储的问题 但它仅描述了1个存储单元距离段内首单元的位置偏移 并不能用来绝对定位1个存储单元 但若知道了段内首单元的20位物理地址 配合偏移量则可实现对段内任一存储单元的绝对定位 2 3 2存储器的分段 第1条规则 第2条规则 1个段只有1个段基址 但每个单元各有自己的偏移量 1个段必须从物理地址的最末4位二进制数全为0 即十六进制数最末1位数为0 的单元开始 这样 段首单元只有前16位需要描述 这16位数称为段基址 段基址后再补上4个0 即乘以十六进制的10H 就是这个段首单元的物理地址 存储器分段 物理地址 这4位为段基址 偏移量 程序中用来描述存储单元位置的地址称为逻辑地址 逻辑地址的表示 段基址 偏移量如1234 0000H 1234 0001H等 由于逻辑地址是两个16位数 可分别被CPU所存储或运算 CPU最终必须使用物理地址来访问存储器 逻辑地址向物理地址的转换公式 物理地址 段基址 10H 偏移量 例如 逻辑地址1234 0001H表示的存储单元的物理地址为 1234 10H 0001H 12341H 1 段的长度 64K 2 段只能从物理地址低4位二进制数全为0的单元开始 分段的规则 8080 8088有4个段寄存器 其作用就是专门用来存放段基址 2 3 3段寄存器的使用 得出 1 内存可分为多个段 2 段长度可在16 64K个单元之间 3 段之间可以重叠 重叠部分的存储单元将有两个或更多个逻辑地址 但由这些逻辑地址运算出的物理地址是唯一的 存储单元的逻辑地址可用 段寄存器名 偏移量 来表示 如CS 0011H 只有段基址装入到段寄存器中 这个段内的存储单元才可被CPU所访问 SS 堆栈段寄存器 专门用来存放堆栈段的段基址 ES 附加段寄存器 用来存放附加数据段的段基址 当程序中的数据多于64KB时 仅用1个数据段放不下 此时可再设一附加数据段予以存放 当只有1个数据段时 也可将其段基址放入ES而不用DS 这样访问速度会慢一些 DS 数据段寄存器 用来存放数据段的段基址 程序中一般将所有要用到的数据集中在1个段内存放 这个段称为数据段 CS 代码段寄存器 指令机器码所在段的段基址必须装入到该寄存器中 它指出了下一条要取出的指令所在段的段基址 而指令指针寄存器IP内装的是下一条要取出的指令的段内偏移量 这两个寄存器配合给出了下一条要取指令的逻辑地址 CPU在取指令时 总是取自CS IP所指单元 8086 8088内部有专门的逻辑部件来完成将程序中提交的逻辑地址转换为真正访问存储器时所需的物理地址 这一部件称为20位地址加法器 地址加法器是将逻辑地址中的段寄存器左移4位 即后面添加4个0 相当于乘以10H 然后再加上逻辑地址中的偏移量 从而计算出物理地址 段寄存器 加法器 0000 20位地址加法器 段寄存器和偏移地址的寄存器的组合关系存放 堆栈是内存的一个逻辑段 当这个段被指定为堆栈后 可用堆栈操作指令对它进行特殊规则的访问 规则 不论入栈还是出栈 都只能在栈顶进行 堆栈内数据遵循先进后出 后进先出的原则 即最先入栈的数据最后出来 最后入栈的数据最先出来 数据出栈的顺序与入栈的顺序正好相反 SS用来存放堆栈段的段基址 由它可定位出堆栈段的起始位置 SP用于指示堆栈的顶部单元的段内偏移量 开始时堆栈内没有数据 栈顶就是栈底 故开始时要将栈底单元的偏移量赋给它 以指明栈底位置 随着不断入栈 出栈 SP不断变化 2 4堆栈 2 4 1堆栈的概念 2 4 2堆栈的设置 由于堆栈是从高地址向低地址方向增长的 且只能按字进行 故每次入栈 SP减2 每次出栈 SP加2 SP总是指向栈顶位置 例如 将物理地址为10000H 12000H的内存区域设置为堆栈段 只须令SS 1000H SP 2000H即可 用如下指令 MOVAX 1000HMOVSS AXMOVSP 2000H 主 子程序间的参数如何借助堆栈传递 主程序将参数依次用PUSH指令入栈 而子程序再用同样数的POP指令从堆栈中取出即可 这一过程中主 子程序均不用关心参数在内存中的具体位置 只须事先约定好参数的个数及顺序即可 8086 8088中堆栈操作必须以字为单位进行 堆栈中的数据在堆栈段中从地址高端向低端依次存放 堆栈操作指令包括入栈指令PUSH和出栈指令POP PUSH的功能 将16位操作数 可为通用寄存器 段寄存器或存储器 中的1个字数据压入堆栈中 POP的功能 将堆栈栈顶1个字的内容弹入操作数 可为通用寄存器 段寄存器DS ES SS或存储器 中 2 4 3堆栈操作指令 1 8086微处理器为堆栈操作提供了专用指令PUSH POP 2 使用专用指令PUSH POP对堆栈进行操作时 遵循 先进后出 的原则 3 使用专用指令PUSH POP对堆栈进行操作时 是以字为单位进行的 4 栈是内存的一部分 在这点上与其它段无任何区别 因此 其它通用操作指令同样适用于栈 5 栈底位于高地址单元 栈顶位于低地址单元 当栈顶地址 栈底地址时 栈为空 当SP 0时 栈为满 2 4 4堆栈操作规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值