当前位置: 首页 > news >正文

微型计算机的结构

微处理器的功能结构

CPU的基本结构:

ALU,寄存器,中断系统,CU

8086微处理器的内部功能结构:

在这里插入图片描述

在外部,MPU通过总线(地址总线AB,数据总线DB,控制总线CB)与外部设备相连,

如I/O接口,RAM,ROM等.其中I/O接口又与键盘,鼠标,显示屏等连接.

执行2+7

首先从右侧地址译码器开始,读入第一条代码,MOV AX, 2

(此处地址译码器在RAM等存储单元,20位)

此时数据总线将2存到数据暂存器里,进而存到AX寄存器里

然后执行下一个地址的命令,即ADD AX,7

此时将数据暂存器成为7,然后在运算器中与2相加,得到9

最终将AX值改为9

然后再执行下一个命令MOV BX,AX

将AX中数据给到BX.

此时BX就变成了9

指令的执行过程

  1. 取指令.CPU从存储器中读取一条指令并放入指令寄存器

  2. 指令译码:指令寄存器中的指令经过译码,决定该指令进行何种操作,操作数在哪里

  3. 执行指令:

    1. 存取操作数
    2. 进行运算
  4. 修改指令计数器

8086处理器的内部功能结构:执行单元(EU) + 总线接口单元(BIU)

指令流水线技术:

取指1 -> 译码1 -> 执行1 ->取指2 -> 译码2 ->执行2 ->…

五级流水线中一条指令的执行有5个基本步骤:

  1. IF 取指令
  2. ID 指令译码
  3. EX 执行
  4. MEM 内存访问
  5. WB 回写

优化技术

1.超标量技术:

1.每个时钟时间内,可以并发执行多条独立指令
2. 不能调整指令的执行顺序

2.超流水线技术
1. 在一个时钟周期内再分段
2. 再一格时钟周期内一个功能部件使用多次
3. 不能调整指令的执行顺序

8086处理器的内部寄存器

8086/8088内部共有14个16位寄存器,按照功能分成三类

  1. 通用寄存器:

    1. 数据寄存器AX,BX,CX,DX
    2. 指针寄存器SP,BP
    3. 变址寄存器SI,DI
  2. 控制寄存器:

    1. 指令指针寄存器IP -> 指向下一条指令的偏移地址
    2. 标志寄存器FLAGS
  3. 段寄存器:

    1. 代码段寄存器CS
    2. 数据段寄存器DS
    3. 堆栈寄存器SS
    4. 附加段寄存器ES

数据寄存器AX,BX,CX,DX:

可以按字访问(16位),也可以按字节访问(8位)

地址指针寄存器:

  1. 用来指示存取位于当前堆栈段中的数据所在的地址

  2. 堆栈指针寄存器SP指示当前堆栈的栈顶偏移位置

  3. 基址指针寄存器BP指示堆栈段中某一块数据区的首地址

变址寄存器:

  1. 用于存放当前数据串的偏移地址

  2. 源变址寄存器SI存放源数据串的偏移地址

  3. 目标变址寄存器DI存放目的数据串的偏移地址

指令指针寄存器IP:

  1. 在CPU正常运行时,IP中的BIU要取的下一条指令的偏移地址,
  2. IP在程序运行中能自动修正,使其始终指向下一条指令

标志寄存器FLAGS:

  1. FALGS只用了9位,即6个状态标志位和3个控制标志位
  2. 状态标志位反映算数或者逻辑运算后的结果的状态
  3. 控制标志位用来控制CPU的操作

FLAGS寄存器:
OF -> 溢出标志(倒数第二位和倒数第一位是否进位的异或值).或者说是结果超过范围(>32767 或 < -32768)为1,否则为0
DF -> 方向标志 -> DF=1 -> 自动减量指令 -> 从高地址到低地址来处理数据.反之从最低位到最高位.
IF -> 中断标志 -> IF=1时,允许CPU接收中断请求.
TF -> 跟踪标志 -> TF=1时,处理进入单步方式,便于调试.此时每条指令后CPU都会产生一个内部的中断.
SF -> 符号标志 -> SF与最高位相同,最高位为1则为1.
ZF -> 零标志 -> 结果为0则为1
AF -> 半进位标志 -> 低半字节(低4位)向高半字节有进位或者借位,AF=1,否则0.
PF -> 奇偶标志 -> 低8位的1为偶数,则为1.否则为0.
CF -> 进位标志 -> 无符号运算状态下最高有效位产生进位则CF=1,否则0

注意区别AF,CF和OF:AF是半字节的进位或者借位,要看4位处;
而CF是在最高位且是无符号状态下的进位,就是在无符号的情况下看结果是否大于等于100000…,(多一位);
而OF是有符号状态下的进位.即超出了-pow(2,n)-pow(2,n)-1的范围.求法是最高位运算的进位 ⊕ 次高位运算的进位

段寄存器:
CS代码段寄存器 -> 存放程序当前使用代码段的段地址
SS堆栈寄存器 -> 存放当前使用的堆栈段的段地址
DS数据段寄存器 -> 存放程序当前用到的数据段的段地址
ES附加段寄存器 -> 存放程序当前使用的附加段的段地址,也可以用来存放数据

8086的存储器组织

存储器的分段.

物理地址: CPU对存储器进行访问时实际寻址所用到的地址.
8086中物理地址位20位的二进制

逻辑地址:包括段地址和偏移地址两部分.
段地址左移4位 + 偏移地址

寻址方式

指令的两个要素:
要做什么? -> 助忆符
操作对象是什么? -> 操作数

操作数的种类

立即操作数
存储器操作数
寄存器操作数
I/O端口操作数

寻址方法

对于立即操作数(操作数在指令码里)
可以立即寻址 如MOV AH 4CH

对于寄存器操作数(操作数在寄存器里)
可以寄存器直接寻址,如MOV AH, BH

对于存储器操作数(操作数在存储器里)

  1. 存储器直接寻址(操作数含地址)

  2. 寄存器间接寻址(操作数含寄存器,寄存器含地址)

  3. 基址寻址(操作数含基址寄存器和偏移量,所以拿到寄存器写的地址再加上偏移量获得地址)
    如 MOV AX, [BX + 10], BX通常存地址,此处可以默认它指向DS,那么BX+10 就是DS段偏移10

  4. 变址寻址(和4差不多,但是寄存器是SI或者DI,而这两个是变址寄存器)通常用于数组遍历,字符串等
    如 MOV CX,[SI + 5],SI可以是数组开头,然后通过+5获得数组第五个数

  5. 基变址寻址(又变个花样,基址寄存器的基址 + 变址寄存器的变址 + 偏移量)用于多维数组访问
    如 MOV DX, [BX + SI + 8]

当计算地址时: 首先找到DS地址,那么就是DS * 16 + BX + 偏移
如果是SS,那么就是 SS * 16 + BP + 偏移
记住BX指向了DS(数据段),而BP指向了SS(堆栈段)

http://www.dtcms.com/a/60980.html

相关文章:

  • 【知识】 LLM中的Scaling Laws是什么?
  • DeepSeek Kimi详细生成PPT的步骤
  • VSCode 2025最新前端开发必备插件推荐汇总(提效指南)
  • 深度学习与大模型基础-向量
  • 文件系统调用─── linux第17课
  • STM32 CAN模块原理与应用详解
  • 为什么大模型网站使用 SSE 而不是 WebSocket?
  • 如何为服务设置合理的线程数
  • 第5节:交换技术与VLAN技术
  • 用python和Pygame库实现“跳过障碍”游戏
  • Spring Boot HikariCP数据库连接池入门
  • 【AI】Stable Diffusion安装
  • 文本处理Bert面试内容整理-BERT的缺点是什么?
  • 【MySQL基础-1】MySQL 用户管理指南:创建用户、修改密码与权限分配
  • 深入理解string:从模拟实现看本质
  • 嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)
  • SpringBoot3整合FastJSON2如何配置configureMessageConverters
  • J6打卡——pytorch实现ResNeXt-50实现猴痘检测
  • 什么是 Perceptual Loss(感知损失)?
  • ForceMimic:以力为中心的模仿学习,采用力运动捕捉系统进行接触丰富的操作
  • webpack和vite的区别
  • pyspark 数据处理的三种方式RDD、DataFrame、Spark SQL案例
  • 大模型中的微调LoRA是什么
  • 多视图几何--对极几何--从0-1理解对极几何
  • 个人记录的一个插件,Unity-RuntimeMonitor
  • static 用法,函数递归与迭代详解
  • Spring Cloud之远程调用OpenFeign参数传递
  • Unity单例模式更新金币数据
  • CI/CD—Jenkins配置Poll SCM触发自动构建
  • DETR详解