计算机组成原理复试复习
整理复试时可能用到的知识。
第一部分:
1,冯诺依曼机器的特点?
由输入、输出系统、运算器、存储器、控制器组成
最大的特点为程序存储(…)【程序预先存储在存储器中,要执行时从第一行开始按顺序执行】
程序和数据都以二进制的形式存储在存储器中,并且程序和数据在存储器中的地位是相等的,也就意味着计算机靠不同的指令周期来确定取出的二进制码是程序还是数据
计算机是如何区分不同指令周期的?
用标志触发器进行标记
2,为什么要以存储器为中心而不是CPU(运算器)?
因为现代CPU的计算速度相对于IO的速度来说很快,如果以计算器为中心的话会拖累CPU的速度所以以存储器为中心,尽量绕过CPU
3,编译,解释,翻译程序
翻译程序:将高级语言翻译成机器语言或汇编语言,包括编译程序和解释程序。
编译程序:将源代码一次性全部转化为目标代码,比如说.exe,之后执行的话,只执行exe文件即可,不用重新编译
解释程序:解释一句,执行一句,不生成目标文件。
汇编程序:将汇编语言书写的程序汇编成机器语言,目标文件。
4,各种字长的区别?
机器字长:计算机能直接处理的数据的位数,一般等于CPU内部寄存器的位数。
指令字长:指令的位数
存储字长:一个存储单元的长度,一般等于MDR的长度
指令字长一般为机器字长的整数倍
第二部分:运算器
1,数值校验方法
(1)海明码 1+K+n<=2的n次方(K为数据位数,n为校验码位数)
(2)CRC冗余校验:用到生成多项式
(3)奇偶校验码
2,定点数的表示方法
为什么补码能表示的数值比原码和反码多一位?
因为原码和反码的“0”的表示方式有两种:正零和负零
而在补码中零的表示方式只有一种,在原码中表示正零的10000000,在补码中表示-2n 即绝对值最大的负数
3,补码的原理是什么,为什么要用补码?
因为如果用原码(或反码)参与运算时,先要判断两个数的符号,然后根据符号的正负进行下一步运算:如果为一正一负,要进行绝对值的比较,用绝对值大的-绝对值小的,然后再加上符号。
而如果用补码,符号可以直接参与运算,运算结果自动取模。
|x|+x的补码 = 模 = 2的n+1次方 =》X的补码 = 模-|x|
当X为负数时,可以直接用X的补数代替X参与运算,运算结果自动取模。
移码的特点:
(1)与相应的补码只相差最高位数字,相当于补码加2的N次方
(2)方便比较数据大小
4,如何判断运算结果是否溢出?
什么时候会发生溢出?(首先将所有加减运算看作加法)
正负相加不可能溢出。。。
符号相同,结果与原符号相反,说明发生了溢出
(1)符号相同的数据元素,结果符号位与原符号位不同。用溢出逻辑表达式
(2)符号位进位与最高位进位(11、00、10、01)
(3)双符号位补码(计算时是双符号位,存储时不是)
5,为什么要边界对齐?
如果不边界对齐,可能使一个数据被分割在两个存储单元进行存储,也就意味着取该数据需要两个存储周期。反之边界对齐就是争取数据能一次访存取出,是一种空间换时间做法。
6,小数是如何在计算机中存储和表示的?
计算机用浮点数来表示小数:用阶码的大小来表示小数点的浮动。(类似科学记数法)
有何标准?(IEEE754标准)
(1)float类型单精度浮点数:一共32位,其中1位符号,8位阶码,23尾数
符号:确定了这个数是正数还是负数
阶码:对小数的加权,决定了浮点数的取值范围(移码表示+127偏移量)
尾数:确定了该数的精度,尾数隐藏小数之前的一(尾数用原码表示)
float浮点数的真值:1.尾数✖️2的E-127次方
(2)double类型双精度浮点数:
一共64位,其中1位符号位,11位阶码,52位尾数
(3)浮点数如何运算?步骤?
1⃣️首先要对阶,向大阶对齐(进行右规,即数值向右移动,阶码增加)
2⃣️尾数的加减(会发生假溢出)
3⃣️对结果进行规格化,
4⃣️舍入
5⃣️溢出判断
7,强制类型转换
char(1B)->int (4B)->long(8B)
Float(4B)->double(8B)
Float有效位24位
Double有效位53位(64-11)
所以从int型转为float会丢失精度,转为double型不会。