第一章 计算机系统概述
1.计算机语言的分类:高级语言,低级语言(汇编语言与机器语言)。P8
- 高级语言是人类可读写的编程语言。低级语言包括汇编语言和机器语言两种。汇编语言是一种直接使用符号代替计算机指令的语言,便于程序员编写交互式代码。机器语言则是计算机可以直接执行的二进制指令,它不需要编译器或解释器来将代码翻译成计算机能够理解的格式。低级语言相对于高级语言而言,具有更高的运行效率和底层控制能力,但是编写难度较大且可读性不好,通常用于特定场景下的编程需求。
- ISA(指令集体系结构):软件和硬件之间接口,简称体系结构;ISA规定的内容有哪些?具体实现的组织称微体系结构,简称微架构。
- ISA规定的内容:1. 指令集:定义CPU所能够支持的指令集合,例如x86、ARM、MIPS等。2. 寄存器:定义CPU中的通用寄存器、特殊寄存器、状态寄存器等寄存器类型及其功能。3 . 内存系统结构:定义内存访问方式、地址线宽度、字节顺序等。4. I/O系统结构:定义输入输出系统架构、控制器等。
- ISA和微架构是两个不同层面上概念,微架构是软件不可感知部分。P9
- 指令集体系结构是指软件能感知到的部分,也称软件可见部分。相同的ISA可以有不同的微体系结构,微体系结构由逻辑电路实现。
2.冯·诺依曼原理的内容理解;冯·诺依曼结构计算机中数据采用二进制编码表示,冯·诺依曼计算机中,CPU如何区分取出的二进制流是指令还是数据?P14
- 冯·诺依曼原理指的是计算机应该采用存储程序的方式,即将指令和数据存储在同一块存储器中,并按地址区分,使得指令可以像数据一样被读取和处理。
- 从时间来说:取指令事件发生在“取指周期”;取数据事件发生在“执行周期”;从空间来说:取出的二进制代码是指令,一定送往指令寄存器(控制器);取出的二进制代码是数据,一定送往数据寄存器(运算器)。
3. 计算机系统性能评价,学会计算:CPI,用户CPU时间,P17- P18
- CPI = CPU时钟周期数 ÷ 执行的指令条数
- 用户CPU时间是指用户程序在CPU上消耗的时间,也可以理解为用户程序执行的时间。它是衡量计算机性能的另一个重要指标。用户CPU时间越短,表示用户程序的执行效率越高。
计算公式如下:
用户CPU时间 = 执行的指令条数 × CPI × 时钟周期(主频的倒数)
第二章 数据的机器级表示
1.浮点数尾数的规格化:尾数如果采用原码,规格化尾数必定是±0.1****格式。浮点数所能表示的范围和精度分别取决于阶码与尾数。
2.IEEE-754单精度、双精度浮点数格式,能够根据给出的真实值能求出IEEE格式的浮点数。
十进制数0.3125转换为IEEE-754单精度浮点数。
答案:将0.3125表示为二进制数为0.0101,对其规范化后变为1.01 x 2^-2。因此,阶码为-2+127=125,二进制表示为01111101。尾数为01000000000000000000000,因此IEEE格式的单精度浮点数为0 01111101 01000000000000000000000。
3.大端方式和小端方式,学会按字节编址的存储空间里如何存储数据。
大端方式是指高字节存储在内存低地址,而小端方式是指高字节存储在内存高地址
以16位整数0x1234为例:
- 在大端方式中,0x12存储在低地址,0x34存储在高地址。
- 在小端方式中,0x12存储在高地址,0x34存储在低地址。
大端正常顺序(平常上课见到的那种顺序),小端是大端的逆序
第三章 运算方法和运算部件
1.C语言,包括位扩展及位截断。P53
- 位扩展是将变量的最高位复制到所有较高的位上,从而保持变量的符号不变。例如,在将8位整数转换成16位整数时,将原来的最高位(即符号位)复制到剩余的8位中,以保持变量的符号值不变。(无符号数就拓展0)
- 位截断是指将变量的某些位设置为0,从而实现对变量的位精度的控制。例如,在将16位整数转换成8位整数时,需要将变量的高8位截断,只保留低8位的值。
2.ALU干啥的? ALU的核心是加法器。
ALU是专门的算术逻辑部件,用来完成基本逻辑运算和定点数加减运算。
3.结合习题,学会定点数一位乘法(原码一位乘法、补码一位乘法[布斯公式],掌握步骤及特点)。(以例题、习题复习)
另外注意:补码的乘法不具备[X×Y]补=[X]补×[Y]补的性质。
原码一位乘法:1101 × 1011
关于最后什么时候停止——直到原来的乘数所有位都被丢弃为止
补码一位乘法x=0.1101, y=-0.1011
关于什么时候停止运算——当乘数所有位数都参与完比较后(最后要右移),最后结果低4位不包含原来乘数的位数
4.浮点数的加减法、乘法除法运算步骤(特别注意尾数规格化),结合习题,学会计算。
例如采用IEEE-754扩展的浮点数格式(例如8位浮点数包含1位符号位,4位阶码和3位尾数,阶码的偏置为7),实现浮点数相乘过程。
浮点数加减法(用补码表示)
更早的应该是先将给出的十进制数转为二进制数(IEEE规格化——1.xxx),然后再转成浮点数
(1)对阶:采用小阶向大阶看齐的方法,实现对阶(尾数要移动相应的对阶数)
(2)尾数相加减:尾数进行相加减,并保留正确的长度。(正常加减)
(3)规格化
(3)舍入:将结果舍入为对应精度的数值,如四舍五入。
(4)溢出判断:如果加减后的结果超出了该浮点数所能表示的范围,发生了溢出,需要进行错误处理。
规格化后应该是——1.xxx
- 尾数相乘(原码乘法)、阶码相加(减)
- 尾数规格化
- 尾数舍入处理
- 阶码溢出判断
习题参考部分:见作业参考答案。
原码、补码加减乘除法
答案
浮点数加减乘除
答案
注意尾数相加处——先用原码相加,如果没有进位则为减数的符号,有进位是被减数的符号(其实,也可以直接根据十进制看正负)。如果符号是负的,还要再用补码进行表示。可以自己算算这里的尾数相加
第四章 指令系统
1.指令操作码编码:固定长度操作码,扩展操作码。 例如习题6。
一条指令的格式:
| 操作码 | 地址码A1 | 地址码A2 | 地址码A3 |
指令的长度是固定的,题设会给,一般是16字节,地址码长度一般也会给
1.固定操作码编码
指令的操作码部分采用固定长度编码
2.扩展操作码编码
2.1 等长扩展法
2.2 不等长扩展法
2.指令系统中采用不同灵活的寻址方式,使用尽量短的地址码访问尽可能大的寻址空间。例如变址寻址的目标地址计算、相对寻址方式的计算。
变址寻址:PC+偏移量
相对寻址:寄存器内容+偏移量
3.CISC与RISC的主要特点(尤其RISC特点,选择题角度出发,理解含义就可)。
CISC:
- 采用复杂指令集,指令长度不固定,有多种寻址方式和操作类型。
- 拥有大量的指令集和复杂的指令编码方式,可以完成高级操作并减少代码长度。
- 硬件资源相对较多,能够充分利用硬件实现各种复杂的指令。
- 对编译器和开发人员的要求较低,直接翻译高级语言到汇编语言即可。
- 适合于数据密集型应用,如数据库、图像处理等。
RISC:
- 采用精简指令集,指令长度固定,只支持简单的寻址方式和操作类型。
- 指令集数量较少,每个指令执行的操作也比较简单,可以提高指令执行速度和效率。
- 硬件资源相对较少,采用流水线处理等技术来加速指令执行。
- 对编译器和开发人员的要求较高,需要更多的工作来优化代码。
- 适合于计算密集型应用,如数据挖掘、模拟仿真等。
- 计算机执行程序所需要的时间
P= I×CPI×T
其中I是指令数,CPI是执行每条指令所需的平均周期数,T时钟周期。单周期CPU:CPI=1,还有流水线CPU,而超标量流水CPU<1。 - 1 s ( 秒 ) = 1 0 3 m s ( 毫秒 ) = 1 0 6 μ s ( 微秒 ) = 1 0 9 n s ( 纳秒 ) 1s(秒)=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒) 1s(秒)=103ms(毫秒)=106μs(微秒)=109ns(纳秒)
- 频率在数学表达式中用“f”表示,其相应的单位有:Hz(赫)、kHz(千赫)、MHz(兆赫)、GHz(吉赫)。其中1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz。
4.结合习题,学会C高级语言的MIPS机器代码表示,注意MIPS寄存器的使用约定。注意MIPS汇编语句的执行过程,例如算术移位、逻辑移位。
算术移位——带符号
逻辑移位——不带符号
习题参考部分:见作业参考答案。
相对寻址
假定某计算机中有一条转移指令,采用相对寻址方式,共占两个字节,第一字节是操作码,第二字节是相对位移量(用补码表示),CPU每次从内存只能取一个字节。假设执行到某转移指令时PC的内容为200,执行该转移指令后要求转移到100开始的一段程序执行,则该转移指令第二字节的内容应该是多少
注意取完操作码之后再计算,所以是202
用补码表示
变址寻址
注意(1)这里的12是指十进制要转成十六进制
相对寻址和变址寻址都是计算完之后就是有效地址,里面的内容就是操作数
指令操作码编码:固定长度操作码,扩展操作码
注意:定长指令字格式≠定长操作码
更多参考,一定要看
其中,扩展编码时:二地址留出一种编码(1111)用来给一地址扩展简而言之——给出1111时,计算机辨认出要进行扩展
。所以,零地址时,要二地址和一地址的扩展编码总共10位
设计指令
看看就行了
转移指令
阅读MIPS指令、计算程序运行时间
1: 将 a2 的内容左移 2 位,即乘 4
2: 将 a3 的内容左移 2 位,即乘 4
3: 将
v
0
v0
v0 置零
4: 将
t
0
t0
t0 置零
5: 将第一个数组的首地址存放在
t
4
t4
t4
6: 取第一个数组的第一个元素存放在
t
4
t4
t4
7: 将 t1 置零
8: 将第二个数组的首地址存放在
t
3
t3
t3
9: 取第二个数组的第一个元素存放在 t3
10: 如果 t3 和 t4 不相等,则跳转到
s
k
i
p
skip
skip
11: 将 v0 的值加 1,结果存于
v
0
v0
v0
12: 将 t1 的值加 4,结果存于
t
1
t1
t1
13:如果
t
1
t1
t1 不等于
a
3
a3
a3 , 即还未取完数组中所有元素,则转移到
i
n
n
e
r
inner
inner
14: 将
t
0
t0
t0 的值加
4
4
4
15:如果
t
0
t0
t0 不等于
a
2
a2
a2 , 即还未取完数组中所有元素,则转移到
o
u
t
e
r
outer
outer
写MIPS语句
十进制25在MIPS语句中也是直接用十进制(看上去是这样的)
注意一下
L
U
I
LUI
LUI
s u b sub sub $t1 $t1 $t2—— t 1 − t 2 t1 - t2 t1−t2 存到 t 1 t1 t1 上
修改MIPS指令
MIPS指令
根据C语言写MIPS
看看就行了,真别考这种题吧,写不出来😭😭😭