外部引脚及其功能

8088是与8086同时代的微处理器,具有完全相同的指令系统。

两者唯一区别为:在硬件结构上,8088与存储器和I/O接口进行数据传输的外部数据总线宽度为8位,而8086数据总线为16位。

其引脚图如下:

一些有用的引脚信号如下:

引脚 定义
A16/S3~A19/S6 分时复用地址/状态总线(address/status bus),三态输出。提供地址信号A19~A16 及状态位 S6~S3。
AD8~AD15 8 位地址信号,三态输出。在整个总线周期内提供存储器高 8 位地址。
AD0~AD7 地址/数据分时复用总线(address/data bus),双向,三态。ALE=1时传送地址信号,DEN=0时,传送数据信号。
IO/M 输入输出/存储器控制信号,三态。高电平访问I/O端口,低电平访问存储器。
RD 读信号,输出,三态。当它为低电平时,CPU 通过数据总线接收来自存储器或 I/O设备的数据。
WR 写选通信号,输出,三态。指示 8086/8088 正在输出数据给存储器或 I/O 设备。在WR 为低电平期间,数据总线包含给存储器或 I/O 设备的有效数据。
INTR 中断请求(interrupt request)信号,输入,用来申请一个硬件中断。当 IF=1 时,若 INTR 保持高电平,则 8088 在当前指令执行完毕后就进入中断响应周期(INTA 变为有效)
NMI 非屏蔽中断(non-maskable interrupt)输入信号。与 INTR 信号类似,但 NMI 中断不必检查 IF 标志位是否为 1。
INTA 中断响应(interrupt acknowledge)信号,输出。响应 INTR 输入。该引脚常用来选通中断向量码以响应中断请求。

功能结构

内部结构

8088/8086都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线;8088的外部数据总线为8位,而8086为16位。

8088/8086都是由执行单元EU和总线接口单元(BIU)两大部分构成,8088内部接口如下:

执行单元(Execution Unit, EU):分析指令(指令译码)、执行指令。

总线接口单元(Bus Interface Unit, BIU):取指令、取操作数和写结果。

计算机的核心精髓就在于取指执行

8088存在着并行流水线结构,可以让取指令操作和执行指令操作重叠执行。

内部寄存器

8088/8086内部共有8个通用寄存器,4个段寄存器和2个控制寄存器。

  1. 通用寄存器

    • 数据寄存器

      数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都是16位的,但又可将高、低八位分别作为两个独立的8位寄存器来用。高8位分别记为AH、BH、CH、DH,低8位分别记为AL、BL、CL、DL。

      • AX(Accumulator):累加器。用该寄存器存放运算结果,可提高指令的执行速度。此外,所有的I/O指令都使用该寄存器与外设端口交换信息
      • BX(Base):基址寄存器。8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作数在堆栈段内的偏移地址。
      • CX(Counter):计数器。在设计循环程序时,使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。
      • DX(Data):数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。
    • 地址指针寄存器

      • SP(Stack Pointer):堆栈指针寄存器。在使用堆栈操作指令(PUSH 或 POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将SP的内容减2或加2,以使其始终指向栈顶。
      • BP(Base Pointer):基址寄存器。作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。
    • 变址寄存器

      • SI(Source Index):源变址寄存器。

      • DI(Destination Index):目的变址寄存器。

        这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。

  2. 段寄存器

    • CS(Code Segment):代码段寄存器。用来存储程序当前使用的代码段的段地址。CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址。
    • DS(Data Segment):数据段寄存器。用来存储程序当前使用的数据段的段地址。DS的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址。
    • SS(Stack Segment):堆栈段寄存器。用来存储程序当前使用的堆栈段的段地址。堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场。
    • ES(Extra Segment):附加数据段寄存器。用来存储程序当前使用的附加数据段段的段地址。附加数据段用来存放字符串操作时的目的字符串。
  3. 控制寄存器

    • IP(Instruction Pointer):指令指针寄存器,用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。也就是计算机组成中的PC(程序计数器)

    • 标志寄存器 FLAGS(PSW,程序状态字),它是一个16位的寄存器,但只用了其中的9位,包括6个状态标志位和3个控制标志位。

      • 状态标志位
      名称 描述
      CF 进位标志位 当进行加减运算时 ,若最高位发生进位或借位,则CF为1,否则为0。该标志位通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。
      PF 奇偶标志位 当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。
      AF 辅助进位标志位 当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。
      ZF 零标志位 若当前的运算结果为0,则ZF为1,否则为0。
      SF 符号标志位 若运算结果的最高位为1,SF=1,否则为0。
      OF 溢出标志位 当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。该标志通常用来判断带符号数运算结果是否溢出。
      • 控制标志位
      名称 描述
      TF 陷阱标志位 是为测试程序的方便而设置。若将TF置1,CPU处于单步工作方式 。
      IF 中断允许标志位 是用来控制可屏蔽中断的控制标志位。若将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。
      DF 方向标志位 若将DF置为1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;否则按增地址方式进行。

存储器组织

8088/8086有20条地址线,可寻址的最大物理内存容量为1MB(2^20 ),其中任何一个内存单元都有一个20位的地址,称为内存单元的物理地址。

8088/8086内部寄存器都是16位的,内部总线也只能传送16位二进制码,16位二进制码最多只能访问2^16 = 64KB的地址空间。

综上,不采取特殊措施无法访问1MB的物理内存空间。

8088/8086采用分段方式来解决的这个问题,即将1MB的地址空间分为若干个64KB的段,然后用段基址加上段内偏移地址来访问物理存储器。分段如下图所示,分为代码段、数据段、堆栈段、附加段。

8088/8086逻辑地址和物理地址的转换关系为:

物理地址 = 段基址 * 16 + 段内偏移

即:段基址左移4位加上段内偏移。

寻址过程如下图所示:

在8088/8086中有几种常见的寄存器组合:

段寄存器 提供段内偏移地址的寄存器
CS IP(下一条指令的地址)
DS BX、SI、DI或一个16位数(变址寻址)
SS SP(指向栈顶)或BP(访问内存的基地址)
ES DI(用于字符串操作指令)

要注意的是,通常8088/8086开头的128个字节(到80H)存放的中断向量表(里边内容是中断服务程序的入口地址)

reference

[1] 吴宁. 微型计算机原理与接口技术[M]

[2] https://slideplayer.com/slide/10964300/

微机原理--8088/8086微处理器详解相关推荐

  1. 16位汇编语言第二讲系统调用原理,以及各个寄存器详解

    16位汇编语言第二讲系统调用原理,以及各个寄存器详解 昨天已将简单的写了一下汇编代码,并且执行了第一个显示到屏幕的helloworld 问题? helloworld怎么显示出来了. 一丶显卡,显存的概 ...

  2. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  3. java同步方法完成案例_Java同步代码块和同步方法原理与应用案例详解

    本文实例讲述了java同步代码块和同步方法.分享给大家供大家参考,具体如下: 一 点睛 所谓原子性WOmoad:一段代码要么执行,要么不执行,不存在执行一部分被中断的情况.言外之意是这段代码就像原子一 ...

  4. SQL注入攻击实现原理与攻击过程详解

    SQL注入攻击实现原理与攻击过程详解 结构化查询语言(SQL)是一种用来和数据库交互的文本语言,SQL Injection就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到 ...

  5. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  6. mysql 账户管理_Mysql账户管理原理与实现方法详解

    本文实例讲述了Mysql账户管理原理与实现方法.分享给大家供大家参考,具体如下: 账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然 ...

  7. java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

    java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

  8. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  9. java 同步块原理_Java同步代码块和同步方法原理与应用案例详解

    Java同步代码块和同步方法原理与应用案例详解 发布于 2020-8-7| 复制链接 摘记: 本文实例讲述了Java同步代码块和同步方法.分享给大家供大家参考,具体如下:一 点睛所谓原子性:一段代码要 ...

最新文章

  1. Android 之问题集锦
  2. python语言程序设计基础第二版第六章答案-Python语言程序设计基础(第2版) 课后题 第六章...
  3. Android系统中标准Intent的使用
  4. 自定义ListView【通用】适配器并实现监听控件
  5. mybatisgenerator使用_如何优雅地使用MyBatisplus
  6. 学习笔记(59):Python实战编程-Graphics
  7. matlab 转换图片格式,Matlab实现图片格式转换 pgm转jpg等
  8. C/C++面试题—序列化二叉树
  9. Git中上传忽略文件的方法 .gitignore
  10. ndarray python 映射_191123 使用 Pybind11 和 OpenCV 创建 Python 库
  11. IOS学习笔记07---C语言函数-printf函数
  12. 用jquery怎么删除table的一行
  13. [原创]测试用例设计之“功能图”法
  14. 如何在SqlServer中快速有条件删除海量数据
  15. Python实现答题程序
  16. 4GMF论坛主席卢伟谈4G全球发展概况
  17. SQL server 认证考试
  18. 听歌识曲java_Android自定义View之继承扩展(仿网易云音乐听歌识曲)
  19. 一个运维项目的大概流程,附带20种运维开发工具
  20. web.xml中security-constraint安全认证标签说明

热门文章

  1. 《OpenGL v1.1》——(1)接入Win32窗口,并描绘基本图元
  2. WIN32 opengl三角形绘制
  3. 关于grafana的界面操作展示loki
  4. 零信任能彻底解决邮件安全难题
  5. IE浏览器下载excel文件时不弹出下载保存提示框的解决方法
  6. Boss直聘使用技巧 – 求职面试 – 被面技巧
  7. NEFU ERP 企业资源计划[1] 详细知识点
  8. Ubuntu下安装显卡和cuda
  9. 如何写出公众号爆文?分享你一份爆文写作秘籍
  10. Saruman‘s Army