仅涵盖核心考点,更多细节还是要回归王道课本
一、计算机系统概述
王道第一章内容。这一章考点不多,可以简单了解即可,有个印象。
1.冯诺依曼体系(考过)
- 计算机组件被分为五部分:运算器、存储器、控制器、输入设备、输出设备
- 采用“存储程序”的工作方式
- 指令与数据的地位相同
- 指令与数据均由二进制表示。
2.各部件功能
此处主要介绍存储器、运算器、控制器
存储器:存储器分为内存与外存(也叫辅存)。cpu只能与内存交互!cpu的所有数据都来自于内存(cpu内部的cache数据也来自与内存)。
cpu与内存的交互在计算机组成原理这门课学习,内存与外存的调度在操作系统这门课中学习(调度算法等)。
数据在外存(硬盘)中存储,如果cpu想要访问这个数据则必须将这个数据调入到内存,再从内存中读取。
在考研阶段涉及到的存储部件:
1.寄存器类:MAR(存储访存地址,在cpu内部)、MDR(存储从内存中读取的数据或者要存入内存的数据,在cpu内部)、IR(存储指令,在cpu内部)、PC(存储当前正在执行的指令的下一条要执行的指令的地址【注意存储的是下一条指令的地址】,在cpu内部)、通用寄存器(在cpu内部,RISC指令集中的通用寄存器的数量要多于CISC指令集的)ps:IR、MAR、MDR对于程序员不可见(透明)。
2.外存:涉及到机械硬盘、SSD等
3.RAM与ROM:RAM与ROM的区别是最基本的内容,在后续博客中会提到。
4.在微指令程序中使用的μROm、μIR等。
运算器:考研会考察有符号数与无符号数的相关运算,以及OF、SF、ZF、NF等标志的计算。
控制器:指挥各部件运作,发出控制信号。在RISC指令集的五段式流水线数据通路中,正是控制器发出相关的信号来指挥各部件运作。
3.程序的运行
依次是 预处理阶段、编译、汇编、链接。在考研试题中考察过哪一个阶段涉及到物理地址的转化,答案是链接阶段。因此要掌握各个阶段的操作。
4.计算机的指标(核心中的核心,必考)
1.字长:在考研试题中出现的机器字长为32位的含义是计算机数据通路的寄存器的位数为32位。注意:指令字长、存储字长无必然联系。
2.数据通路带宽:数据总线一次并行传送信息的数据数量。
3.吞吐量:每秒能够处理的指令数量
4.CPU时钟周期:一个时钟周期所需要的时间。
5.主频:时钟周期的倒数,一秒钟有多少个时钟周期。
6.CPI:一个指令所需要的时钟周期数量。
7.MIPS、MFPLOPS...
二、数据的运算与表示
王道第二章。这一章的内容与数学联系十分紧密,一定要理解数学推导。
1.基本概念
要熟记16进制与二进制的转化:A - 1010、B - 1011、C - 1100、D - 1101、E - 1110、F - 1111
熟记特殊数字与二进制转化(计网中会用到,记下来会节省很多时间)192 :11000000 、224:11100000.....
真值:就是一个数最原始的机器数。如 十进制的11 - 二进制为 1011 。11的真值就是1100 。
反码:作为补码的中间步骤从未直接考察过。
补码:正数的补码等于原码。负数的补码除了符号位取反再加1 。
移码:在考验中用于IEEE754浮点数求阶码,阶码的表示范围(1-254,若阶码全0则表示该浮点数为非规格化浮点数,阶码全1且尾数全0则表示无穷)。
2.移位运算
算术移位:操作对象是有符号数,在移位过程中符号位不变。左移相当于乘2,右移等于除二。
逻辑移位:将操作数视为无符号数,无脑补0 。
循环移位 (没考过)
3.补码加减法
加法:无脑加!不要管任何事情,单纯加就可以。然后判断结果看是否溢出。如 正加正=负,因此溢出。
减法:对于A-B ,要先将-B变为补码将减法变为加法,此时变化的规则不再同补码的变化。此时直接全部位取反(包含符号位,与单纯的原码变成补码不同)再加1 。注意:有符号位减法与无符号位的减法运算规则(包括变化的规则)完全相同,因此无符号数与有符号数可以用同一套加法器电路来计算。
乘除法:没考过电路,但是要记住可以用多次的移位运算来代替复杂的乘除法电路。
4.浮点数
在考研阶段只掌握IEEE754的规则即可。在IEEE754中规定了float 单精度浮点数为32位,包含1位符号位,8位阶码,23位尾数。double(没考过计算与细节,只简答的考了最基本概念),只用掌握float即可。特别注意阶码的计算规则,要加一个127的偏移值。阶码的表示范围:1-254,若阶码全0则表示该浮点数为非规格化浮点数,阶码全1且尾数全0则表示无穷。同时注意隐含了一个1在尾数前面。如 1 00000001 10000000000000000000000 的真值为 。
对于浮点数而言 阶码影响是否溢出,尾数决定精度。这部分的内容有一年的机组大题考察的十分深入,各位做到那道题目的时候会对浮点数的各种细节有更深的理解。ps:对于浮点数尾数如果进行舍入操作时,要记得阶码可能会溢出!
5.类型转化
记住 64位转化32位时直接截断高位部分,保留低32位。32位扩展位64位时,如果是有符号数要进行符号扩展,无符号数无脑0即可。
这部分还会考察转化之后如何翻译,比如double 转化位unsigned int,就先进行位数变化(先截断,或者扩展,此处应当为截断),再看转化后是不是有符号数,如果是有符号数就要看最高位是正还是负。
6.数据的排列格式
1.在数据存放的过程中,一个数据机器数的最左侧为最高有效位(MSB),最右侧为最低有效位(LSB)。大端存放就是数据实际存放的MSB在左侧,LSB在最右侧。说人话就是大端存储的形式就等同于机器数的书写方式。而小端存储正好相反,即和正常人类书写的规范是相反的。特别要注意:CISC指令集的数据排列方式一定为小端存储,因此如果在题目里辨识出了题目所给指令为CISC那么就可以确定数据以小端存储存放。
2.边界对齐,这个考点是这个章节在选择题很爱出的考点。如果题目里提到了边界对齐,题干大概率会有很多长短不一样的数据,这个时候要注意补齐数据,让他们对齐(即每个短的数据都要补到和机器字长一样长,换句话说就是让强迫症友好!!变成一个完美的长方体,没有空缺)。
7.各类型数的表示范围
原码、补码、浮点数表示范围,看王道,没啥可说的背就完事了。
8.溢出
如何判断在一个运算之后结果是否溢出,对于有符号数,我比较喜欢通过看正加正是否变为了负、负加负是否变为了正。有符号的减法的判断也是这样。我记得几年前有一道大题就考了这个点,给了两个操作数的最高位与结果的最高位求判断是否溢出的逻辑表达式。无符号数的溢出很简单,只要结果的位数超过了寄存器能够容纳的位数就溢出。
以上就是王道1、2章的内容,建议结合课后题再反复练习。然后背诵核心知识点,一切的推理都要以记忆的核心知识点为基石。
下一篇博客是王道第三章。爆肝ing。。。