- CPU是英文Central Processing Unit(中央处理器)
- CPU和内存是由许多晶体管组成的电子部件,通常称为IC (Integrated Circuit,集成电路)。
- CPU的内部由寄存器、控制器、运算器和时钟四个部分构成,各部分之间由电流信号相互连通。
- 根据种类的不同,一个CPU内部会有20~100个寄存器
- 主存通过控制芯片等与CPU相连,主要负责存储指令和数据。主存由可读写的元素构成,每个字节(1字节=8位)都带有一个地址编号。CPU可以通过该地址读取主存中的指令和数据,当然也可以写入数据。主存中存储的指令和数据会随着计算机的关机而自动清除
- 程序启动后,根据时钟信号,控制器会从内存中读取指令和数据。通过对这些指令加以解释和运行,运算器就会对数据进行运算,控制器根据该运算结果来控制计算机
- 机器语言级别的程序是通过寄存器来处理的
- 内存的存储场所通过地址编号来区分,而寄存器的种类则通过名字来区分。
-
根据功能的不同,可以将寄存器大致划分为八类。CPU中每个寄存器的功能都是不同的,用于运算的数值放在累加寄存器中存储,表示内存地址的数值则放在基址寄存器和变址寄存器中存储。
NB907(QVQ78IY0EJ3(53`6J.png - ,CPU是具有各种功能的寄存器的集合体。其中,程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他的寄存器一般有多个。
- 条件分支和循环中使用的跳转指令,会参照当前执行的运算结果来判断是否跳转。无论当前累加寄存器的运算结果是负数、零还是正数,标志寄存器都会将其保存。(也负责存放溢出和奇偶校验的结果
- 标志寄存器的数值会根据运算结果自动设定。条件分支在跳转指令前会进行比较运算。至于是否执行跳转指令,则由CPU在参考标志寄存器的数值后进行判断。运算结果的正、零、负三种状态由标志寄存器的三个位表示。程序中的比较指令,就是在CPU内部做减法运算
- 函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点(函数调用指令的下一个地址
- 函数调用使用的是call指令,而不是跳转指令。在将函数的入口地址设定到程序计数器之前,call指令会把调用函数后要执行的指令地址存储在名为栈的主存内。函数处理完毕后,再通过函数的出口来执行return命令。return命令的功能是把保存在栈中的地址设定到程序计数器中
- CPU则会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。
- IC的所有引脚,只有直流电压0V或5V两个状态。也就是说,IC的一个引脚,只能表示两个状态。虽然二进制数并不是专门为IC而设计的,但是和IC的特性非常吻合
- 二进制数中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位称为符号位。计算机在做减法运算时,实际上内部是在做加法运算。用加法运算来实现减法运算,为了获得补数,我们需要将二进制数的各数位的数值全部取反,然后再将结果加1。通过求解补数的补数,就可知该值的绝对值。
- 仔细思考一下补数的机制,大家就会明白像- 32768~32767这样负数比正数多一个的原因了。0包含在正数范围内,所以负数就要比正数多1个。虽然0不是正数,但考虑到符号位,就将其划分到了正数中
- 将二进制数作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0或1)不管是正数还是用补数表示的负数,都只需用符号位的值(0或者1)填充高位即可。这就是符号扩充的方法。
- 不管是几位的二进制数,在进行逻辑运算时,都是对相对应的各数位分别进行运算。
-
二进制数表示小数,只需将各数位数值和位权相乘,然后再将相乘的结果相加即可实现。
1K_7%~~W3`Y`N4GDAOZMFY1.png -
计算机之所以会出现运算错误,是因为“有一些十进制数的小数无法转换成二进制数,例如,十进制数0.1,就无法用二进制数正确表示,小数点后面即使有几百位也无法表示。小数点后4位用二进制数表示时的数值范围为0.0000~0.1111。因此,这里只能表示0.5、0.25、0.125、0.0625这四个二进制数小数点后面的位权组合而成(相加总和)的小数
07CJ4LDXKR052{3AL{$J2MC.png - 十进制数0.1转换成二进制后,会变成0.00011001100…(1100循环)这样的循环小数。这和无法用十进制数来表示1/3是一样的道理。1/3就是0.3333…,同样是循环小数。在遇到循环小数时,计算机就会根据变量数据类型所对应的长度将数值从中间截断或者四舍五入。我们知道,将0.3333…这样的循环小数从中间截断会变成0.333333,这时它的3倍是无法得出1的(结果是0.999999),计算机运算出错的原因也是同样的道理
- 像0.12345×103和0.12345×10-1这样使用与实际小数点位置不同的书写方法来表示小数的形式称为浮点数。例如,0.12345×103和0.12345 ×10-1用定点数来表示的话即为123.45和0.012345。浮点数是指用符号、尾数、基数和指数这四部分来表示的小数0
- 64位(双精度浮点数)和32位(单精度浮点数)的数据,会被分为三部分来使用。数值的大小用尾数部分和指数部分来表示。例如,小数就是用“尾数部分× 2的指数部分次幂”这样的形式来表示的
  























