一 、计算机的发展和组成
1.1 计算机的发展
1.2计算机硬件的组成和工作原理
1.存储器
分为存储体和寄存器(MAR、MDR)
MAR存储地址寄存器 MDR存储数据寄存器
与菜鸟驿站相类似,存储体就是货架 存储的数据就是包裹 MAR相当于店员 MDR相当于 柜台
存储体:数据在存储体按地址存储
存储体中会按地址(从0开始)分为一个个存储单元
每个存储单元会存放一串二进制代码
这串二进制代码就叫做存储字(word)
存储字的二进制的位数被称为存储字长
用于存放二进制数的电子原件叫做存储元,每个存储元可存1bit
2.运算器
实现算术运算(加减乘除)和逻辑运算(与、或 、非)
ACC(寄存器):累加器,用于存放操作数或运算结果
MQ:乘商寄存器,在乘或除运算时,用于存放操作数或运算结果
X:通用的操作数寄存器,用于存放操作数
ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算
3.控制器
CU:控制单元,用于分析指令,给其他部件控制信号
IR:指令寄存器,存放当前执行的指令
PC:程序计数器,存放下一条指令地址,有自动加一的功能
例子:
要运行上面的代码,计算机的工作过程:
1.编译 装入主存
指令和数据都存放在存储体中
程序开始前PC会指向主存地址0的位置
1)pc->MAR 导致MAR=0
控制器向主存说明了接下来要访问0号地址的数据并且是读操作
2)紧接着MAR向存储体的0号地址读取数据
3)把这些数据放到MDR中,导致MDR=0号地址的二进制数
4)然后MDR的数据会放到IR中,导致IR=0号地址的二进制数
5)IR->CU,指令的操作码送到CU中分析,分析出这串地址的指令
6)IR->MAR,指令的地址吗送到MAR,导致(MAR)=5
7)MAR->存储体 找到5号地址的数据
8)存储体->MDR,MDR=5号地址的二进制数
9)MDR->ACC,ACC=5号地址的二进制数
1.3计算机系统的层次结构
高级机器(高级语言 如C/C++)--(编译程序) --> 汇编语言(助记符)--(翻译成机器语言)-->操作 系统机器--(系统调用)-->传统机器(二进制代码)--(拆分成一条条)-->微指令
三种级别的语言
编译程序:将高级语言全部语句直接翻译为机器语言程序(C/C++)
解释程序:将源程序的一条语句翻译成对应于机器语言的语句,并立即执行,紧接着再翻 译下一句(JS、python)
1.4计算机的性能指标
1.4.1存储器的性能指标
MAR的位数反映存储单元的个数
MDR位数=存储字长=每个存储单元的大小
n个二进制位能表示2^n种不同的二进制数
1.4.2 CPU的性能指标
CPU主频:CPU内数字脉冲信号震荡的频率(x.xxGHz)计算机会根据脉冲信号的频率 来完成动作
例:10Hz=每秒钟有十个脉冲信号
CPI:执行一条指令所需的时钟周期数 (不同甚至相同的指令,CPI都可能不同)
t= ✖100✖3
IPS:每秒执行多少条指令
FLOPS:每秒执行多少次浮点运算
1.4.3系统整体的性能指标
数据通路带宽:数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输 数据)
吞吐量:系统在单位时间内处理请求的数量,主要取决于主存的存取周期
响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要 的结果的等待时间
通常包括CPU时间(运行一个程序所花费的时间)与等待时间(磁盘访问、 存储器访问、I/O操作、操作系统开销等)
基准程序是用来测量计算机处理速度的一种实用程序(跑分软件)
二、数据的表示和运算
2.1进位计数制
重点是进制数的转换
推广:r进制计数法
基数:每个数码位所用到的不同符号的个数,r进制的基数为r
![6ce41647e1d7422690471720874342c5.png](https://img-blog.csdnimg.cn/6ce41647e1d7422690471720874342c5.png)
r进制转换成十进制的公式
二进制<--->八进制、十六进制
二进制<-->八进制
3位一组,每组转换成对应的八进制符号
每位八进制对应3位二进制
二进制<-->十六进制
4位一组,每组转换成对应的十六进制符号
每位十六进制对应4位二进制
各种进制的常见书写方式
二进制用B结尾
十进制用D结尾
十六进制用H结尾或0x开头
十进制->任意进制
要分为整数部分和小数部分分别处理
先处理整数部分,将整数部分先用进制公式表达出来,再除以一个基数r
这样子做之后得出来的余数,就是转换进制后的第n位数(跟短除法取余一样)
再处理小数部分,将小数部分先用进制公式表达出来,再乘以一个基数r
这样子之后得出来的个位数,就是转换进制后的第n位小数
真值和机器数
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式,正负号需要被“数字化”
2.2 BCD码
每四个二进制数可以表示一个十进制数(有六个冗余状态)
8421码:8 4 2 1 分别表示每一位数的权值
2.3无符号整数的表示和运算
机器字长多少位就最多只能同时进行多少位运算
真值会被扩展为跟机器字长同样的长度
2.3.1无符号整数的运算
无符号整数的加法运算
从最低位开始,按位相加,并往更高位进位
无符号整数的减法运算
1.被减数不变,减数全部位按位取反,末位加1,减法变加法
按位取反的意思是所有bit位的二进制数都取反,0变1,1变0
2.从最低位开始,按位相加
2.4 带符号整数在计算机中的应用
带符号整数,就是在数学里的整数。
原码表示法
一个符号位(0正1负)+ n-1个数值位
真值0有两种形式:+0 和 -0
原码的缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理。
原码->反码->补码
正数的原码、反码、补码都是一样的
原码转为补码也可以从右往左找到第一个1,这个1左边的所有“数值位”按位取反
补码的加法运算
从最低位开始,按位相加(符号位参与运算),并往更高位进位
补码的减法运算
A-B=A+(-B)
![a499583ab63b45ff9bd63d82832d4e06.png](https://img-blog.csdnimg.cn/a499583ab63b45ff9bd63d82832d4e06.png)
求相反数的补码
原码、反码、补码的特性对比
移码
定义:补码的符号位取反。
移码的真值0只有一种表示形式 1000 0000
(移码通常用于浮点数的阶码当中)
定点小数
定点的定义:小数点的位置固定
定点小数的原码
常写为:【x】原=符号位.真值位
定点小数的原、反、补码跟定点整数的转换一模一样
定点小数跟定点整数的加减运算也一模一样
区别
![46e13fe2c887405db504936b43195488.png](https://img-blog.csdnimg.cn/46e13fe2c887405db504936b43195488.png)
定点小数
位数扩展时,扩展的位置不一样,定点小数扩展在符号位和数值位之间。
2.5 电路基本原理和加法器设计
算数逻辑单元(ALU)
机器字长的本质:ALU可以支持同时输入多少个bit的信息
最基本的逻辑运算(与 或 非)
可以用门电路表示
优先级:与>或
复合逻辑
加法器设计
并行进位加法器
2.6 补码加减运算器
2.7 加减运算和溢出判断
原码的加减运算
加法器对原码进行加法运算可能出错。
因为直接用原码进行加减法有些复杂,所以通常用补码来进行运算
溢出判断
只有“正数+正数”才会上溢
只有“负数+负数”才会下溢
解决溢出的三个方法:
符号扩展
短数据->长数据,多出来的位怎么填补?
正整数:直接在原数据前面补0
负整数:
原码:符号位和原数据中间补0,符号位补1
反码:直接在原数据前面补1
补码:直接在原数据前面补1
正小数:直接在原数据后面补0
负小数:
原码:直接在原数据后面补0
反码:直接在原数据后面补1
补码:直接在原数据后面补0
2.8 标志位的生成
![771b569c2d4a4a0b904cb3cf645f7b0b.png](https://img-blog.csdnimg.cn/771b569c2d4a4a0b904cb3cf645f7b0b.png)
对加法器的扩展
2.9 定点数的移位运算
算术移位
通过改变数码位和小数点的相对位置,从而改变数码位的位权。从而实现乘除法
原码的算术移位
符号位保持不变,仅对数值位进行移位
正数补码也一样
负数补码的算术移位
逻辑移位
逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃
循环移位
方便将bit位的高位和低位调换