计算机cpu原理(计算机原理)
- 计算机结构组成
内外存储器: 实现记忆功能的部件⽤来存放计算程序及参与运算的各种数据
CPU运算器: 负责数据的算术运算和逻辑运算即数据的加⼯处理
CPU控制器:负责对程序规定的控制信息进⾏分析,控制并协调输⼊,输出操作或内存访问
输⼊设备: 实现计算程序和原始数据的输⼊
输出设备: 实现计算结果输出1、2、2 计算机系统组成1、2、3 程序和指令
指令是对计算机进⾏程序控制的最⼩单位。
计算机系统组成
1、2、3 程序和指令
指令是对计算机进⾏程序控制的最⼩单位。
所有的指令的集合称为计算机的指令系统。
程序是为完成⼀项特定任务⽽⽤某种语⾔编写的⼀组指令序列。
- CPU结构
中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核⼼,是信息处理、程序运⾏的最终执⾏单元。
cpu
该图表现了在指令执⾏周期中相互交互部件之间的关系。在从内存读取程序指令之前,将其地址放到地址总线上。然后,内存控制器将所需代码送到数据总线上,存⼊代码⾼速缓存 (code cache)。指令指针的值决定下⼀条将要执⾏的指令。指令由指令译码器分析,并产⽣相应的数值信号送往控制单元,其协调 ALU 和浮点单元。虽然图中没有画出控制总线,但是其上传输的信号⽤系统时钟协调不同 CPU 部件之间的数据传输。
- CPU构成
CPU主要由运算器、控制器、寄存器组和内部总线构成。
运算器:由算术逻辑单元ALU、通⽤寄存器、数据暂存器等组成。程序状态字寄存器接受从控制器送来的命令并执⾏相应的动作,主要负责对数据的加工和处理。
控制器:由程序计数器PC、指令寄存器IR、地址寄存器AR、数据寄存器DR、指令译码器等。负责对程序规定的控制信息进⾏分析,控制并协调输⼊,输出操作或内存访问
寄存器:寄存器的功能是存储⼆进制代码,它是由具有存储功能的触发器组合起来构成的。
总线:总线是⼀种内部结构,它是cpu、内存、输⼊、输出设备传递信息的公⽤通道,主机的各个部件通过总线相连接,外部设备通过相应的接⼝电路再与总线相连接。
- 寄存器
CPU 本身只负责运算,不负责储存数据。数据⼀般都储存在内存之中,CPU 要⽤的时候就去内存读写数据。但是,CPU 的运算速度远⾼于内存的读写速度,为了避免被拖慢,CPU 都⾃带⼀级缓存和⼆级缓存。基本上,CPU 缓存可以看作是读写速度较快的内存。但是,CPU 缓存还是不够快,另外数据在缓存⾥⾯的地址是不固定的,CPU 每次读写都要寻址也会拖慢速度。因此,除了缓存之外,CPU 还⾃带了寄存器(register),⽤来储存最常⽤的数据。也就是说,那些最频繁读写的数据(⽐如循环变量),都会放在寄存器⾥⾯,CPU 优先读写寄存器,再由寄存器跟内存交换数据。
寄存器名字
寄存器、缓存、内存三者关系
按与CPU远近来分,离得最近的是寄存器,然后缓存(CPU缓存),最后内存。
CPU计算时,先预先把要⽤的数据从硬盘读到内存,然后再把即将要⽤的数据读到寄存器。于是
CPU〈---〉寄存器〈---〉内存,这就是它们之间的信息交换。
那为什么有缓存呢?因为如果经常操作内存中的同⼀址地的数据,就会影响速度。于是就在寄存器与内存之间设置⼀个缓存。因为从缓存提取的速度远⾼于内存。当然缓存的价格肯定远远⾼于内存,不然的话,机器⾥就没有内存的存在。
由此可以看出,从远近来看:CPU〈---〉寄存器〈---〉缓存 〈---〉内存。
- 进制
进制也就是进位制,是⼈们规定的⼀种进位⽅法。 对于任何⼀种进制—X进制,就表示某⼀位置上的数运算时是逢X进⼀位。 ⼗进制是逢⼗进⼀,⼗六进制是逢⼗六进⼀,⼆进制就是逢⼆进⼀,以此类推,x进制就是逢x进位。
- ⼆进制
⼆进制是计算技术中⼴泛采⽤的⼀种数制。⼆进制数据是⽤0和1两个数码来表示的数。它的基数为2,进位规则是“逢⼆进⼀”,借位规则是“借⼀当⼆”。
当前的计算机系统使⽤的基本上是⼆进制系统,数据在计算机中主要是以补码的形式存储的。
⼗进制转化⼆进制的⽅法:⽤⼗进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着
数就是转化后的结果。⼗进制的⼩数转换成⼆进制:⼩数部分和2相乘,取整数,不⾜1取0,每次相乘都是⼩数部分,顺序看取整后的数就是转化后的结果。
- ⼋进制
⼋进制,Octal,缩写OCT或O,⼀种以8为基数的计数法,采⽤0,1,2,3,4,5,6,7⼋个数字,逢⼋进1。⼀些编程语⾔中常常以数字0开始表明该数字是⼋进制。⼋进制的数和⼆进制数可以按位对应(⼋进制⼀位对应⼆进制三位),因此常应⽤在计算机语⾔中。⼗进制转化⼋进制的⽅法:
⽤⼗进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
- ⼗六进制
⼗六进制(英⽂名称:Hexadecimal),同我们⽇常⽣活中的表示法不⼀样,它由0-9,A-F组成,字⺟不区分⼤⼩写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。
⼗六进制的数和⼆进制数可以按位对(⼗六进制⼀位对应⼆进制四位),因此常应⽤在计算机语⾔中。
⼗进制转化⼗六进制的⽅法:
⽤⼗进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
十进制转十六进制
- 进制在代码中表现形式
func main() {
a := 10 //⼗进制
b := 010 //⼋进制
c := 0x10 //⼗六进制
//%d 占位符 表示输出⼀个⼗进制整型数据
fmt.Printf("%d\n",a)
//%o 占位符 表示输出⼀个⼗进制整型数
fmt.Printf("%o\n",b)
//%x %X 占位符 表示输出⼀个⼗进制整型数据
fmt.Printf("%x\n",c)
}
- 原码
⼀个数的原码(原始的⼆进制码)有如下特点:
- 最⾼位做为符号位,0表示正,为1表示负
- 其它数值部分就是数值本身绝对值的⼆进制数
- 负数的原码是在其绝对值的基础上,最⾼位变为1
原码表示法简单易懂,与带符号数本身转换⽅便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须⽐较两个数哪个绝对值⼤,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。
- 反码
对于正数,反码与原码相同
对于负数,符号位不变,其它部分取反(1变0,0变1)
反码运算也不⽅便,通常⽤来作为求补码的中间过渡。
- 补码
在计算机系统中,数值⼀律⽤补码来存储。
补码特点:
- 对于正数,原码、反码、补码相同
- 对于负数,其补码为它的反码加1
- 补码符号位不动,其他位求反,最后整个数加1,得到原码
- 补码的意义
⽤8位⼆进制数分别表示 0和-0⼗进制数
不管以原码⽅式存储,还是以反码⽅式存储,0也有两种表示形式。为什么同样⼀个0有两种不同的表示⽅法呢?
但是如果以补码⽅式存储,补码统⼀了零的编码:
计算9-6的结果
以原码⽅式相加:
最⾼位的1溢出,剩余8位⼆进制表示的是3,正确。
在计算机系统中,数值⼀律⽤补码来存储,主要原因是:
- 统⼀了零的编码
- 将符号位和其它位统⼀处理
- 将减法运算转变为加法运算
- 两个⽤补码表示的数相加时,如果最⾼位(符号位)有进位,则进位被舍弃
- 指针和内存
内存
内存含义:
存储器:计算机的组成中,⽤来存储程序和数据,辅助CPU进⾏运算处理的重要部分。
内存:内部存贮器,暂存程序/数据——掉电丢失 SRAM、DRAM、DDR、DDR2、DDR3。
外存:外部存储器,⻓时间保存程序/数据—掉电不丢ROM、ERRROM、FLASH(NAND、
NOR)、硬盘、光盘。
内存是沟通CPU与硬盘的桥梁:暂存放CPU中的运算数据
暂存与硬盘等外部存储器交换的数据
- 物理存储器和存储地址空间
有关内存的两个概念:物理存储器和存储地址空间。
物理存储器:实际存在的具体存储器芯⽚。
主板上装插的内存条
显示卡上的显示RAM芯⽚
各种适配卡上的RAM芯⽚和ROM芯⽚
存储地址空间:对存储器编码的范围。我们在软件上常说的内存是指这⼀层含义。
编码:对每个物理存储单元(⼀个字节)分配⼀个号码
寻址:可以根据分配的号码找到相应的存储单元,完成数据的读写
- 内存地址
将内存抽象成⼀个很⼤的⼀维字符数组。
编码就是对内存的每⼀个字节分配⼀个32位或64位的编号(与32位或者64位处理器相关)。
这个内存编号我们称之为内存地址。
内存中的每⼀个数据都会分配相应的地址:
char:占⼀个字节分配⼀个地址
int: 占四个字节分配四个地址
flfloat、struct、函数、数组等
- 指针
只要将数据存储在内存中都会为其分配内存地址。内存地址使⽤⼗六进数据表示。
内存为每⼀个字节分配⼀个32位或64位的编号(与32位或者64位处理器相关)。
- 内存区的每⼀个字节都有⼀个编号,这就是“地址”。
- 如果在程序中定义了⼀个变量,在对程序进⾏编译或运⾏时,系统就会给这个变量分配内存单元,并确定它的内存地址(编号)
- 指针的实质就是内存“地址”。指针就是地址,地址就是指针。
- 指针是内存单元的编号,指针变量是存放地址的变量。
- 通常叙述时会把指针变量简称为指针,实际他们含义并不⼀样。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com