一、编码:用特定的二进制代码来表示数据或指令
1.比特:(bit,缩写b)数字技术的处理对象,又称“二进制位”、“位”。它是计算机和其他数字系统处理、存储和传输数字信息的最小单位。位只有两种取值状态——0和1。位还能对应逻辑运算中的真和假。
2.字节:(byte,缩写B)二进制数据量的基本计量单位。一字节由8位二进制位组成。计算机以字节为单位编址。
1Byte=8bit, 1kb=2^10=1024Byte, 1Mb=1024kb, 1G=1024Mb
bit | bit | bit | bit | bit | bit | bit | bit |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
3.二进制与八进制、十六进制转换:每3位二进制数构成1位八进制数,每4位二进制数构成一位十六进制数。如二进制数10101010,从低位到高位,010为2,101为5,10为2,则10101010=2*8^2+5*8^1+2*8*0。
4.十六进制数表示:0-9为数字0-9,10-15为字母A-F。
5.二进制数的算数运算:二进制加法为基本运算,减法是通过加上一个负数(补码运算)来实现的。乘法和除法通过移位操作和加减运算来实现。
6.二进制数的逻辑运算(布尔运算):逻辑运算包括三种:逻辑与(and)、逻辑或(or)、逻辑非(not)。
逻辑与:有0为0,全1为1。1^0=0,0^1=0,0^0=0,1^1=1;
逻辑或:全0为0,有1为1。1v0=1,0v1=1,1v1=1,0v0=0;
逻辑非:0变1,1变0。
7.补码:计算机中的数值类型分为整数和实数两大类,整数分为无符号的整数和有符号的整数两类。
无符号整数:1字节表示的范围为0000 0000~1111 1111,即0~255;
有符号整数:表示方法为 符号位+数值位。最高位表示符号,0为正,1为负。对于正数,最高位为0,其余位表示数值;对于负数,最高位为1。
内存中的数据是以补码的形式存放的。一个正数的补码是它本身,一个负数的补码为数值位每位取反,再在末位加1所得数值。补码和原码互为补码。
内存数据 | 实际数值 | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 3 | |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 4 | |
...... | |||||||||
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 127 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -128 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | -127 | |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -126 | |
...... | |||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | -3 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | -2 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -1 |
可见,1字节所能表示的有符号整数的范围为-128~127。
补码规则的好处:
1.最高位既是符号位,又是运算位,不需要单独表示;
2.正0与负0统一为0;
3.减法变加法,乘除可变为加法和减法。
二、计算机体系结构
计算机由运算器、控制器、存储器、输入设备和输出设备5大基本部件组成,核心部件是运算器。
运算器和控制器是CPU的主要组成部分。运算器是加法器的集合,一个加法器一次只能进行一位数值运算。开关的闭合表示数值的输入。闭合为1,断开为0.一条电路通,则数1被读入加法器。实际上,开关的闭合和断开很麻烦,因此我们想让运算器能够自己读取数据,于是有了存储器和控制器。存储器中存储需要运算的数据,当被读取时,由磁信号转换为电信号,运算结果又保存在存储器中。运算器还需要知道读取哪个数据,因此还需要指令。指令存储在内存中。指令的读取由控制器负责。读取的数据要通过线路到达运算器,这条线路叫数据总线。控制器获取指令的线路叫控制总线。控制器读取指令后告诉运算器到内存的哪个存储单元读取,即数据地址。内存是编址的存储设备,计算机采用平面编址方式。传输地址的线路叫做地址总线。
数据总线是有限的,运算器读取加数后需要暂存下来,再读取被加数。因此运算器中还需要有一种暂存设备,这就是寄存器。
存储器分为内存和辅存,内存是易失性存储设备,断电后存储信息消失,因此计算机中的数据想要永久保存,需借助辅存,如光盘、磁盘、U盘等。内存是编址的存储设备,计算机采用平面编址方式。
输入、输出设备(I/O设备)是与用户交互的,用于辅助计算机。硬盘也是I/O设备。
POST(power-on-self-test,加电自检):计算机一开机,芯片上的指令会映射到内存中,再由运算器读取。这是计算机开机后读取的第一串指令,用于探测外接设备(硬盘、网卡等)。
程序=指令+数据
Poll(轮巡):CPU不断探测输入设备是否输入信号。
中断(interrupt):敲下键盘后产生电信号,通知CPU执行。此时CPU会暂时中断正在进行的程序。
Northbridge(北桥):高速总线控制器,连接南桥、(固态)硬盘
Southbridge(南桥):低速总线控制器,连接键盘、鼠标、显示器等
缓存:CPU的读取速度很快,而存储器的输出速度较慢。存储器和处理器之间性能的差异犹如一道墙,这就是存储墙(Memory Wall)问题。针对存储墙问题,人们采取折中的办法,将存储器设计成层次结构,利用缓存和程序运行时的局部性来缓解处理器和存储器速度的矛盾。整个存储系统可分成下列层次:
寄存器组(位于CPU中) | 最快 | 非常小 | 最贵 |
高速缓冲存储器(Cache) | 非常快 | 小 | 非常贵 |
主存储器 | 快 | 小 | 贵 |
辅助存储器 | 慢 | 大 | 便宜 |
脱机存储器 | 非常慢 | 巨大 | 最便宜 |
三、计算机结构层次、语言
整个计算机体系可以划分为如下层级:
第6层 | 应用程序层 | 软件 |
第5层 | 高级语言层 | |
第4层 | 汇编语言层 | |
第3层 | 操作系统层 | |
第2层 | 传统机器层 | 硬件 |
第1层 | 微体系结构层 | |
第0层 | 数字逻辑层 |
API:计算机只能识别二进制位,即机器语言。为了方便程序员开发,芯片上附带有一层微码,即汇编语言。编译器负责将微码程序转换成机器语言。不同芯片的微码不同,为了方便程序员用高级语言统一开发和移植,不同芯片的制造厂商设计了共同的磨合程序,即API(application program interface,应用编程接口)。API使得不同厂商开发的硬件为程序开发提供了相同的环境。
指令集(ISA,Instruction Set Architecture):指令集属于微体系结构层。程序员编写的软件经编译器翻译成可执行程序,也就是一个机器指令的序列,然后由底层硬件一条一条读取这些指令来执行。因此软件最终体现为指令集中的各种指令。CISC和RISC是ISA的两大阵营。