notebooks
  • notebooks
  • _planning
    • 2022 OKR
    • basketball
    • swimming
  • communication
    • Dubbo
    • Kafka
    • Messaging
    • RPC
    • Thrift
  • computation
    • map-reduce
  • cs-basic-knowledge
    • computer-architecture
    • data-structure-and-algorithms
    • networks
    • os
  • devops
    • Docker
    • Linux
    • Prometheus
    • operations
    • security
    • trouble-shooting
  • distributed-knowledge
    • Zookeeper_CMD
    • distributed-system
  • game-engine
    • Unity
  • others
    • appium使用
  • protocols
    • http(s)协议
    • 官方链接
    • sip
  • storage
    • Elasticsearch
    • GuavaCache
    • MySQL
    • MySQL_CMD
    • NoSQL
    • Redis
    • Redis_CMD
  • system-design
    • system-design
  • tools
    • Git
    • IDEA
    • Mac
    • VScode
    • Vim
  • _working
    • doc-template
      • backend-design-review
      • correction-of-error
      • service-review
    • process
      • domain-backup
      • oncall
  • blogs
    • history
      • 8088/8086微处理器
      • 8088/8086指令系统
      • CSS-DOM
      • CSS定位
      • CSS工作原理
      • CSS控制背景
      • CSS浮动布局
      • CSS盒模型
      • Chrome开发者工具使用方法
      • DOM
      • Django Model模型层学习
      • Django-REST-framework Serializers学习
      • Django-REST-framework Views和ViewSets学习
      • Django View视图层学习
      • Gvim下Emmet安装及使用教程
      • HTTP协议简介
      • HashMap原理初探
      • JavaScript简史
      • JavaScript语法
      • Java内存模型和GC机制
      • Java基础——Lambda学习
      • Java基础——方法引用
      • Java基础——枚举类型
      • Java类加载机制
      • KMP算法
      • Kafka学习
      • Linux下用命令行编译Java程序
      • MathJax简介和基本用法
      • Python实现常见数据结构
      • Python装饰器总结
      • TCP协议的三次握手和四次挥手
      • Thrift学习
      • asyncio学习
      • markdown的常用语法
      • 修改hosts文件实现翻墙
      • 充实文档的内容
      • 关系数据库
      • 关系数据库标准语言SQL(一)
      • 关系数据库标准语言SQL(二)
      • 关系数据理论
      • 关系查询处理和查询优化
      • 内联元素和块级元素
      • 剑指offer算法题练习
      • 动态创建标记
      • 图形化用户界面
      • 在Eclipse中使用Maven构建Java Web项目
      • 增加微博秀遇到的一些问题
      • 处理机调度
      • 如何用github和hexo搭建个人博客
      • 存储管理
      • 存储系统的层次结构
      • 学习模仿lionhit网站首页的过程总结
      • 实用的GitHub小技巧
      • 并发控制
      • 循环与分支程序设计
      • 指令系统的设计
      • 指令级并行及其开发——硬件方法
      • 搭建自己的VPN服务器
      • 操作系统用户界面
      • 数据库安全性
      • 数据库完整性
      • 数据库恢复技术
      • 数据库绪论
      • 数据库编程
      • 数据库设计
      • 数据抽象
      • 文件系统
      • 文法和语言
      • 最佳实践
      • 案例研究:JavaScript图片库
      • 案例研究:图片库改进版
      • 汇编语言程序格式
      • 汇编语言程序设计基础知识
      • 流水线技术
      • 深度优先搜索和广度优先搜索
      • 牛客网——网易2017秋招编程题集合
      • 用JavaScript实现动画效果
      • 第一篇博客
      • 经典排序算法总结(Java实现)
      • 经典查找算法总结(Java实现)
      • 综合示例
      • 编译原理引论
      • 背包、队列和栈
      • 虚拟机安装Linux系统及常用软件
      • 计算机操作系统绪论
      • 计算机系统结构的基础知识
      • 设备管理
      • 设计模式之代理模式
      • 设计模式之单例模式
      • 设计模式之工厂模式
      • 设计模式之策略模式
      • 设计模式之观察者模式
      • 词法分析
      • 进程管理
      • 闭包
      • 阻止Google自动跳转到香港服务器的方法
      • 项目部署过程
  • programming-language
    • C#
      • C#
    • C&C++
      • C
    • C&C++
      • C++
    • Java
      • GoogleGuice
    • Java
      • JVM
    • Java
      • Java
    • Java
      • Maven
    • Java
      • Mybatis
    • Java
      • Spring知识
    • Java
      • SpringBoot
    • Java
      • Tomcat
    • Python
      • Python
    • Shell
      • Shell
  • wheels
    • dcc
      • 产品调研
      • 方案设计
    • red-envelope
      • 方案设计
    • short-url
      • 短链接服务
    • sso
      • 方案设计
Powered by GitBook
On this page
  • 8088/8086微处理器的编程结构
  • 基本性能指标
  • 8088/8086微处理器内部结构组成
  • 8088/8086CPU的寄存器结构
  • 8088/8086的存储器组织
  • 存储器地址空间
  • 存储器分段机制
  • 堆栈
  • 8088/8086的I/O组织
  • 8088/8086的外部结构
  1. blogs
  2. history

8088/8086微处理器

PrevioushistoryNext8088/8086指令系统

Last updated 3 years ago

8088/8086微处理器的编程结构

所谓微处理器的编程结构,即是在编程人员眼中看到的微处理器的软件结构模型。

基本性能指标

  • 8086:16位微处理器;8088:准16位

  • 采用高速运算性能的HMOS工艺制造,芯片上集成了2.9万只晶体管

  • 使用单一的+5V电源,40条引脚双列直插式封装

  • 时钟频率为5MHz10MHz,基本指令执行时间为0.3ms0.6ms

  • 16根数据线和20根地址线,可寻址的地址空间达1MB

  • 8088/8086可以和浮点运算器、I/O处理器或其他处理器组成多处理器系统,从而极大地提高了系统的数据吞吐能力和数据处理能力

8088/8086微处理器内部结构组成

8088-8086微处理器1
  1. 执行部件EU

  • 执行部件中包含一个16位的算术逻辑单元(ALU),8个16位的通用寄存器,一个16位的状态标志寄存器,一个数据暂存寄存器和执行部件的控制电路。

  • 功能:从BIU的指令队列中取出指令代码,经指令译码器译码后执行指令所规定的全部功能。执行指令所得结果或执行指令所需的数据,都由EU向BIU发出命令,对存储器或I/O接口进行读/写操作。

  1. 总线接口部件BIU

  • 总线接口部件BIU内部设有四个16位段地址寄存器:代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES,一个16位指令指针寄存器IP,一个6字节指令队列缓冲器,20位地址加法器和总线控制电路。

  • 主要功能:根据执行部件EU的请求,负责完成CPU与存储器或I/O设备之间的数据传送。

8088/8086CPU的寄存器结构

  1. 通用寄存器

  • 通用寄存器分为数据寄存器与指针和变址寄存器两组。

  • 数据寄存器包括4个16位的寄存器AX、BX、CX和DX,一般用来存放16位数据,故称为数据寄存器。其中的每一个又可根据需要将高8位和8位分成独立的两个8位寄存器来使用,即AH、BH、CH、DH和AL、BL、CL、DL两组,用于存放8位数据,它们均可独立寻址、独立使用。

  • 指针和变址寄存器包括指针寄存器SP、BP和变址寄存器SI、DI,都是16位寄存器, ,一般用来存放地址的偏移量。

  • 这8个16位通用寄存器都具有通用性,从而提高了指令系统的灵活性。

  1. 控制寄存器

  • 指令指针寄存器IP :是一个16位的寄存器, 存放EU要执行的下一条指令的偏移地址,用以控制程序中指令的执行顺序,实现对代码段指令的跟踪 。

  • 标志寄存器PSW :是一个16位的寄存器,共9个标志,其中6个用作状态标志,3个用作控制标志。

    • 状态标志反映微处理器的工作状态,如执行加法运算时是否产生进位,执行减法运算时是否产生借位,运算结果是否为零等;

    • 控制标志对微处理器的运行起特定的控制作用,如以单步方式运行还是以连续方式运行,在程序执行过程中是否允许响应外部中断请求等。

  1. 段寄存器

  • 8086CPU共有4个16位的段寄存器,用来存放每一个逻辑段的段起始地址。

    • 代码段寄存器CS

    • 数据段寄存器DS

    • 堆栈段寄存器SS

    • 附加段寄存器ES

  1. 进位标志CF(Carry Flag):

  • 当执行算术运算指令时,其结果的最高位有进位或借位时将CF置1;否则将CF置0。

  1. 奇偶标志PF(Parity Flag):

  • 该标志位反映操作结果中“1”的个数情况,若为偶数个“1”,则将PF置“1”;若为奇数个“1”,则将PF置“0”。

  1. 辅助进位标志AF(Auxiliary carry Flag):

  • 也称“半进位”标志。AF=1,表示本次运算的低4位中的最高位有进位(加法运算时)或有借位(减法运算时)。

  • AF一般用于BCD运算中是否进行十进制调整的依据。十进制调整指令DAA和DAS测试这个标志位。

  1. 零标志ZF(Zero Flag):

  • 反映运算结果是否为零。若结果为零,则ZF=1;若结果不为零,则ZF=0。

  1. 符号标志SF(Sign Flag):

  • 反映带符号数(以二进制补码表示)运算结果符号位的情况。

  • 若结果为负数,则SF=1;若结果为正数,则SF=0。

  • SF的取值总是与运算结果的最高位(字节操作为D7,字操作为D15,双字操作为D31)取值一致。

  1. 溢出标志OF(Overflow Flag):

  • 反映有符号数运算结果是否发生溢出。若发生溢出,则OF=1;否则,OF=0。

  • 所谓溢出,是指运算结果超出了计算装置所能表示的数值范围。

8088/8086的存储器组织

存储器地址空间

  • 存储器的地址空间为1M字节单元,其地址范围为00000H~FFFFFH。

  • 存储器地址空间被分为通用和专用两种存储区。

  • 从地址00000H~003FFH这第一个1024个字节单元是专用的。这个存储区为中断向量表区,专门用来存放256个中断服务程序的入口地址(也称中断向量),每个入口地址占4个字节单元。

  • 从地址FFFF0H~FFFFFH这16个字节单元保留给系统的初始化代码。

  • 当处理器加电或复位(Reset)时,CPU执行的第一条指令就是起始于地址FFFF0H的。

  • 通常是在FFFF0H处存放一条无条件转移指令,以转移到系统程序的入口处。

存储器分段机制

采用存储器“分段”技术原因: CPU需输出20位地址信息才能实现对1M字节单元存储空间的寻址。但实模式下CPU中所使用的寄存器均是16位的,内部ALU也只能进行16位运算,其寻址范围局限在 216=65536(64K)字节单元。为了实现对1M字节单元的寻址,8086系统采用了存储器分段技术。

物理地址与逻辑地址 在有地址变换机构的计算机系统中,每个存储单元可以看成具有两种地址:物理地址和逻辑地址。

  • 物理地址是信息在存储器中实际存放的地址,它是CPU访问存储器时实际输出的地址。

    • CPU对存储器进行读写操作时所使用的就是这样的物理地址。

  • 逻辑地址是编程时所使用的地址。

    • 换句话说,程序设计时所涉及的地址是逻辑地址而不是物理地址。

    • 编程时不需要知道产生的代码或数据在存储器中的具体物理位置。这样可以简化存储资源的动态管理。

    • 在8086微机系统中,逻辑地址由“段地址”和“偏移地址”两部分构成,“段地址”和“偏移地址”均是16位的。

逻辑地址转换为物理地址计算公式:物理地址=段地址×10H+偏移地址。

四种类型的段:代码段,数据段,附加数据段,堆栈段。

  • CS – 代码段寄存器,保存代码段段地址

  • DS – 数据段寄存器,保存数据段段地址

  • ES – 附加数据段寄存器,保存附加数据段段地址

  • SS – 堆栈段寄存器,保存堆栈段段地址

需注意的是,每个存储单元有惟一的物理地址,但该存储单元的“段地址”和“偏移地址”是相对的。换句话说,同一个物理地址与多个逻辑地址相对应。

堆栈

堆栈定义:堆栈是存储器中的一个特定的存储区,它的一端(栈底) 是固定的,另一端(栈顶)是浮动的,信息的存入和取出都只能在浮动的一端进行,并且遵循后进先出(Last In First Out)的原则。

  • 堆栈是一种后进先出型数据结构。

  • 堆栈是插入和删除操作都只能在一端进行的线性表。

堆栈的用途:

  • 堆栈主要用来暂时保存程序运行时的一些地址或数据信息。 例如,当CPU执行调用(Call)指令时,用堆栈保存程序的返回地址(亦称断点地址);

  • 在中断响应及中断处理时,通过堆栈“保存现场”和“恢复现场”;

  • 有时也利用堆栈为子程序传递参数。

堆栈的结构:

  • 堆栈是在存储器中实现的,并由堆栈段寄存器SS和堆栈指针寄存器SP来定位。

  • SS寄存器中存放的是堆栈段的段基值,它确定了堆栈段的起始位置。

堆栈的操作特点:

  • 8086管理的堆栈为16位宽(字宽),堆栈操作指令(PUSH指令或POP指令)对堆栈的操作总是以字为单位进行。

  • 8086对堆栈的操作是“向下生长的(下推式)”,可概括为: “压栈时, 先修改栈指针后压入数据”, “弹栈时, 先弹出数据后修改栈指针”。

  • 堆栈为空, SP指向栈底; SP=0, SP指向栈顶,此时若对堆栈进行“写”操作,将产生“溢出”。

8088/8086的I/O组织

  • 优点:可以用访向存储器的指令来访问I/O端口,而访问存储器的指令功能比较强,不仅有一般的传送指令,还有算术、逻辑运算指令,以及各种移位、比较指令等,并且可以实现直接对I/O端口内的数据进行处理。

  • 缺点:由于I/O端口占用了一部分存储器地址空间,因而使用户的存储地址空间相对减小;另外,由于利用访问存储器的指令来进行I/O操作,指令的长度通常比单独I/O指令要长,因而指令的执行时间也较长。

  • 优点:

    • 第一,I/O端口不占用存储器地址,故不会减少用户的存储器地址空间;

    • 第二,单独I/O指令的地址码较短,地址译码方便,I/O指令短,执行速度快;

    • 第三,采用单独的I/O指令,使程序中I/O操作和其他操作层次清晰,便于理解。

  • 缺点:

    • 第一,单独I/O指令的功能有限,只能对端口数据进行输入/输出操作,不能直接进行移位、比较等其他操作;

    • 第二,由于采用了专用的I/O操作时序及I/O控制信号线,因而增加了微处理器本身控制逻辑的复杂性。

8088/8086的外部结构

8088/8086 引脚定义的方法大致分为五类:

  1. 每个引脚只传送一种信息。

  2. 每个引脚电平的高低代表不同的信号。

  3. 在两种不同的工作方式下有不同的名称和定义。

  4. 分时复用,即在不同的时间可以传送不同的信息。

  5. 输入和输出分别传送不同的信息。

最小工作方式

  • 当33脚接+5V时,系统就处于最小工作方式。所谓最小工作方式,就是系统中只有8088/8086一个微处理器,是一个单微处理器系统。 在最小工作方式,总线控制信号都直接由8088/8086CPU产生,系统中的总线控制逻辑电路被减到最少。

最大工作方式

  • 当33脚接地时,这时的系统处于最大工作方式。在最大方式系统中,总是包含有两个或多个微处理器,其中必有一个主处理器8086,其他的处理器称为协处理器 。在最大工作方式,总线控制信号主要由总线控制器8288形成。


《IBM-PC汇编语言程序设计(第2版)》沈美明 温冬婵 著

8088/8086CPU中可供编程使用的有14个16位寄存器,按其用途可分为3类:通用寄存器、段寄存器、指针和标志寄存器

8086/8088标志寄存器的格式及各位的功能 六个状态标志的功能

通用区域用来存储一般的程序指令和数据。它的地址范围为00400H~FFFEFH。

具体做法是,将1M字节的存储空间分成许多逻辑段,每段最长64K字节单元,可以用16位地址码进行寻址。每个逻辑段在实际存储空间中的位置是可以浮动的,其起始地址的低4位必须是0。段寄存器中存放的是段起始地址的高16位,称之为“段地址” 。“偏移量”(offset)也称偏移地址,它是所访问的存储单元距段的起始地址之间的字节距离。段地址和偏移地址均是16位的。

SP寄存器中存放的是堆栈操作单元的偏移量,SP总是指向栈顶。

I/O接口的基本结构如下图所示 常见的I/O端口编址方式有两种:

一种是I/O端口和存储器统一编址,也称存储器映像的I/O(MemoryMapped I/O)方式

另一种是I/O端口和存储器独立编址,也称I/O映像的I/O(I/O Mapped I/O)方式

8088-8086微处理器10
8088-8086微处理器2
8088-8086微处理器3
8088-8086微处理器5
8088-8086微处理器4
8088-8086微处理器6
8088-8086微处理器7
8088-8086微处理器8
8088-8086微处理器9