zoukankan      html  css  js  c++  java
  • 8086汇编 CPU 寄存结构

    8086汇编 CPU 结构

    8086 CPU 组成

    一、结构说明

    8086CPU主要由三块部分组成、通过内部总线实现CPU内各个器件之间的联系:

    1. 运算器进行信息处理:处理指令运算使用。
    2. 寄存器进行信息存储:存储地址数据使用。
    3. 控制器协调各种器件进行工作:发送读写执行使用。

    二、寄存器

    寄存器是CPU内部的信息存储单元 CPU通过寄存器存放、内存地址、数据、指令,通过总线访问主板上任意连接的设备。

    8086CPU有14个寄存器:

    1. 通用寄存器:AX、BX、CX、DX
    2. 变址寄存器:SI、DI
    3. 指针寄存器:SP、BP
    4. 指令指针寄存器: IP
    5. 段寄存器:CS、SS、DS、ES
    6. 标志寄存器:PSW

    通用寄存器说明:

    • AX:计算乘法除法专用
    • BX:可作为指针寄存器专用、默认指向DS
    • CX:默认循环指针、指针转移专用
    • DX:配合AX计算乘法除法专用

    8086 CPU 存储方式

    一、CPU 存储

    CPU 存储主要通过寄存器,在8086CPU中寄存器最多可以存储16位数据,两个字节。

    CPU寄存器存储单位:

      字:CPU寄存器使用位以字为单位、PC位、如 16位 32位 64位、称为字、8086CPU的字长(word size)为16bit=2字节。

     字节:1字节 = 8bit 、1bit= 二进制1

    二、CPU 兼容

      上面说到8086CPU寄存器存储单元最多存储16位数据存储,那么上一代最多存储8位数据、那么如今的16位CPU是如何兼容8位CPU的,下面会有说明。

      通用寄存器均可以分为两个独立的8位寄存器使用、两个8位寄存器作为一个16位寄存器使用。

    高位低位:

    一个字(word)可以存在一个16位寄存器中

    • 这个字的高位字节存在这个寄存器的高8位寄存器
    • 这个字的低位字节存在这个寄存器的低8位寄存器

    通用寄存器

    • AX可以分为AH和AL
    • BX可以分为BH和BL
    • CX可以分为CH和CL
    • DX可以分为DH和DL

    高低位在内存中存储:

    低位字节存在低地址单元,高位字节存在高地址单元。

    例:20000D(4E20H)存放0、1两个单元,18D(0012H)存放在2、3两个单元。

    注:先读高位地址1、在读低位地址0。4E20H。

    (1)0地址单元中存放的字节型数据是( 20H  )

    (2)0地址字单元中存放的字型数据是( 4E20H )

    (3)2地址单元中存放的字节型数据是( 12H  )

    (4)2地址字单元中存放的字型数据是( 0012H )

    8086CPU 物理寻址

    一、CPU 寻址

    • CPU访问内存单元时要给出内存单元的地址。
    • 所有的内存单元构成的存储空间是一个一维的线性空间。
    • 每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。

    问题说明

      上篇博客我们知道了 8086CPU是20位地址总线,可传送20位地址,寻址能力为1M。但是8086CPU是16位结构的CPU。运算器一次最多可以处理16位的数据,寄存器的最大宽度为16位,在8086内部处理的、传输、暂存的地址也是16位,寻址能力也只有64KB,那么8086如何处理在寻址空间缺乏的问题,下面会说明。

    解决方法

    CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

    • 用两个16位地址(段地址、偏移地址)合成一个20位的物理地址。
    • 地址加法器合成物理地址的方法
    • 物理地址=段地址×16+偏移地址

    注:段地址x16就相当于段地址向左偏移4个二进制位

    注:相当于16位段地址向左移动4个二进制位、加上偏移地址、值为20位内存地址。

    注:通过段地址向左偏移4位后 + 偏移地址 = 物理地址、只要结果成立,可任意调整段地址与偏移地址。

    段地址会采用一个寄存器进行存储16位数据、在通过另一个寄存器存储偏移地址。

     

     二、CPU 内存分段

    8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址。

    实际上内存并没有分段,段的划分来自于CPU。

    可根据、物理地址、段地址、求出偏移地址。

    分段方案

    1. 段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;
    2. 偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。
    3. 段地址:分段内存的起始地址到结尾中、取结尾后16个二进制位。
    4. 可根据、物理地址、段地址、求出偏移地址。

  • 相关阅读:
    HttpClient后台post 请求webapi
    [SQL Server] 复制数据库任务
    C# js 在页面能执行,放在单独js文件不能执行
    Flink 中的kafka何时commit?
    jar依赖
    AI重要算法
    NonWindowJoin
    Rocket MQ 源码解析
    linear algebra
    Theories of Deep Learning
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/12460997.html
Copyright © 2011-2022 走看看