您好,登录后才能下订单哦!
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.5v(11001001)会被读出,读的过程,其实就是通过数据线将电信号导出,由于内存的数据、地址、控制线是并行传输的,那么在并行数据线上,此时拥有与2.5v 2.5v 0v 0v 2.5v 0v 0v 2
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。