x86从实模式到保护模式 pdf_从零开始自制操作系统(2):x86架构简述

30f47c9c8a6916cdc025cb1a7a9a39c9.png

1.x86是什么:

X86架构(The X86 architecture)是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。x86架构起源于1978年6月8日,Intel发布的16位微处理器8086。此处理器获得了巨大的成功,并且inter后边的发布的80286、80386等都是使用的相同的x86指令集,并且在处理器结构上沿用了8086的设计,并且有一定的创新设计(比如后来的32位x86架构以及保护模式的提出等等)。所以x86架构代表的是使用x86指令集、有相似的内部结构设计的这一类处理器。x86的另外一个特点便是兼容性,能在老处理器上跑的程序可以在新的处理器上运行。比如在8086上工作的实模式程序(实模式与保护模式后边的文章中会细讲),同样也能够在32位的80386上运行(当然80386像较于8086的优点是运行速度更快,能够同时运行多个实模式程序)。

x86架构有于其优异的性能,已经垄断桌面级CPU市场,并且现在使用的新的inter CPU全部都是x86架构。当然由于IBM的要求,inter向AMD也提供了x86架构的授权。

当然,我们不能忘了x86-64和EM64T的斗争。2003年,AMD推出了业界首款64位处理器Athlon 64,也带来了x86-64,即x86指令集的64位扩展超集,具备向下兼容的特点。当时Intel也在推行64位技术,但其IA64架构并不兼容x86,只是用在服务器处理器Itanium上。为了和AMD展开竞争,Intel也在2004年推出了自己的64位版x86,也就是EM64T。后边inter推出的core双核处理器,吊打AMD长达11年,直到2017年AMD推出的Zen系列处理器......(AMD YES)

2.X86祖师爷:8086

fe14b86691b0a0c8c53d7164ea0bcb16.png
长得像单片机的8086

8086是x86系列的第一款处理器。

  • 16位:处理器的位数即是处理器一次能够处理的数据的长度,8086可以一次性处理16位数据,进行数据的求和、逻辑运算等等操作。并且处理器位数可以反映在通用寄存器的大小上。
  • 20根地址线:我们前边已经提到过,在冯洛伊曼架构机器上,CPU通过控制器从存储器中取出数据。x86作为冯洛伊曼结构的具体实现,其取数据是通过地址线向内存控制器(在内存条上,也叫内存主控)发送地址数据,而内存控制器将相应地址的数据发送到CPU中,位于内存中的数据实际上是通过地址来存放的(可以联想一下C语言中的地址)。所以20根地址线一共可以有2的20次方种组合,故可以编码2的20次方个内存单元,内存单元的大小为一个字节(8bit),所以8086一个可以寻址1M的数据(可以用计算器算一算)。
  • 14个寄存器:8086一共有14个寄存器,并且每个寄存器都为16位(最多存放16bit数据),寄存器是一种SRAM技术做成的高速存储器,每次访问的时间为ns级别,但是由于寄存器容量小并且断电就丢失数据,所以不适合作为主要存储设备,所以只作为CPU处理数据的寄存的单元(这也就是这个中文翻译名的由来)。

3.8086的寄存器

8086 CPU 中寄存器总共为 14 个,且均为 16 位 。

AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。

而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。

通用寄存器:

AX,BX,CX,DX 称作为数据寄存器:

AX (Accumulator):累加寄存器,也称之为累加器;

BX (Base):基地址寄存器;

CX (Count):计数器寄存器;

DX (Data):数据寄存器;

SP 和 BP 又称作为指针寄存器:

SP (Stack Pointer):堆栈指针寄存器;

BP (Base Pointer):基指针寄存器;

SI 和 DI 又称作为变址寄存器:

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

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

控制寄存器:

IP (Instruction Pointer):指令指针寄存器;

FLAG:标志寄存器;

段寄存器:

CS (Code Segment):代码段寄存器;

DS (Data Segment):数据段寄存器;

SS (Stack Segment):堆栈段寄存器;

ES (Extra Segment):附加段寄存器;

其中AX,BX,CX,DX寄存器可以拆分为高八位的AH,BH,CH,DH与低八位的AL,BL,CL,DL使用,这样做的目的是方便程序员的操作,并且可以在处理八位数据时不必使用整个16bit的寄存器,这样可以节省寄存器的空间。

但是又一个问题来了,这些命名和寄存器本身有什么联系呢?

要回答这个问题,我们要首先了解寄存器分布结构。

b248b37b5543be656fd5abc28aefe19b.png
寄存器文件

我们观察一下这幅图,会发现,首先寄存器并不是单个寄存器分布,而是一堆寄存器放在一起形成一个名叫寄存器文件(Register File)的整体,至于为啥叫这个名字,我估计得去问问优雅的Linux设计哲学(滑稽.jpg)

每个寄存器在寄存器文件中都有唯一的“地址”,我要访问的一个寄存器,只需要在读端口的地址线上输入目标地址,读端口的输出线就会把相应寄存器的数据返回。

同样道理,我要写入某个寄存器,只需要在写端口放入地址和要写的数据,这样就好啦!

这样真的好了吗?其实并不是,因为写入数据必须要等到时钟输入部分达到高电平才行,我们称之为时钟上沿(关于这方面的时序电路后边会补充)。

所以,现在我们可以推理出:这些寄存器命名是使用在汇编中的符号,在翻译成机器指令的时候,这些符号会翻译成相应的“寄存器地址”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值