笔记: CPU 组件图
架构图
8086 CPU 架构图
数据单元
为了暂存数据,8086 处理器内部有 8 个 16 位的通用寄存器,也就是刚才说的 CPU 内部的数据单元,
分别是 AX、BX、CX、DX、SP、BP、SI、DI。
这些寄存器主要用于在计算过程中暂存数据。
这些寄存器比较灵活,其中 AX、BX、CX、DX 可以分成两个 8 位的寄存器来使用,
分别是 AH、AL、BH、BL、CH、CL、DH、DL,
其中 H 就是 High(高位),L 就是 Low(低位)的意思。
控制单元
IP 寄存器就是指令指针寄存器(Instruction Pointer Register),指向代码段中下一条指令的位置。
CPU 会根据它来不断地将指令从内存的代码段中,加载到 CPU 的指令队列中,然后交给运算单元去执行。
每个进程都分代码段和数据段,为了指向不同进程的地址空间,
有四个 16 位的段寄存器,分别是 CS、DS、SS、ES。
CS 就是代码段寄存器(Code Segment Register),通过它可以找到代码在内存中的位置;
DS 是数据段的寄存器,通过它可以找到数据在内存中的位置。
SS 是栈寄存器(Stack Register)。
栈是程序运行中一个特殊的数据结构,数据的存取只能从一端进行,秉承后进先出的原则,push 就是入栈,pop 就是出栈。
凡是与函数调用相关的操作,都与栈紧密相关。例如,A 调用 B,B 调用 C。当 A 调用 B 的时候,要执行 B 函数的逻辑,因而 A 运行的相关信息就会被 push 到栈里面。当 B 调用 C 的时候,同样,B 运行相关信息会被 push 到栈里面,然后才运行 C 函数的逻辑。当 C 运行完毕的时候,先 pop 出来的是 B,B 就接着调用 C 之后的指令运行下去。B 运行完了,再 pop 出来的就是 A,A 接着运行,直到结束。
在 CS 和 DS 中都存放着一个段的起始地址。代码段的偏移量在 IP 寄存器中,数据段的偏移量会放在通用寄存器中。
CS 和 DS 都是 16 位的,也就是说,起始地址都是 16 位的,
IP 寄存器和通用寄存器都是 16 位的,偏移量也是 16 位的,
但是 8086 的地址总线地址是 20 位。
怎么凑够这 20 位呢?
方法就是“起始地址 *16+ 偏移量”,也就是把 CS 和 DS 中的值左移 4 位,变成 20 位的,加上 16 位的偏移量,
这样就可以得到最终 20 位的数据地址。
从这个计算方式可以算出,无论真正的内存多么大,对于只有 20 位地址总线的 8086 来讲,能够区分出的地址也就 2^20=1M,超过这个空间就访问不到了。这又是为啥呢?如果你想访问 1M+X 的地方,这个位置已经超过 20 位了,由于地址总线只有 20 位,在总线上超过 20 位的部分根本是发不出去的,所以发出去的还是 X,最后还是会访问 1M 内的 X 的位置。
那一个段最大能有多大呢?因为偏移量只能是 16 位的,所以一个段最大的大小是 2^16=64k。
32 位处理器
在 32 位处理器中,有 32 根地址总线,可以访问 2^32=4G 的内存。
首先,通用寄存器有扩展,可以将 8 个 16 位的扩展到 8 个 32 位的,但是依然可以保留 16 位的和 8 位的使用方式。
其中,指向下一条指令的指令指针寄存器 IP,就会扩展成 32 位的,同样也兼容 16 位的。
改动比较大,有点不兼容的就是段寄存器(Segment Register)。
CS、SS、DS、ES 仍然是 16 位的,但是不再是段的起始地址。段的起始地址放在内存的某个地方。
这个地方是一个表格,表格中的一项一项是段描述符(Segment Descriptor)。
这里面才是真正的段的起始地址。而段寄存器里面保存的是在这个表格中的哪一项,称为选择子(Selector)。
将一个从段寄存器直接拿到的段起始地址,就变成了先间接地从段寄存器找到表格中的一项,再从表格中的一项中拿到段起始地址。
这样段起始地址就会很灵活了。当然为了快速拿到段起始地址,段寄存器会从内存中拿到 CPU 的描述符高速缓存器中。
因而到了 32 位的系统架构下,我们将前一种模式称为实模式(Real Pattern),后一种模式称为保护模式(Protected Pattern)。
当系统刚刚启动的时候,CPU 是处于实模式的,这个时候和原来的模式是兼容的。
也就是说,哪怕你买了 32 位的 CPU,也支持在原来的模式下运行,只不过快了一点而已。
当需要更多内存的时候,你可以遵循一定的规则,进行一系列的操作,然后切换到保护模式,就能够用到 32 位 CPU 更强大的能力。
笔记: CPU 组件图相关推荐
- 【设计模式】UML建模之包图、组件图和部署图学习笔记
UML建模中包图.组件图和部署图学习笔记 对于较大的项目进行UML建模,由于有很多的类和用例,仅仅利用类图和用例图的话,常常会使结构变得更为复杂.此时如果可以以功能模块划将类图和用例图进行封装,可以很 ...
- Uniapp零基础开发学习笔记(5) -组件入门及容器组件使用
Uniapp零基础开发学习笔记(5) -组件入门及容器组件使用 按照官网教程学习使用组件,并且重点把容器组件的应用进行了练习. 1.官网关于组件的介绍 组件是视图层的基本组成单元,是一个单独且可复用的 ...
- 温度过高时蜂鸣器报警,自认为的简简单单的实验能有啥困难?(附DS18B20温度传感器的详细笔记和时序图)
如果说写代码花了x小时,那么就找错误花了y小时(且y>2x),到最后发现就是个非常小的忽略! 温度传感器的配置文件写好了,下板子也正常实时显示温度.那为啥想完成个温度>30度就让蜂鸣器报警 ...
- 【笔记整理】图神经网络学习
[笔记整理]图神经网络学习 文章目录 [笔记整理]图神经网络学习 一.GNN简介 1.图结构 & 图基础算法 1)引言("非欧几何, 处理图数据的NN") 2)图基本概念 ...
- 项目前期——用例图、类图、活动图、组件图
建立模型是为了更好地理解要模拟的现实世界,是软件开发方法的核心问题.在结构化方法中,使用SA构建系统的环境模型和逻辑模型,实现模型的主要工具有数据字典(DD).ER图和数据流图(DFD). 面向对象方 ...
- 服务器cpu天梯图_九月手机处理器排名 2020年9月最新版手机CPU天梯图
Hello,大家好,WEB开发者网新的一期手机CPU天梯图又和大家见面了.虽然近一个月,各芯片厂商新发布的手机处理器并不多,但各家下一代旗舰产品也都有了更多的新消息.今天,小编通过手机CPU天梯图20 ...
- cpu序列号唯一吗_手机CPU天梯图2020年1月最新版 你的手机处理器排名高吗?
手机处理器作为目前智能手机最核心的硬件,融合了CPU.GPU.基带.AI等诸多模块,与手机性能体验息息相关,可以说,看一款手机的性能,一般看CPU就够了.下面小编带来最新一期手机CPU天梯图2020年 ...
- Mini 容器学习笔记4——组件的生命周期(应用篇)
Mini容器支持6中生命周期类型: 1. Singleton :单利类型(缺省组件都是单利类型的生命周期,由容器进行托管的) [Test]public void SingletonLifestyleT ...
- UML模型中的图-实现图【组件图、配置图】
前言 前面几篇博客小编为大家分享了UML建模中的用例图.静态图.行为图,交互图,本篇继续为大家分享UML模型中的最后一种类型图- 实现图 .实现图用来描述设计的物理实现,如执行文件.库.表.文件.文档 ...
最新文章
- python简单代码表白-python浪漫表白源码
- python 跳水板
- golang 程序部署及Supervisord deamon 运行
- 20181013xlVba导入成绩
- 计算机控制技术黄勤,微型计算机控制技术 教学课件 黄勤 第3章微型计算机控制系统的常用控制.ppt...
- Linux系统运维成长记
- Linux chmod命令
- c语言基础知识难点,C语言基础的几个难点解析
- 手机修改html离线网页内容,HTML5 离线应用之打造零请求、无流量网站的解决方法...
- matlab节约里程法_vrp几种算法的matlab源代码(扫描算法,禁忌搜索算法,节约里程算法)...
- 高校学子如何免费上网?
- 复现论文常用函数(一)tf.one_hot,tf.train.batch,tf.train.shuffle_batch,数据读取机制,获取文件路径,Bunch等
- PINN内嵌物理知识神经网络投稿期刊总结
- stm32的简易小项目之震动感应灯
- android线程间通信的几种方法_Android进程间和线程间通信方式
- BootStrap框架模块:BootStrap4实战
- 为什么抖音一直显示服务器升级换不了头像,抖音换不了头像怎么回事
- JRXH静态信号继电器
- 【PTA】2022年蓝桥杯及天梯赛赛前训练(C++练习)
- 『DavyYew』看了又看的SD2.0