计算机组成原理扫盲

3.3k words

完整的计算机系统包含软硬件系统 1. 表示指令执行过程的描述中: IR -> CU (IR) -> CU 2. 可重定位目标文件? 其中()强调IR中的数据本身,而不带()强调的时数据从IR到CU。 3. 速度提升50%后的速度是1.5倍

IPC=1CPI 5. 程序员可以通过jmp指令来设置程序跳转到需要执行的指令,这就是通过更改PC的值来完成的,因此PC对于程序员来说不透明而cpu中的其他寄存器对于程序员来说都是透明的 6. 计算机中的单位:K、M 、G、T、P、E、Z 7. 数据总线无处不在

相联存储器是什么 相联存储器也称关联存储器,是一种不根据地址而是根据存储内容来进行存取的存储器,可以实现快速地查找块表。既可以按照地址寻址也可以按照内容寻址(通常是某些字段),为了与传统寄存器作区别,称为按内容寻址的存储器。 向相联存储器写入信息时按顺序写入,不需要地址。读出时,要求CPU给出一个相联关键字,用它和存储器中所有单元中的一部分信息进行比较,若它们相等,则将此单元中余下的信息读出。这是实现存储器并行操作的一种有效途径,特别适合于信息的检索和更新。

数据表示与运算

补码运算溢出判断

在补码表示法中,双符号位(也称为模4补码)是一种用于检测算术运算溢出的技术。它通过扩展符号位(最高位)到两位,从而更直观地判断运算结果是否发生了上溢(正溢出)或下溢(负溢出)。

双符号位扩展:将符号位扩展到两位(如 00 表示正数,11 表示负数),其余数值位不变。

假设用 4位数值位 + 2位符号位(共6位)表示补码,数值范围为: 正数范围:00 0000(0)00 1111(+15)。 负数范围:11 0000(-16)11 1111(-1)

正数无溢出

1
2
3
4
  00 0101  (+5)
+ 00 0011 (+3)
-----------
00 1000 (+8) → 符号位为00,无溢出。

上溢

1
2
3
4
  00 1111  (+15)
+ 00 0001 (+1)
-----------
01 0000 (试图表示+16,但超出范围)

下溢

1
2
3
4
  11 0000  (-16)
+ 11 1111 (-1)
-----------
10 1111 (试图表示-17,但超出范围)

负数无溢出

1
2
3
4
  11 1011  (-5)
+ 11 1101 (-3)
-----------
11 1000 (-8) → 符号位为11,无溢出。

高级语言中的强制类型转换

强制类型转换不改变数字的机器码,只改变解释方式。其中数字的存储方式均为补码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unsigned short x = 65535;
short y = (short) x;

**长整型向短整型转换直接截取低位**

**短整型转换:**
1. 无符号数:零扩充
2. 有符号数:符号扩充

unsigned short x = 65535;
short y = (short) x;
unsigned long xL = (unsigned long) x;
long yL = (long) y;

// x = 65535
// x = 1111 1111 1111 1111
// xL = 0000 0000 0000 0000 1111 1111 1111 1111

// y = - 1
// y = 1111 1111 1111 1111
// yL = 1111 1111 1111 1111 1111 1111 1111 1111

代标志位的加法器

OF(OverFlow Flag) 溢出标志

溢出标志位是*最高位和次高位进位异或的结果,常用于表示有符号加减运算是否溢出 OF=CnCn1

补码的运算存在两种溢出: 补码的溢出发生在以下两种情况:

1. 正溢出(上溢):两个正数相加,结果超出表示范围,变成负数。

1
2
3
4
5
  (0)0111 (+7) 
+
(0)0001 (+1)
------------------
= (0)1000 (-8)

符号位从 0 变为 1,结果错误。 最高位的进位为0而次高位的进位为1

2. 负溢出(下溢):两个负数相加,结果超出表示范围,变成正数。

1
2
3
4
5
  (0)1000 (-8) 
+
(0)1000 (-8)
------------------
= (1)0000 (+0)

符号位从 1 变为 0,结果错误。 最高位的进位为1而次高位的进位为0

3. 次高位和最高位进位相同

最高位进位 次高位进位 实例 结果
0 0 0010 + 0101 = (0)0111 结果为正数且没有超过正数的表达范围
1 1 1011 + 1101 = (1)1000 结果为负数且没有超过负数的表达范围

CF(Carry Flag) 借位/进位标志

CF=CinCout

作用:

  1. 无符号数加法:当结果的最高有效位(MSB)产生进位时,CF=1。
  2. 无符号数减法:当被减数小于减数(需要借位)时,CF=1(相当于借位标志)。
  3. 移位/旋转指令:记录被移出的位(如左移时移出的最高位)。

无符号整数的进位很好理解,只要最高位进位为1就说明无符号数相加之和超出了n位能够表示的最大值即

1
2
3
4
  0000 0011 (3)
+ 1111 1011 (-5)
-------------
1111 1110 (-2, 或 254 无符号)

SF(Sign Flag) 符号标志

SF=Fn1

ZF(Zero Flag)

ZF位只用来检查是否所有位都为0,与具体使用什么码无关。 ZF=F0F2...Fn1¯

补码数据计算

加法安装正常的二进制加法运算。 负数可以有如下表示: Y=Y¯+1 以此思路,减法进行如下运算: XY=X+Y¯+1

无符号整数的乘法

有符号整数乘法

最低位 辅助位 操作
0 0 +0
0 1 +[补]
1 0 +[-补]
1 1 +0

无符号除法运算

存储系统

一些不太熟悉的概念

  1. 随机存储: 存取时间和存储位置无关
  2. 只读存储: 断电不丢失,某些类型也能重写。随机读取,写入比读出更慢。
  3. 直接存取(DAM)和顺序存取(SAM): 直接存取先找区域再在小区域内顺序查找,顺序完全按照存储顺序找。
  4. 存取时间、存储周期:
    1
    2
    3
    4
    5
    6
    7
    8
    启动存取    存取完    下次存取
    --------------------------------->
    ^ ^ ^
    | | |
    t1 t2 y3
    |----------|---------|
    存取 恢复
    |-----存取周期--------|
  5. 主存带宽: 数据传输速率,表示每秒从主存进出的信息最大数量,单位B/s或者b/s
  6. cache的数据调动对所有程序员透明,主存和辅存的数据调动仅对应用程序员透明。
  7. 若题目没有明确说明,默认cache不命中的时间为访问cache 和 主存的时间之和。
  8. 存储器的刷新: 因为电容漏电补充电荷,刷新周期常取2ms
    1. 集中刷新:集中刷新期间(死区)不能访问主存
    2. 分散刷新:没有死区但存取时间翻倍
    3. 异步刷新:以行为单位刷新,一个刷新周期每行刷一次,死区更加分散,cup不会等待很长的时间。 刷新由内存单独完成,对CPU透明。DRAM刷新以行为单位。刷新类似于读,但又有所不同,刷新不需要选片,整个存储器中的芯片同时被刷新。
  9. 引脚复用:为了减少地址线的数量行数和列数要尽可能的接近即|r - c| 尽可能小且为了降低刷新开销,行数要较少
  10. (S)DRAM的缓冲容量:为一行
  11. ROM的类型:

  1. 主存储器:现代计算机常用字节编址,存储体内的一个地址有一个字节
  2. 多模块存储器:是一种空间并行技术常用单体多字或者多体低位交叉存储器
  3. 低位交叉编址:轮流启动方式,模块存取周期为T,总线周期为r则能最大发挥CPU和存储器性能的模块的数量为

连续存取m个字所需的时间为:t1 = T + (m − 1)r

  1. 存储器访存冲突:访问某个模块的时候这个模块还没有恢复
Comments