温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

计算机结构

发布时间:2020-06-15 11:37:17 来源:网络 阅读:936 作者:佳嵌 栏目:系统运维

7.1 冯·诺依曼结构

7.1.1 冯·诺依曼结构的组成部分

1)输入、输出设备

1)输入设备:向计算机输入数据,比如,

·通过摄像头、MIC,将图像/声音等转成二进制数据给计算机

·从网卡输入数据给计算机等

·其它

2)输出设备:从计算机输出数据,比如,

·通过显示器、扬声器,将二进制数据翻译称为图片/视频/声音等供人能够识别

·或者通过网卡输出数据给别的计算机

·其它

 

2)存储器:存储程序和数据

3)运算器:进行算术运算和逻辑运算

4)控制器:解释程序指令,将程序指令转为对应的一条一条的微指令,这些微指令会控制运算器等部件工作,进行比如,

·数据的算术、逻辑运算

·数据的搬移,比如从CPU的寄存器搬移到内存,或者从内存的某个位置搬移到内存的另一个位置。

·等等

 

7.1.2 结构图计算机结构

 

 

 

 

 

 

 

计算机结构 

 

 

 

 

 

7.2 哈佛结构

与冯诺·依曼结构相对应的是哈佛结构,我们会在后面详细讲解这两种结构之间的异同和优缺,为了便于讲解的方便,这边还是以经典的冯诺·依曼结构为例,进行计算机组成结构的介绍。

 

7.3 详细结构

7.3.1 详细结构图(PC)

计算机结构 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.3.2  各部分简述

计算机的详细组成总体上可以分为三大部分,CPU,总线与接口、外部设备,核心部分主要就是cpu/总线,外部设备总体上分为输入设备和输出设备,而核心部分与外部设备通过接口连接。

 

1) cpu

1)运算器

a)作用:根据指令要求,数字电信号的二进制数据进行算运算和逻辑运算,

b)运算器组成

·ALU:Arithmetic Logic Unit运算单元,进行算数运算和逻辑运算

·(通用)寄存器组:用于存放ALU在进行算术/逻辑运算时,运算过程中涉及到的一些中间值和计算结果值。

·乘商寄存器:专门用于存放乘法和除法运算中间值和结果值。

·CVZS:各种ALU运算需要用到的标志位

C:进位、借位标志,如果有进位或者借位,C=1,否则C=0。

C的应用举例:请写汇编代码计算13208 + 34535相加后的值。

答:为了便于编程时好理解,我们先将这两个二进制的数,转为16进制,即OX3398+0X86E7。

汇编实现这两个数的相加的大致步骤如下图所示。

计算机结构计算机结构计算机结构 

计算机结构计算机结构 

计算机结构计算机结构 

 

计算机结构计算机结构计算机结构 

计算机结构计算机结构 

计算机结构计算机结构计算机结构 

计算机结构计算机结构计算机结构 

计算机结构 

计算机结构计算机结构 

计算机结构计算机结构计算机结构 

 

计算机结构 

计算机结构计算机结构计算机结构 

 

 

 

 

 

总结:从这个例子就可以看出,C进位/借位标志位的作用,有关借位作用同理,就不再赘述。如果你想了解跟多,我们在  后面嵌入式技术课程中,在讲有关汇编时,还会将这方面的内容。当然我们这里在强调一点,我们学习汇编并不是为了

使用会变来进行开发,而是通过汇编理解计算机的工作原理。

有些同学说,我用C语言的等高级语言写代码,这些标志位也会用的上吗,也会用得上,百年一起在编译时,C语言会被翻译为汇编,翻译为汇编后,进行加法的算术运算时,同样会按照同样的方式使用C进/借位标志位。

 

Z:运算结果是否为零标志,如果结果为0,Z=1,否者Z=0。

应用举例:比较两数是否相等,比如a=3,b=3,判断两数是否相等,写成汇编程序的话,实际上就是将两数相减(算术运算),

如果Z=1表示a和b的值相等,否则不相等。

 

V:溢出标志,有溢出,V=1,V=0

1)什么是溢出

比如一个32位的寄存器,只有32位,所能装的二进制的数的最大情况就是32个1,即11111111 11111111 11111111 11111111,如果再往里面加一个1的话,就向33为进1了,但是寄存器只有32为,不存在33为,溢出的哪个1不存在了,寄存器中的32个bit,全部是0,即00000000 00000000 00000000 00000000,因此溢出回事数值发生巨大突变,在真实的计算机中,溢出会导致数据的值发生错误,导致计算结果产生很大的问题。

 

2)为什么要检查溢出

从上面的描述中,不难看出,溢出的检查很有意义,通过基础标志V的检查,就可以知道数据有无溢出,如果没有溢出证明数据是没问题的,否者数据的值可能存在问题,需要做相应的处理。

高级语言,比如C语言实现两个很大数计算时,如果数据计算机结果因为太大而溢出,当你使用这个溢出的数据时,会有溢出提醒,这个溢出提醒就是通过,C语言程序被编译后的汇编程序,检查V这个溢出标志位得到的,我们在后面将C语言时,还会讲到有关溢出事情。

 

S:有时用是N,当两个有符号数进行运算时,S=1表示运算的结果为负数,S=0表示运算的结果为正数或零。

应用举例:比较a、b两数的大小,写成程序的话,我们会让两个数进行减法减法运算,如果S=1,表示是一个负数,说明a<b,如果S=0,说明a等于或者大于b,这个时候需要在查询Z标志位,如果Z标志位为1,表示a等于b,否者说明a小于b。

 

2)cpu的控制器


a)作用:最重要的功能就是对指令进行译码,然后将指令转成微指令,再由微指令控制计算机工作,比如    

· 控制ALU,让ALU进行数据的算术、逻辑运算


· 进行数据的移动,比如从CPU的寄存器移到内存中,或者从内存的某个位置搬移到内存的另一个位置。    

· 等等


b)控制器组成

· 程序计数器(PC):Program Counter,程序最开始运行时,PC里面放的是程序第一条指令在内存中所在的地址,每运行一

条指令,PC里面的地址就会加1,指向下一个指令,如果一个指令的存放需要4个字节,pc中的地址加1,实际上加的是4个字节。

 

· 指令寄存器(IR):Instruction Register,临时存放从内存中取得的,即将要被解释运行的指令,指令由两部分组成,


 

- 第一部分:操作码,指明计算机需要执行一个什么样的动作,比如有些操作码表示做加运算,有些表示要进行数据搬移。

 

- 第二部分:地址码,

+ 直接是要被操作码操作的数

+ 要被操作的数在内存中所在的地址。

 

    MOV

伪指令  101001 1001010101

       操作码  地址码



· 指令译码器(ID):Instruction Decoder,解释指令,解释指令的过程为,

 

- 第一步:检查指令的格式是否合法,是否夹有非法字符、或者非法词组,有的话,译码将不会通过



- 第二步:如果指令被检查合格了,会提取出操作码,将操作码翻译为微指令,控制计算机各部分,按照操作码的要求做事

 


· 控制存储器:用于存放微指令程序(或称微程序),每一操作码都对应着一个自己的微指令程序,控制存储器中存放着所有操作码

所对应的微指令程序。


比如MOV(加运算)操作码,就有自己的微指令程序,微指令程序是由一条条的微指令构成的,在出厂时,这些微指令程序就被

固化在了控制存储器中。

 


· 微指令寄存器:用于临时存放微指令

2)总线与io接口

总线与接口的作用就是,将CPU和外部设备连接在一起。-----

1)三大高速总线


a)作用:高速通信线路,属于CPU的高速公路

 

· 地址总线:传输地址信号,比如通过传输地址信号,找到要操作的内存单元等  

· 控制总线:传输控制信号

 

通过地址总线传输的地址信号,找到内存的某位置了,接下来到底是往里面写数据呢,还是从里面读数据呢,那就

要看具体的“指令”了,如果是写指令,指令经过译码器的译码后,会被转为微指令,微指令会通过控制总线,向内存发

控制信号,表示说,我希望向该内存位置写数据。


· 数据总线:传输数据信号

比如通过地址信号找到内存的某个位置了,控制总线也发出了写的控制信号,希望对该空间写数据,那么写数据时,就需要

通过数据总线向该内存空间传输数据信号的,内存收到这个数据信号后,会将该数据信号锁存到该内存空间中,那么这样就实现了

写数据的过程。


b)三大高速总线是分开的

三大高速总线其实是可以合在一起的,但是合成一个的话会忙不过来的,通信的速率会非常低,分成三条总线就好比将高速公

路分成三个车道,不同车走不同的车道,互不相干,效率自然就高。

c)三大高速总线是并行通信的

使用并行通信的目的也是为了条通信效率。

d)三大高速总线所处位置  -------

三大高速总线位于CPU的内部,通过CPU芯片的引脚与外部的IO桥连接在一起。

2)IO接口

a)作用:负责连接各种的输入、输出外部设备

b)每一个设备都会有属于自己的IO接口

c)io接口也有地址、数据、控制三大线,


· io接口的地址线、数据线、控制线,大多数情况都是串行通信的,而且往往是复用的

 

比如USB通信,usb使用的就是串行通信的,常见的USB2.0有4根线,其中有两根线,一个是正极电源线,另一个负极电源线,

其它两根线被复用当作地址线、数据线、控制线使用。

 

· 不过内存是一个特例,为了能够提高内存的访问速度,内存io接口的地址、数据、控制线都是独立的,并且使用的是并行通信。

d)后面的linux驱动课程,主要涉及的就是IO接口相关的内容

linux驱动就是讲如何通过编写驱动程序,去控制这些IO接口,实现与外部设备的通信,有关IO接口这一块的知识,我们会在后面的

linux驱动技术课程部分详细讲解,所以,io接口是后面Linux驱动课程的核心内容。

 


e)io接口所处的位置

· 在芯片的外部:比如pc机(个人电脑),所有IO接口基本都是在CPU芯片的外部      

· 集成在芯片内部:比如像单片机,虽然有一部分也是在芯片外部,但是有很大部分IO接口是被直接集成于在了芯片的内部。

 

 

3)IO桥

a)并不是计算机都需要IO桥

IO桥是PC机特有的,除了PC外的其它类的计算机,有些(单片机)就不使用IO桥。---------------

 


b)为什们会使用IO桥

其实是可以不使用IO桥的,没有IO桥时,所有的“IO接口”都是直接挂接在三大高速总线上的,但是随着发展,挂接的外部

设备越来越多,直接挂接在总线上,管理是一个麻烦,为了管理的便利,就加了IO桥,IO接口直接挂接在IO桥上,就由IO桥

来管理众多的IO接口。

 

c)IO桥常常分为南桥和北桥

南桥对应的就是一个南桥芯片,北桥对应的就是一个北桥芯片,南北桥之间会有相互连接。 -----------


· 南桥:负责CPU与鼠标、键盘、磁盘等,通信速率较低的外部设备之间的通信。


· 北桥:负责CPU与内存、显示器等,通信速率要求较高的外设之间的通信。

 


d)io桥所处的位置

io桥指的就是南桥和北桥芯片,位于CPU芯片的外部。

 

 

 

 

 

 

 

 

 

 

 

 

 

4)地址、数据、控制线相互配合工作

 

a)例子:将内存中地址0101字节的内容读出,写到CPU通用寄存器R0(地址为1001)中,假设寄存器R0只有一个字节。

计算机结构计算机结构 

计算机结构计算机结构计算机结构计算机结构计算机结构 

计算机结构计算机结构计算机结构计算机结构计算机结构计算机结构计算机结构 

计算机结构计算机结构计算机结构计算机结构计算机结构 

计算机结构 

计算机结构 

计算机结构 

计算机结构计算机结构计算机结构计算机结构 

计算机结构 

计算机结构 

 

 

 

步骤:

第一大步:从内存0101的字节,读出数据

(1)cpu通过地址线发出0101这个地址信号,内存的0101对应的字节会被选中

(2)cpu解释并执行“读指令”,发出“读”的控制信号

计算机结构计算机结构通过控制线发送“读”控制信号后,之前被选中的0101字节,就被设置为了可读,设置为可读后,内存0101字节中的数据2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v11001001)会被读出,读的过程,其实就是通过数据线将电信号导出,由于内存的数据、地址、控制线是并行传输的,那么在并行数据线上,此时拥有2.5v 2.5v 0v 0v 2.5v 0v 0v 2

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI