8086CPU的简单介绍

学习汇编语言或者CPU构造的,一般首先都是从最典型的8086微处理器开始,所以想以此文简单梳理总结一下8086CPU的构造和功能,都是需要记下来,滚瓜烂熟的基本内容。

和外部器件的连接:

地址总线:20根,可寻址1MB大小的内存地址空间。

数据总线:16根,即可同时传输16位二进制数据。所以8086CPU是16位的。(错,CPU多少位不是由数据总线的宽度决定的,详情看下面)

控制总线:未知(暂时不重要)。

内部结构:

一共14个寄存器,并且这些寄存器的位数都是16位的。也就是说,这些寄存器都可以存放两个字节的数据。所以8086CPU是16位的。

注意:我们平时说32/64位(字长)的CPU/处理器,这个位到底是指什么?

        经过多方查阅资料,我确定其实指的是【寄存器的位数】,而与数据总线或地址总线的位数无关。因为我们说的XX位,反映的是计算机的计算能力。而真正决定CPU运算能力的,其实是它内部的寄存器能同时存放多少位的数据,能存放多少位才能计算多少位。CPU在设计的时候会让运算器和通用寄存器的位宽保持一致,在硬件上就是CPU一次能进行的多少位数据运算,所以字长反应了CPU的数据运算能力(一次可以进行几位的数据运算,得到的结果就是几位)。 所以 寄存器的位数=计算机/CPU是多少位的。

而数据总线的位数,反映的是一次最多可以传输数据的位数,是CPU传输数据的能力,与计算无关。

但是为什么一般情况下,我们发现数据总线的宽度,总是和寄存器的位数是一样的呢?

这是处于效率上的考虑:如果数据总线的长度小于字长的话,那么会浪费cpu的处理能力,大于字长的话,传动过来的数据cpu一次处理不完,所以一般数据总线的长度等于字长。因此是 “多少位的CPU”决定了数据总线有多少根,而不是反过来,因果关系不要理解反了。 

按照这么说,地址(或者说指针)也是数据,所以cpu一次处理的地址数据长度,和数据总线的长度位数最好是相等的。即地址总线位数也=数据总线的位数不是最好的吗。但是实际中地址总线很多高位用不到,所以默认置0,省去了一些地址总线,总的长度是小于64的,只是64位的机器理论上可寻址的范围在2的64次方B

综上所述,字长(决定)==>数据总线长度,>地址总线长度。

如果还有疑问,可访问下面这位朋友的文章链接查看:

CPU是多少位字长的实际上只和寄存器的位数有关

或者在王爽老师的《汇编语言》第四版20页中,对这个问题也有所回答:

(以16位结构为例)“概括地讲,16位结构(16位机,字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面的结构特性:

  • 运算器一次最多可以处理16位的数据;
  • (CPU内部的)寄存器的最大宽度为16位;
  • 寄存器和运算器之间的通路为16位。

显然,和地址总线或数据总线的宽度没有半毛钱关系。应该是寄存器的位数决定了CPU的位数,决定了数据总线的宽度。

接下来继续:这14个寄存器分别是:

        4个通用寄存器:ax,bx,cx,dx。存放一些操作数据,这些通用寄存器,每一个又可以分为两个8位的寄存器(高8位和低8位)。这样就能和基于8位CPU编写的程序兼容。

所以,8086CPU其实可以一次性处理以下两种尺寸的数据。

        1,字节型(Byte),一个字节由8个bit组成,可以存放在一个8位寄存器中。

        2,字型(word),一个字由两个字节组成,可以存放在一个完整的16位寄存器中。

物理地址的来源

物理地址的给出,是在CPU内部完成的。由 CPU的相关部件 提供两个16位的地址,一个叫段地址,一个叫偏移地址,通过内部总线送入CPU内的地址加法器,由地址加法器将两个16位地址合成为一个20位的物理地址,送到地址总线上找对应的存储单元(一个存储单元存1个字节(Byte),8位)。

前面下划线了的 CPU的相关部件,其实其中一个就是段寄存器,存放段地址的。

8086CPU一共有4个段寄存器(加上前面介绍的4个通用寄存器,我们已经认识了8086CPU内部的8个寄存器了),分别是:CS、DS、SS、ES。

段寄存器之所以都是以S结尾,显然是因为这个S就是代表“段”的意思。

此处的S的全称是:Segment     /ˈseɡmənt/(英),意 “部分,片段;分割,划分”。

详细介绍:

CS(Code segment):代码段寄存器,代码也就是我们希望CPU执行的指令。所以CS是存放指令的段地址(也叫起始地址)。

        CS 和 IP一起使用。

        IP(instruction pointer):指令指针寄存器(这也是第二种提供地址的部件,提供指令的偏移地址的指令指针寄存器),存放指令的偏移地址。  通过段地址和偏移地址,CPU才完全确定一条指令的物理地址。

        8086CPU中,任意时刻,CPU从CS:IP指向的内容当作指令开始执行。

        注意:mov指令不能改变CS:IP的值,因为8086CPU没有提供这样的功能,可以用jmp指令来完成:jmp  段地址:偏移地址,执行后,CS:IP的值就为jmp后面的值。

DS(Data segment):数据段寄存器。

SS(Stack segment):栈段寄存器。

ES

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值