第1章 计算机系统概述
计算机层次结构
计算机硬件
冯诺伊曼基本思想
计算机功能部件
MAR和MDR
内存容量:8*8
$2^{MAR} × MDR$
例:p13 3.
“n位的计算机”means:计算字长n位,即一次可以处理n位的数据
“以m位来表示地址”means:地址码的长度,即MAR的位数
=> 地址空间:$2^m$
这里有很多的概念,看书p3-4
PC->MAR->地址总线->定位到具体地址->数据总线(指令)->MDR->IR(OP)->CU
...IR(Ad)->MAR(看图片)
3取指令,#8取数据
计算机性能指标
计算机主要指标
书p12-p14:
概念
CPU执行时间的计算(两个公式)
第2章 数据的表示与运算
数值与编码
进制转换
2转10
类比十进制书写
10转2
麻烦的做法:短除法
快一些的做法(用这个):拼凑
2转16 与 16转2
从后往前,4个一组,不够就补0
10转16
类比计算十进制每位的数值
得出的余数从后往前排,某一次商在16以内就停下(比如这里是1)
也可以拼凑法,但不太好拼(上图中下面使用的方法)
先转成二进制再转到十六进制也行
常见二进制
1)1后面有几个0,就是2的几次方
2)有几个1,就是2的几次方-1
类比二叉树的结点计算

$2^{15} = 32768$
$2^{16} = 65536$
16个1就是 65536-1=65535
定点数的编码表示
定点整数和定点小数
定点小数:小数点在前,每位2^(-n)
(记一下前面几位的数值)
小数点不会存进去,题目没说默认是整数
机器数和真值
补码和原码
转换
算补码
正数补码=原码
负数:符号位不动, 按位取反,末位+1(算得很慢)
(用这种方法快:)符号位不动,从右往左数到第一个1,右边0不变,符号位和右边第一个1中间的位数全部取反
补码转原码,原码转补码操作一样
补码的性质
补充:
0的补码是唯一的
(以8bit为例)
0的原码是0000 0000(即正零)
1000 0000(负零)是-128
补码全1:原码为-1
(特殊情况)1后面全0:几个0,就是-2的几次方
补码相加,符号位可以参与运算,但要判断
注意:判断溢出时,若使用方法(3)进位来判断,不能用十六位看,要看转成二进制后看进位
① 变符号位
② 再按转补码规则变补码
0101-1110
类比十进制减法
最高位都不够借位,可以认为前面有个1,算完之后不要最高位
补码相减,符号位也可以参与运算,但依旧要判断溢出
如:
十六进制+ 谁,能变成1后面全0,加的这个数就是它的绝对值
有的时候常规方法更好用
这种方法要注意区分正负:
正数直接算就行
反过来,十进制原码 + 十六进制的谁,能变成1后面全0,加的这个数就是它的补码。
数字比较小时好用
又一例:
无符号数和有符号数
有符号数
第一位 1 -; 0+
类型转换
无符号数和有符号数的转换
机器数不变,加上符号,真值变
例:p31 表2.1
不同字长整数间的转换
大字长->小字长:高位截断,低位赋值
例如:32位--赋-->16位,只保留低16位
小字长->大字长:对高位进行扩展——零扩展和符号扩展
零扩展:前面补0
符号扩展:前面补符号位(对于原码来说数值不变)
运算方法和运算电路
定点数的移位计算
移位是把数据相对于小数点进行移动
逻辑移位
缺的补0
算数移位
缺的左边补符号位,右边补0
移位的意义
左移:*2,或溢出(移动后符号位变了就溢出)
右移:/2,或丢失精度
以十进制为类比来理解:
只能存4位时
1234左移2位,只能存4位:本该是123400,结果是3400
右移2位:本该是12.34,结果是0012
算术移位判断溢出:左移被移出的若有和符号位不同的,就会溢出。右移不会溢出,只有1被移出会影响精度
逻辑左移判断溢出:若高位的1移除,则发生溢出
定点数的加减计算
加减运算电路
标志位:ZF OF SF CF
书p43
无符号数只看CF
CF=1,表示进位,溢出
OF无意义
有符号数只看OF
OF=0说明没溢出
机器数一样,$C{in}$、$C{out}$ 、$Cn$、$C{n-1}$都一样,但表示的值不一样,因为有符号数存的是补码
可以这样理解记忆(结果论):
浮点数的表示与运算
浮点数的表示
表示格式
符号、尾数、阶码概念:书p56
符号 +1 -0
IEEE 754标准
概念什么的见书p57-58划线部分
注意2.中,0.M,M如果是二进制,0.M就是二进制的
例
给浮点数,求机器数
① 整数、小数部分分别转为二进制
② 移 . 小数点改次数,转换为$±(1. xxx)_{2}×2^n$
③ S(1位):+0-1
④ E(8位):次数的真值+偏置值(127)
⑤ M(23位):. 小数点后面的直接抄,不够位数末尾补0
计算真值+127的时候有技巧:算(n-1)+128(n-1+1000 0000)
原码的1和小数点不用存,存小数点后面的就行,后面补0
建议写成:___(3) ____(4) _(1),方便后续转成16进制
例
给机器数,求浮点数
先转二进制
手动添上1.
n-127不好算,技巧:n-128+1(蓝色框框)
最后不好算可以左移小数点3位(黑色下划线)
数据的大小端和对齐存储
占用空间:
int 4B
short 2B
char 1B
书写格式:
0x...、...H:16进制
大小端存储
“边界对齐”方式存储
满足两个要求(见下图)
例
第3章 存储系统
存储器概述
概念看书本p81
主存储器
SRAM和DRAM
DRAM
书p86
传入行号和列号,用2根地址线(行列地址引脚复用)
共 $2^{a+b}$ 个存储单元(比如这里是 16)
可以写成 $2^a$ 行 $2^b$ 列(比如这里是 $2^2$行 $2^2$列
地址线数量=max{a, b}
静态RAM(SRAM)和动态RAM(DRAM)区别
书p87
只读存储器ROM
特点、类型:书p88
多模块存储器
单体并行存储器
多体并行存储器
高位交叉编址(顺序方式)
高位是自己芯片(存储体)的编号,低位是自己内部的地址
例:
每个存储体1M($2^{20}$),说明低20位表示内部的地址,高3位表示是哪一个存储体
低位交叉编址(交叉方式)(说“交叉编址”默认)
高位是自己内部的地址,低位是自己存储体的编号
例:
每个存储体1M($2^{20}$),说明高20位表示内部的地址,低3位表示是哪一个存储体
交叉存储器可采用轮流启动或同时启动两种方式
判断是哪种方式只需要看数据线是=单个模块数or汇总数
扩展了解
高位划掉,对于每个存储体只有4个地址,2位即可表示
拿到4位地址后,通过高两位锁定某个存储体后,只要看低两位就行
本节例题
30.
地址引脚:地址线(这里11)
数据引脚:数据线(这里8)
答:A.
33.
宽度为32位的存储器总线(也就是数据线)
4个64M×8位=>每个地址内容8位
=>4个加起来32位
=>同时启动
交叉编址:判断每个地址在哪个模块,用地址对模块总数(这里是4)取余即可
如图中的例子:6、7,分别在2、3模块
10%=4,x从2开始
double占8字节Byte(64位),每个模块8位bit
同时启动,一次能读所有模块相同的地址,拼到一起变成32位(4模块*8位(2bit4*4)*)
共占3行=>3个存储周期
答:C.
主存储器与CPU的连接
位扩展:地址不变,每个地址能放的位数变多了(变宽)
8个芯片取出的地址一样,数据汇总到一起
字扩展:总地址(即存储字长,每个单元叫一个存储字长)变多(变长)
字位同时扩展
示意图
14根地址线,但CPU传16位地址,高2位是芯片编号,经过译码器翻译到对应的芯片(模块),芯片内具体位置只用低14找即可