完整的计算机系统包含软硬件系统 1.
表示指令执行过程的描述中: IR -> CU (IR) -> CU 2.
可重定位目标文件?
其中()强调IR中的数据本身,而不带()强调的时数据从IR到CU。
3. 速度提升50%后的速度是1.5倍
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 | unsigned short x = 65535; |
代标志位的加法器
OF(OverFlow Flag) 溢出标志
溢出标志位是*最高位和次高位的进位异或的结果,常用于表示有符号加减运算是否溢出
补码的运算存在两种溢出: 补码的溢出发生在以下两种情况:
1. 正溢出(上溢):两个正数相加,结果超出表示范围,变成负数。
1 | (0)0111 (+7) |
符号位从 0 变为 1,结果错误。
最高位的进位为0而次高位的进位为1
2. 负溢出(下溢):两个负数相加,结果超出表示范围,变成正数。
1 | (0)1000 (-8) |
符号位从 1 变为 0,结果错误。
最高位的进位为1而次高位的进位为0
3. 次高位和最高位进位相同
| 最高位进位 | 次高位进位 | 实例 | 结果 |
|---|---|---|---|
| 0 | 0 | 0010 + 0101 = (0)0111 | 结果为正数且没有超过正数的表达范围 |
| 1 | 1 | 1011 + 1101 = (1)1000 | 结果为负数且没有超过负数的表达范围 |
CF(Carry Flag) 借位/进位标志
作用:
- 无符号数加法:当结果的最高有效位(MSB)产生进位时,CF=1。
- 无符号数减法:当被减数小于减数(需要借位)时,CF=1(相当于借位标志)。
- 移位/旋转指令:记录被移出的位(如左移时移出的最高位)。
无符号整数的进位很好理解,只要最高位进位为1就说明无符号数相加之和超出了n位能够表示的最大值即
1 | 0000 0011 (3) |
SF(Sign Flag) 符号标志
ZF(Zero Flag)
ZF位只用来检查是否所有位都为0,与具体使用什么码无关。
补码数据计算
加法安装正常的二进制加法运算。 负数可以有如下表示: 以此思路,减法进行如下运算:
无符号整数的乘法
有符号整数乘法
| 最低位 | 辅助位 | 操作 |
|---|---|---|
| 0 | 0 | +0 |
| 0 | 1 | +[补] |
| 1 | 0 | +[-补] |
| 1 | 1 | +0 |
无符号除法运算
存储系统
一些不太熟悉的概念
- 随机存储: 存取时间和存储位置无关
- 只读存储: 断电不丢失,某些类型也能重写。随机读取,写入比读出更慢。
- 直接存取(DAM)和顺序存取(SAM): 直接存取先找区域再在小区域内顺序查找,顺序完全按照存储顺序找。
- 存取时间、存储周期:
1
2
3
4
5
6
7
8启动存取 存取完 下次存取
--------------------------------->
^ ^ ^
| | |
t1 t2 y3
|----------|---------|
存取 恢复
|-----存取周期--------| - 主存带宽:
数据传输速率,表示每秒从主存进出的信息最大数量,单位
B/s或者b/s cache的数据调动对所有程序员透明,主存和辅存的数据调动仅对应用程序员透明。- 若题目没有明确说明,默认
cache不命中的时间为访问cache 和 主存的时间之和。 - 存储器的刷新:
因为电容漏电补充电荷,刷新周期常取
2ms- 集中刷新:集中刷新期间(死区)不能访问主存
- 分散刷新:没有死区但存取时间翻倍
- 异步刷新:以行为单位刷新,一个刷新周期每行刷一次,死区更加分散,cup不会等待很长的时间。
刷新由内存单独完成,对CPU透明。
DRAM刷新以行为单位。刷新类似于读,但又有所不同,刷新不需要选片,整个存储器中的芯片同时被刷新。
- 引脚复用:为了减少地址线的数量行数和列数要尽可能的接近即
|r - c|尽可能小且为了降低刷新开销,行数要较少 (S)DRAM的缓冲容量:为一行- ROM的类型:
- 主存储器:现代计算机常用字节编址,存储体内的一个地址有一个字节
- 多模块存储器:是一种空间并行技术常用单体多字或者多体低位交叉存储器
- 低位交叉编址:轮流启动方式,模块存取周期为
T,总线周期为r则能最大发挥CPU和存储器性能的模块的数量为
连续存取m个字所需的时间为:t1 = T + (m − 1)r
- 存储器访存冲突:访问某个模块的时候这个模块还没有恢复