软件设计师-02,计算机组成原理01
Joker2Yue硬件组成、进制转换、校验码
ALU:Arithmetic Logic Unit,算术逻辑单元
IR:Instruction Register,指令寄存器
PC:Program Counter,程序计数器
AC:Accumulator,累加器
CPU:Central Processing Unit,中央处理单元
内容组成
计算机系统知识
-
计算机硬件组成
-
中央处理器单元
-
数据表示
-
校验码
计算机体系结构
-
指令系统
-
存储系统
-
输入输出技术
-
总线结构
安全性与可靠性
-
系统可靠性分析
-
计算机安全
-
加密和认证技术
计算机硬件组成
基本概念
-
计算机的硬件基本系统:由五大部分组成,包括运算器、控制器、存储器、输入设备(如鼠标键盘)、输出设备(如显示器)。
- 例如,配电脑你需要CPU(运算器、控制器)、内存条硬盘(存储器)、鼠标键盘(输入设备)、屏幕(输出设备)。
-
存储器:分为内部存储器(即内存,容量小,速度快,用于临时存放数据)和外部存储器(即硬盘、光盘等,容量大,速度慢,用于长期保存数据)。
-
外部设备:输入设备和输出设备的合称,即外设。
-
主机:由CPU和主存储器组成。
中央处理器单元CPU
-
CPU 组成
- 运算器:执行算术和逻辑运算,包括加减乘除和与或非等操作。
- 控制器:
- 程序控制:确保指令按照正确的顺序执行。
- 时序控制:管理CPU内各组件的协调工作。
-
运算器组成
- 算术逻辑单元 (ALU):负责具体运算。
- 累加寄存器 (AC):存储运算结果或源数据。
- 数据缓冲寄存器 (DR):临时存储内存中的指令或数据。
- 状态条件寄存器 (PSW):保存运算结果的条件码,如溢出标志等。
-
CPU 功能
- 程序控制:执行程序中的指令。
- 操作控制:控制数据的输入、输出和操作。
- 时间控制:管理指令的执行时间和顺序。
- 数据处理:执行各种算术运算(如加减乘除)和逻辑运算(如与或非比较)。
-
控制器组成
- 指令寄存器 (IR):临时存储CPU执行的指令。
- 程序计数器 (PC):保存当前指令的执行地址。
- 地址寄存器 (AR):存储当前CPU访问的内存地址。
- 指令译码器 (ID):分析指令的操作码,确定下一步的执行操作。
数据的进制转换
提示
小数部分转换不考
进制表示法
在计算机科学中,我们经常使用不同的进制表示数字。两种常见的进制是二进制和十六进制。以下是关于它们的一些重要信息:
-
二进制表示:二进制使用数字0和1来表示,通常使用前缀
0b
。例如,二进制数0b0011
表示数字3。 -
十六进制表示:十六进制使用数字0-9和字母A-F来表示,通常使用前缀
0x
或简写为H
。例如,十六进制数0x18F
或18FH
表示数字399。
R进制整数转十进制
要将一个R进制数转换为十进制数,我们可以使用位权展开法。这个过程涉及将R进制数的每一位乘以R的n次方,并将它们相加,其中n是变量,从R进制数的整数最低位开始,逐渐增加。
例如,考虑一个6进制数5043
,其中R=6。我们可以按以下方式将它转换为十进制数:
-
从低位到高位排列数字:
5043
-
对于每一位,计算它乘以6的n次方,其中n从0开始递增。对应关系如下:
- 3乘以6的0次方
- 4乘以6的1次方
- 0乘以6的2次方
- 5乘以6的3次方
-
然后将这些结果相加:
3*6^0 + 4*6^1 + 0*6^2 + 5*6^3 = 1107
因此,6进制数5043
等于十进制数1107
。这是将R进制数转换为十进制数的基本方法。
十进制转R进制
要将一个十进制整数转换为R进制数,可以使用以下步骤:
-
除以R并记录余数:将十进制整数除以R,同时记录每次的余数。如果商不为0,继续除以R,直到商为0为止。
-
记录余数:将每次获得的余数从下到上记录,排列成从左到右的顺序。这些余数构成了转换后的R进制数。
让我们用一个例子来说明这个过程:考虑将十进制数200转换为6进制,其中R=6。
-
第一步:200除以6,得商33,余数为2。
-
第二步:33除以6,得商5,余数为3。
-
第三步:5除以6,得商0,余数为5。
因为商为0,所以停止计算。然后,将所有余数从下到上记录,得到6进制数532
。
m进制转n进制
通常,将m进制数转换为n进制数需要通过十进制进行中转,但有一些特殊情况可以直接转换。
对于直接转换的情况,没有必要先将m进制数转换为十进制。这通常发生在两种进制之间存在特定关系的情况下。在这种情况下,可以直接使用公式或规则进行转换,而无需经过十进制中转。
二进制转八进制
要将二进制数转换为八进制数,可以按照以下步骤进行:
-
每三位二进制数转换为一位八进制数:将二进制数的位数以三个为一组分组,如果位数不是三的倍数,则在最高位(左边)补足0,以保持数值不变。
-
将每组二进制数转换为八进制数:将每组三位二进制数转换为对应的八进制数。例如,000对应八进制数0,011对应八进制数3,101对应八进制数5。
-
将所有的八进制数组合在一起:将每组的八进制数按照从左到右的顺序组合在一起,得到最终的八进制数。
例如,考虑二进制数01101
,要将其转换为八进制:
-
分组为
001 101
。 -
转换为八进制为
1 5
。
所以,二进制数01101
等于八进制数15
。
二进制转十六进制
要将二进制数转换为十六进制数,可以按照以下步骤进行:
-
每四位二进制数转换为一位十六进制数:将二进制数的位数以四个为一组分组,如果位数不是四的倍数,则在最高位(左边)补足0,以保持数值不变。
-
将每组二进制数转换为十六进制数:将每组四位二进制数转换为对应的十六进制数。例如,0010对应十六进制数2,1101对应十六进制数D。
-
将所有的十六进制数组合在一起:将每组的十六进制数按照从左到右的顺序组合在一起,得到最终的十六进制数。
例如,考虑二进制数101101
,要将其转换为十六进制:
-
分组为
0010 1101
。 -
转换为十六进制为
2 D
。
所以,二进制数101101
等于十六进制数2D
。
数(在计算机中)的表示
机器数和定点表示法(不怎么考)
-
机器数:各种数值在计算机中表示的形式,其特点是使用二进制计数制,数的符号用0和1表示,小数点则隐含,不占位置。
- 机器数有无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为0,负数符号位为1。
定点表示法
-
纯小数表示法
在纯小数表示法中,小数点的位置约定在机器数的最高数值位之前。这意味着数值被解释为小数,小数点之前的位表示整数部分,小数点之后的位表示小数部分。
例如,二进制的
1101.101
可以表示为纯小数,其中小数点之前的1101
是整数部分,小数点之后的101
是小数部分。
-
纯整数表示法
在纯整数表示法中,小数点的位置约定在机器数的最低数值位之后。这意味着数值被解释为整数,小数点之后的位被省略,不表示小数部分。
例如,二进制的
1101.101
可以表示为纯整数,其中小数点之前的1101
是整数部分,小数点之后的101
被省略。
真值
真值是机器数所代表的实际数值。根据机器数的符号位以及整数或小数表示法,可以将机器数转换为真值。真值表示机器数对应的实际数值,它是我们在计算机中进行数值计算和处理时所关心的。
数的编码方式
-
原码:一个数的正常二进制表示,最高位表示符号,数值0的源码有两种形式:+0(00000000)和-0(10000000)。
-
反码:正数的反码即原码。
负数的反码是在原码的基础上,除符号位外,其他各位按位取反。数值0的反码也有两种形式:+0(00000000),-0(11111111)。
-
补码:正数的补码即原码。
负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后未位+1,若有进位则产生进位。因此数值0的补码只有一种形式+0=-0=00000000
-
移码:用作浮点运算的阶码,无论正数负数,都是将该原码的补码的首位(符号位)取反得到移码。
机器字长为n时各种码制表示的带符号数的取值范围(差别在于0的表示,原码和反码分+0和-0,补码只有一个0,因此可以多表示一个。
若机器字长为8,给出45和-45的原码,反码,补码
浮点数的表示
-
浮点数:表示方法为
N=F*2^E
,其中E称为阶码,F称为尾数。类以于十进制的科学计数法,如85.125=0.85125*10^2
,二进制如101.011=0.101011*2^3
-
在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数0负数1),其表示如下:
-
很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定。
-
尾数的表示采用规格化方法,也即带符号尾数的补码必须为1.0xxxx(负数)或者0.1xxxx(负数),其中x可为0或1
-
浮点数的运算:
-
对阶(使两个数的阶码相同,小阶同大阶看齐,较小阶码增加儿位,尾数就右移几位)
-
尾数计算(相加,若是减运算,则加负数)
-
结果规格化(即尾数表示规格化,带符号尾数转换为1.0xxxx或0.1xxxx)
-
算数运算和逻辑运算
-
数学运算:数与数之间的算术运算包括加、减、乘、除等基本算术运算。
-
二进制逻辑运算:
-
逻辑与(&):0和1相与,只要有一个为0结果就为0,两个都为1才为1。
-
逻辑或(|):0和1相或,只要有一个为1结果就为1,两个都为0才为0。
-
异或(^):同0非1,即参加运算的二进制数同为0或者同为1结果为0,一个为0另一个为1结果为1。
-
逻辑非(!):0的非是1,1的非是0。
-
逻辑左移(<<):二进制数整体左移n位,高位若溢出则舍去,低位补0。
-
逻辑右移(>>):二进制数整体右移n位,低位溢出则舍去,高位补0。
-
校验码
奇偶校验码
-
码距(Hamming Distance) 是用来衡量两个编码之间差异的概念。
-
在单个编码中,码距是指从一个编码到另一个编码所需改变的位数。例如,在编码A:00到编码B:11的转换中,码距为2,因为需要改变两位才能从A变成B。
-
一般来说,码距越大,表示两个编码之间的差异越大,这对于纠错和检错非常有用。大的码距意味着编码之间具有更好的容错性,可以检测到或甚至纠正更多的错误。
-
-
奇偶校验码(Parity Check Code) 是一种常见的错误检测机制,通常用于在数据传输中检测错误。奇偶校验通过在编码中增加一个校验位来使编码中的1的个数为奇数(奇校验)或偶数(偶校验)。
-
奇校验:在编码中,含有奇数个1。发送给接收方后,接收方会计算接收到的编码中有多少个1,如果是奇数个,则认为无误;如果是偶数个,则认为有误。
-
偶校验:在编码中,含有偶数个1。同样,接收方计算接收到的编码中的1的个数,如果是偶数个,则认为无误;如果是奇数个,则认为有误。
奇偶校验能够检测到单一位的错误,但不能纠正错误。它的主要目的是在传输过程中快速检测是否发生了错误,以便采取相应的措施,如请求重新传输数据。在需要更高级别的错误纠正时,通常会使用更复杂的编码和校验方法,如循环冗余校验(CRC)或汉明码(Hamming Code)。
-
循环冗余校验码 (CRC)
-
编码原理:CRC只能检错,不能纠错,原理如下
- 首先,将原始报文(信息码)除以特定的多项式,得到一个余数。
- 将这个余数作为校验位添加到原始报文的末尾,形成一个新的编码,然后发送给接收方。
- 接收方也进行同样的操作,将接收到的编码除以相同的多项式,并得到一个余数。
- 如果接收方的余数与发送方的余数不同,就表示可能发生了错误。
-
编码格式
-
左侧是数据位,即原始数据。
-
右侧是校验位,由信息码产生。校验码的位数越长,校验能力越强。
-
-
由此可知,CRC由两部分组成,左边为信息码(原始数据),右边为校验码校验码是由信息码产生的,校验码位数越长,校验能力越强。求CRC编码时,采用的是模2运算(按位运算,不发生借位和进位)。
-
例题
-
如何计算?
-
模2除法
-
-
真题
海明校验码(只考计算校验位数)
-
海明码:本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距实现检错和纠错。
- 设数据位是n位,校验位是k位,则n和k必须满足以下关系:
2^k-1>=n+k
- 设数据位是n位,校验位是k位,则n和k必须满足以下关系:
-
原理:
- 与CRC校验码不同,海明校验码不是在信息最后加上校验位,而是在每个
2的n次方
位置上加。因此,这些位置也被称为校验位。我们会将原始报文从右往左进行编号,那么,对应的校验位为1,2,4,8,16…
- 与CRC校验码不同,海明校验码不是在信息最后加上校验位,而是在每个