计算机组成原理知识点

计算机系统概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据的表示和运算

BCD码

8421码
0000-1001分别对应0-9,进行加法后若超出该范
围,则需+0110进行修正(强制向高位进1)	

余3码
8421码+(0011)

2421码
表示0-4时最高位为0,表示5-9时最高位为1

整数

无符号整数

计算机硬件如何做无符号整数的加法:从最低位开始,按位相加,并往更高位进位

计算机硬件如何做无符号整数的减法:
“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法
从最低位开始,按位相加,并往更高位进位

有符号整数

计算机硬件如何做带符号数补码的减法
“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法
从最低位开始,按位相加,并往更高位进位

原码、反码、补码、移码(只有整数有,常用于阶码)

正数的原码、反码、补码相同,下面是针对负数的

原码:最高位表示符号位正负,其余是数据值
反码:最高位不变,其余位取反
补码:反码最低位+1
移码:补码最高位取反

关于移码:补码最高位取反其实并不准确
具体看这
在这里插入图片描述
在这里插入图片描述

计算机硬件如何做带符号数补码的减法(两个补码相减):

“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法
从最低位开始,按位相加,并往更高位进位

在这里插入图片描述

定点小数

和定点整数运算类似,只是小数点位置不同
在这里插入图片描述

浮点数

IEEE 754

移码不是阶码!

移码不是阶码!

移码不是阶码!

在IEEE754中的阶码虽然是以移码的概念定义的,但是偏置值和普通移码并不相同。

以单精度浮点数为例(32位),其中的阶码的位数为8,偏置值为127,即二进制数01111111,因而在转换时须加减这个偏置值,亦即符号位取反减1得到移码,反之则是取反加一。不过最好还是老老实实加减偏置值,容易出错。

而普通8位移码的偏置值为128,即二进制数10000000,因而在由补码转化成移码时将最高位(即符号位)取反即可,亦即相当于加减偏置值。
IEEE754运算中移码与阶码变换关系的理解
问题:为什么要阶码真值+127而不是+128呢?

因为8个二进制位能表示指数的取值范围为[-128,127],现在将指数变成移码表示,即将区间[-128,127]正向平移到正数域,区间里的每个数都需要加上128,从而得到阶码范围为[0,255]。

由于计算机规定阶码全为0或全为1两种情况被当作特殊值处理(全0被认为是机器零,全1被认为是无穷大),去除这两个特殊值,阶码的取值范围变成了[1,254]。

如果偏移量不变仍为128的话,则根据换算关系公式[x]阶=X+128得到指数的范围变成[-127,126],指数最大只能取到126,显然会缩小浮点数能表示的取值范围。

所以IEEE754标准规定单精度的阶码偏移量为2^{8-1} -1 (即127),这样能表示的指数范围为[-126,127],指数最大值能取到127

在这里插入图片描述

例子
在这里插入图片描述
在这里插入图片描述

校验码

在这里插入图片描述

由若干位代码组成的一个字叫码字。
将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离。
一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为“码距”
当d=1时,无检错能力;当d=2时,有检错能力;当d>=3时,若设计合理,可能具有检错、错能力

奇偶校验码

奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。

在这里插入图片描述

海明校验码

在这里插入图片描述
在这里插入图片描述

循环冗余校验码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指令系统

指令(又称机器指令):

是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。

一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。

注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令

指令格式

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。

一条指令通常要包括操作码字段和地址码字段两部分

一条指令可能包含0个、1个、2个、3个、4个地址码.
根据地址码数目不同,可以将指令分为零地址指令、一地址指令、二地址指令

零地址指令

1.不需要操作数,如空操作、停机、关中断等指令
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶(数据结构:“后缀表达式”)

一地址指令

1.只需要单操作数,如加1、减1、取反、求补等
指令含义:OP(A1)→A1,完成一条指令需要3次访存:取指→读A1→写A1
2.需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
指令含义:(ACC)OP(A1)→ACC
完成一条指令需要2次访存:取指→读A1

注:A1指某个主存地址
(A1)表示A1所指向的地址中的内容

类比:C语言指针
指针所指位置的内容

二地址指令

常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A1
完成一条指令需要访存4次,取指→读A1→读A2→写A1
三地址指令


常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A3
完成一条指令需要访存4次,取指→读A1→读A2→写A3

四地址指令


指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指→读A1→读A2→写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位A4所指地址

地址码的位数有什么影响?
n位地址码的直接寻址范围=2^n^
若指令总长度固定不变,则地址码数量越多,寻址能力越差

指令长度

指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
半字长指令、单字长指令、双字长指令
一一指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16t,则取一条双字长指令需要两次访存

定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等

定长操作码:指令系统中所有指令的操作码长度都相同
可变长操作码:指令系统中各指令的操作码长度可变
1.数据传送
LOAD
作用:把存储器中的数据放到寄存器中
STORE
作用:把寄存器中的数据放到存储器中
2.算术逻辑操作
算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
3.移位操作
算术移位、逻辑移位、循环移位(带进位和不带进位)
4.转移操作
无条件转移JMP
条件转移
JZ:结果为0;JO:结果溢出;JC:结果有进位
调用和返回CALL和RETURN
陷阱(Trap)与陷阱指令
5.输入输出操作
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)

扩展操作码

下面是一种类型操作码


指令字长为16位,每个地址码占4位:
前4位为基本操作码字段OP,另有3个4位长的地址字段A1、A2和A3。
4位基本操作码若全部用于三地址指令,则有16条。

但至少须将1111留作扩展操作码之用,即三地址指令为15条;

11111111留作扩展操作码之用,二地址指令为15条;

111111111111留作扩展操作码之用,一地址指令为15条;

零地址指令为16条。

还有其他扩展操作码设计方法。

在设计扩展操作码指令格式时,必须注意以下两点:
1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
2)各指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。

操作码分类:

定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。
一般n位操作码字段的指令系统最大能够表示2条指令。
优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。
扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。
最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的
指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
优:在指令字长有限的前提下仍保持比较丰富的指令种类;
缺:增加了指令译码和分析的难度,使控制器的设计复杂化。

寻址方式

指令寻址

确定下一条要执行的指令的存放地址,由程序计数器PC指明

顺序寻址

(PC)+"1"—>PC
此处的"1"要理解为1个指令字长
每次取指令结束后,一定会PC+"1”

跳跃寻址

执行转移类指令导致的PC值改变

数据寻址

确定本条指令的地址码指明的真实地址

直接寻址

指令字中的形式地址A就是操作数的真实地址EA,即EA=A。

间接寻址

指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操	作数地址的地址,即EA=(A)。

寄存器寻址

在指令字中直接给出操作数所在的寄存器编号,即EA=R,其操作数在由R所指的寄存器内。

寄存器间接寻址

寄存器中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R)。

立即寻址

形式地址A就是操作数本身,又称为立即数,一般采用补码形式。

隐含寻址

不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。

堆栈寻址

操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。

基址寻址

以程序的起始存放地址作为“起点”

变址寻址

程序员自己决定从哪里作为“起点”

相对寻址

以程序计数器PC所指地址作为“起点”

系统总线及其I/O接口

总线概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanlangke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值