13015-计算机系统原理
江苏省高等教育自学考试【13015-计算机系统原理】学习笔记
| 课程代号 | 课程名称 | 教材代号 | 教材名称 | 作者 | 出版社 | 版次 |
|---|---|---|---|---|---|---|
| 13015 | 计算机系统原理 | 130151 | 计算机系统原理(附大纲) | 袁春风 | 机械工业出版社 | 2023 年 |
计算机基本工作原理
中央处理器(CPU)
通常把控制部件、运算部件和各类寄存器互连组成的电路称为中央处理器(CPU),简称处理器。
算术逻辑部件(ALU)
用来进行算术逻辑运算的部件,即算术逻辑部件(ALU)。
通用寄存器(GPR)
为了临时存放从主存取来的数据或运算的结果,还需要若干通用寄存器(GPR)组成通用寄存器组(GPRs)。
程序计数器(PC)
CPU 为了自动按序读取主存中的指令,还需要有一个程序计数器(PC),在执行当前指令的过程中,自动计算出下一条指令的地址并送到 PC 中保存
指令寄存器(IR)
从主存取来的指令需要临时保存在指令寄存器(IR) 中
控制器(CU)
用于自动逐条取出指令并进行译码的部件,即控制元件(CU),也称控制器
主存储器(MM)
用来存放指令和数据的主存储器,简称主存或内存
总线
CPU 为了从主存取指令和存取数据,需要通过传输介质和主存相连,通常把连接不同部件进行信息传输的介质称为总线,其中,包含了用于传输地址信息、数据信息和控制信息的地址线、数据线和控制线。
主存地址寄存器(MAR)、主存数据寄存器(MDR)
CPU 送到地址线的主存地址应先存放在主存地址寄存器(MAR) 中,发送到或从数据线取来的信息存放在主存数据寄存器(MDR) 中。
操作码字段、地址码字段
操作码字段指出指令的操作类型,如取数、存数、加、减、传送、跳转等。
地址码字段指出指令所处理的操作数的地址,如寄存器编号、主存单元编号等。
机器指令、汇编指令
使用特定计算机规定的指令格式而形成的0/1序列称为机器语言,计算机能理解和执行的程序称为机器代码或机器语言程序,其中的每条指令都由0和1组成,称为机器指令。
机器指令对应的符号表示称为汇编指令。
⭐冯·诺依曼结构计算机的工作方式、特点
冯·诺依曼结构计算机的基本思想主要包括以下几个方面:
- 采用
存储程序工作方式。 - 计算机由
运算器、控制器、存储器、输入设备和输出设备五大基本部件组成。 - 存储器能存放数据,也能存放指令,在形式上没有区别,但计算机应能区分它们;控制器能自动执行指令;运算器能进行基本算术和逻辑运算;操作人员可以通过输入/输出设备使用计算机。
- 计算机内部以二进制形式表示指令和数据;每条指令由操作码和地址码两部分组成,操作码指出操作类型,地址码指出操作数的地址;由一串指令组成程序。
⭐计算机硬件的基本组成
⭐程序和指令之间的关系
指令的执行
程序的开发与运行
机器语言、汇编语言、机器级语言
使用特定计算机规定的指令格式而形成的0/1序列称为机器语言
人们引入了一种机器语言的符号表示语言,通过用简短的英文符号和机器指令建立对应关系,以方便程序员编写和阅读程序。这种语言称为汇编语言
汇编指令和机器指令一一对应,每条汇编指令表示的功能与对应的机器指令功能完全相同,因而汇编指令和机器指令都与特定的机器结构相关,因此汇编语言和机器语言都属于低级语言,它们统称为机器级语言。
以下哪种语言是机器语言的符号化表示,与机器指令一一对应(A)
- A. 汇编语言
- B. 高级语言
- C. 脚本语言
- D. 编译语言
翻译程序、汇编程序、解释程序、编译程序
因为计算机无法直接理解和执行高级编程语言程序,因而需要将高级语言程序转换成机器语言程序。这个转换过程通常由计算机自动完成,进行这种转换的软件统称为翻译程序。
翻译程序有以下3类:汇编程序、解释程序、编译程序。
汇编程序:也称汇编器。用于将汇编语言源程序翻译成机器语言目标程序。
解释程序:也称解释器。用于将源程序中的语句按其执行顺序逐条翻译成机器指令并立即执行。
编译程序:也称编译器。用于将高级语言源程序翻译成汇编语言或机器语言目标程序。
用户程序(应用程序)
源程序文件
可执行(目标)文件
文本文件、二进制文件
通常把用ASCII码字符或汉字字符表示的文件称为文本文件。
二进制文件,其中的代码已经是机器指令,数据以及其他信息也都是用二进制表示的,不可读的,也即打开显示出来的是乱码。
外设、I/O模块
键盘、磁盘和显示器等外部设备简称为外设,也称为I/O设备,其中,I/O是输入输出(Input/Output)的缩写。 外设通常由机械部分和电子部分组成,并且两部分通常是可以分开的。
例如,键盘接口、打印机适配器、显示控制卡(简称显卡)、网络控制卡(简称网卡)等都是一种设备控制器,属于一种I/O模块。
汇编语言与机器语言之间的关系
⭐程序开发过程
各种语言处理程序(解释程序、编译程序、汇编程序)的功能
将高级语言源程序转换为汇编语言或机器语言目标程序的工具是编译程序。
程序开发过程中,将预处理后的源程序转换为汇编语言程序的阶段是编译。
高级语言程序与低级语言程序之间的关系
机器语言和汇编语言统称为机器级语言的原因是两者都面向机器结构。
可执行文件运行过程
计算机系统的层次结构
语言处理系统
指令集架构、微架构
软件和硬件之间的界面就是指令集体系结构(ISA), 简称指令集架构或指令系统,它是软件和硬件之间接口的一个完整定义。
计算机系统中软硬件的交界面是指令集体系结构。
实现ISA的电路逻辑结构称为计算机组织或微体系结构,简称微架构。
以下关于ISA和微体系结构的关系描述正确的是(C)
- A. ISA随微体系结构变化而变化
- B. 同一种ISA只能对应一种微体系结构
- C. 微体系结构必须实现ISA规定的功能
- D. 微体系结构是微体系结构的抽象
ISA是计算机组成(微体系结构)的抽象,不同ISA规定的指令集不同,而同一种ISA可以有不同的微体系结构实现,比如乘法指令可通过ALU或乘法器实现,且计算机组成(微体系结构)必须能够实现ISA规定的功能。
系统软件、应用软件
系统软件包括为有效、安全地使用和管理计算机以及为开发和运行应用软件而提供的各种软件,介于计算机硬件与应用程序之间,它与具体应用关系不大。
系统软件包括操作系统(如 Windows、UNIX、Linux)、语言处理系统(如 Visual Studio、GCC)、数据库管理系统(如 Oracle)和各类实用程序(如磁盘碎片整理程序、备份程序等软件)。
应用软件指专门为数据处理、科学计算、事务管理、多媒体处理、工程设计以及过程控制等应用所编写的各类程序。
例如,人们平时经常使用的电子邮件收发软件、多媒体播放软件、游戏软件、炒股软件、文字处理软件、电子表格软件、演示文稿制作软件等都是应用软件。
最终用户
使用应用软件完成特定任务的计算机用户称为最终用户。大多数计算机使用者都属于最终用户。例如,使用炒股软件的股民、玩计算机游戏的人、进行会计电算化处理的财会人员等。
透明
在计算机技术中,一个存在的事物或概念从某个角度看似乎不存在,即对实际存在的事物或概念感觉不到,则称为透明。通常,在一个计算机系统中,系统程序员所看到的底层机器级的概念性结构和功能特性对高级语言程序员(通常就是应用程序员)来说是透明的,也即看不见或感觉不到的。
未定义行为、未确定行为
未定义行为指语言标准规范中没有明确指定其行为的情况。若编写了未定义行为的源程序,则每次执行结果可能不同,或在不同平台下执行结果可能不同。
未指定行为是指语言标准规范中没有强制规定程序行为,而是列出多种结果供编译器选择,不同编译器可能选择不同行为结果。若源程序包含未指定行为,则采用不同编译器或同一编译器的不同版本,目标程序的运行结果都可能不同。
应用程序二进制接口(ABI)
应用程序二进制接口(ABI)主要规范的是机器级目标代码层的接口规则。
应用程序编程接口(API)
API 定义了较高层次的源程序代码和库之间的接口,通常是与硬件无关的接口。因此,同样的源程序代码可以在支持相同 API 的任何系统中进行编译以生成目标代码。在 ABI 相同或兼容的系统上,一个已经编译好的目标代码则可以无须改动而直接运行。
硬件和软件之间的相互关系
计算机系统由硬件和软件两部分组成,硬件是物理装置的总称,人们看到的各种芯片、板卡、外设、电缆等都是计算机硬件。软件包括运行在硬件上的程序和数据以及相关的文档。
⭐计算机系统的层次化结构
各类计算机用户在计算机系统中所处位置
使用计算机的用户分成以下 4 类:最终用户、系统管理员、应用程序员和系统程序员。
最终用户是指使用应用软件完成特定任务的计算机用户。大多数计算机使用者都属于最终用户。例如,使用炒股软件的股民、玩计算机游戏的人、进行会计电算化处理的财会人员等。
系统管理员是指利用操作系统、数据库管理系统等软件提供的功能对系统进行配置、管理和维护,以建立高效合理的系统环境供计算机用户使用的操作人员。其职责主要包括:安装、配置和维护系统的硬件和软件,建立和管理用户账户,升级软件,备份和恢复业务系统和数据等。
应用程序员是指使用高级编程语言编制应用软件的程序员;
系统程序员是指设计和开发系统软件的程序员,如:开发操作系统、编译器、数据库管理系统等系统软件的程序员。
很多情况下,同一个人可能既是最终用户,又是系统管理员,同时还是应用程序员或系统程序员。
本课程在计算机系统中所处位置
计算机系统性能评价
哪些因素会影响计算机的性能。能对计算机系统的性能指标进行简单计算
- 评价计算机CPU性能的基本指标是
CPU执行时间。 - CPI表示
执行一条指令所需的时钟周期数。CPU执行时间的计算公式中,CPI的含义是每条指令的时钟周期数。 - 如果已知程序中共有 种不同类型的指令,第 种指令的条数和 CPI 分别为 和 ,则程序总时钟周期数 =
- 某程序由n类指令组成,为第i类指令的时钟周期数,为第i类指令条数,该程序的总时钟周期数为
- 衡量计算机浮点操作速度的指标是
MFLOPS。 - TFLOPS表示计算机每秒完成的浮点运算次数为次
- 若机器X的CPU执行时间是机器Y的1/3,则机器X相对于机器Y的性能是
Y的3倍。 - 影响CPU执行时间的三个核心因素包括:
指令条数、CPI、时钟频率。 - 峰值MIPS的计算依据是
指令集中CPI最小的指令。 - 用户CPU时间是指
CPU运行用户程序代码的时间。用户CPU时间,指真正用于运行用户程序代码的时间。
以下关于基准程序的描述,错误的是(D)
- A. 是专门用于性能评价的程序组
- B. 可通过运行实际负载反映计算机性能
- C. 最优的基准程序是用户实际使用的程序
- D. 基准程序的性能不受硬件优化的影响
基准程序是专门用来进行计算机性能评价的一组程序,通过运行实际负载反映性能,最优的基准程序为用户实际使用的程序或典型简单程序;但基准程序存在缺陷,若其性能与某段短代码密切相关,硬件或编译器开发者可针对该代码特殊优化,导致性能评测结果失真
数制和编码
表示一个数值数据要确定三个要素:进位记数制、定/浮点表示和编码规则。任何给定的一个二进制 0/1 序列,在未确定它采用什么进位记数制、定点还是浮点表示以及编码表示方法之前,它所代表的数值数据的值是无法确定的。
计算机内部采用二进制表示信息的主要原因包括:二进制编码规则简单、与逻辑命题的真/假对应、物理器件易实现两种稳定状态。
真值和机器数的含义以及相互关系
真值:机器数真正的值。在数值前面用“+”号表示正数,“-”号表示负数的带符号的二进制数。
例如:+111,-0.101
机器数:计算机内部编码表示的数。在数字系统中用“0”表示符号“+”,用“1”表示符号“-”。
例如:00000111,11010000
定点数的原码、补码、反码和移码4种编码方式
原码表示法
一个数的原码表示由符号位直接跟数值位构成,因此,也称“符号-数值”(Sign and Magnitude)表示法。
原码表示法中,正数和负数的编码表示仅符号位不同,数值部分完全相同。
8位原码表示的二进制小数-0.100100的机器数是1.1001000。
已知[x]原=10001010,其真值x为-10。原码求真值:符号位为1,说明是负数,数值部分为0001010(十进制10),因此真值为-10。原码的数值部分直接对应真值的绝对值,无需额外转换。
原码 0 有两种表示形式:
下列关于原码表示法的描述,错误的是(C)
- A. 符号位直接跟数值位构成
- B. 正数和负数的数值部分完全相同
- C. 零的表示唯一
- D. 原码加减运算规则复杂
原码的缺点是零的表示不唯一(+0为000…0,-0为100…0),且加减运算需判断符号和绝对值大小,规则复杂
补码表示法
补码的定义。特殊数据的补码表示。补码与真值之间的转换方法
补码表示可以实现加减运算的统一,即用加法来实现减法运算。补码表示法也称“2-补码”表示法,由符号位后跟上真值的模 补码构成。
补码表示方法:“正数的补码是它本身;负数的补码等于模与该负数绝对值之差。”
因此, 位补码的最大可表示值为 ,最小可表示值为 。
原码与真值之间的对应关系简单,只要对符号转换,数值部分不需改变。但对于补码来说,正数和负数的转换则不同。根据定义,求一个正数的补码时,只要将正号“+”转换为0,数值部分无须改变;求一个负数的补码时,需要做减法运算,因而不太方便和直观。
求一个数的补码:对于正数,符号位取 0,其余同数值中相应各位;对于负数,符号位取 1,其余各位右数值部分“各位取反,末位加 1”得到。
8位补码表示的最小整数是-128。 位补码的表示范围为 ,8 位补码中,最小可表示值为
补码表示法的主要优势是可将减法转换为加法。
补码加法运算中,溢出的判断依据是最高位与次高位进位不同。
补码加减运算器中,实现减法运算的核心逻辑是被减数加上负数的补码。补码运算的主要优势是减法可转换为加法,即x-y的补码等于[x]补+[-y]补,通过对减数的补码取反加1得到[-y]补,再与被减数的补码相加实现减法。
补码加法运算中,若两个正数相加结果为负数,说明发生了溢出。
各类进位记数制数据之间的转换
下列关于进位记数制的描述中,正确的是(A)
- A. 十进制数的基数为10,运算规则“逢十进一”
- B. 二进制数的权值均为2的正整数次幂
- C. 十六进制数的基本符号包含G和H
- D. 八进制数的每一位可表示4位二进制数
二进制数的权值包括2的负整数次幂(如小数部分)。十六进制基本符号为0-9、A-F,无G和H。八进制每一位对应3位二进制数,十六进制每一位对应4位二进制数。
十进制数
日常生活中基本上都使用十进制数,每个数位用 10 个不同符号 表示,每个符号处于十进制数中不同位置时,所代表的数值不一样。例如, 代表的值是:
可以是 这 10 个数字符号中的任何一个,10 称为基数(base),它代表每个数位上可以使用的不同数字符号个数。 称为第 位上的权。在十进制数运算时,每位计满十之后就要向高位进一,即日常所说的逢十进一。
二进制数
类似地,二进制数的基数是 2,各位只能使用两个不同的数字符号 0 和 1,运算时采用逢二进一的规则,第 位上的权是 。例如,二进制数 代表的值是:
R进制数
扩展到一般情况,在 进制数字系统中,应采用 个基本符号 表示各位上的数字,采用逢R进一的运算规则,对于每一个数位 ,该位上的权为 。 被称为该数字系统的基。
在计算机系统中,常用的几种进位记数制有下列几种。
-
二进制 ,基本符号为 0 和 1。
-
八进制 ,基本符号为 0, 1, 2, 3, 4, 5, 6, 7。
-
十六进制 ,基本符号为 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F。
-
十进制 ,基本符号为 0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
R进制数转换成十进制数
任何一个 进制数转换成十进制数时,只要按权展开即可。
将二进制数 转换成十进制数。
将八进制数 转换成十进制数。
将十六进制数 转换成十进制数。
十六进制数 转换成十进制数
十进制数转换成R进制数
任何一个十进制数转换成 进制数时,要将整数和小数部分分别进行转换。
整数部分的转换
整数部分的转换方法是除基取余,上右下左。也就是说,用要转换的十进制整数去除以基数 ,将得到的余数作为结果数据中各位的数字,直到余数为 0 为止。最先得到的余数作为右边低位上的数位,最后得到的余数作为左边高位上的数位。
将十进制整数 135 分别转换成八进制数和二进制数。
解:将 135 分别除以 8 和 2,将每次的余数按从低位到高位的顺序排列如下:

所以,
小数部分的转换
小数部分的转换方法是乘基取整,上左下右。也就是说,用要转换的十进制小数去乘以基数 ,将得到的乘积的整数部分作为结果数据中各位的数字,然后用乘积的小数部分继续乘以 。以此类推,直到某一步乘积的小数部分为 0 或已得到希望的位数为止。最后,将先得到的整数部分作为左边高位上的数位,后得到的整数部分作为右边低位上的数位。
将十进制小数 0.6875 分别转换成二进制数和八进制数。
转换为二进制数:
| 步骤 | 运算 | 整数部分 |
|---|---|---|
| 1 | 1(高位) | |
| 2 | 0 | |
| 3 | 1 | |
| 4 | 1(低位) |
所以,
转换为八进制数:
| 步骤 | 运算 | 整数部分 |
|---|---|---|
| 1 | 5(高位) | |
| 2 | 4(低位) |
所以,
在转换过程中,可能乘积的小数部分总得不到 0,即:转换得到希望的位数后还有余数,这种情况下得到的是近似值。
将十进制小数 0.63 转换成二进制数。
| 步骤 | 运算 | 整数部分 |
|---|---|---|
| 1 | 1(高位) | |
| 2 | 0 | |
| 3 | 1 | |
| 4 | 0(低位) |
所以,
含整数、小数部分的数的转换
只要将整数部分和小数部分分别进行转换,得到转换后相应的整数和小数部分,然后再将这两部分组合起来得到一个完整的数。
将十进制数 135.6875 分别转换成二进制数和八进制数。
八进制数和二进制数之间的转换
八进制数转换成二进制数的方法很简单,只要把每一个八进制数字改写成等值的 3 位二进制数即可,且保持高位低位的次序不变。八进制数字与二进制数的对应关系如下。
⭐ 将 转换成二进制数。
十六进制数和二进制数之间的转换
十六进制数转换成二进制数的方法与八进制数转换成二进制数的方法类似,只要把每一个十六进制数字改写成等值的 4 位二进制数即可,且保持高位低位的次序不变。
⭐ 将十六进制数 转换成二进制数。
二进制数太长,书写、阅读均不方便,而十六进制数却像十进制数一样简练,易写易记。虽然计算机中只使用二进制一种记数制,但为了开发和调试程序、阅读机器代码时的方便,人们经常使用十六进制来等价地表示二进制,所以必须熟练掌握十六进制数的表示及其与二进制数之间的转换。
真值和机器数(编码)之间的转换
整数的表示
无符号整数的用途和表示
无符号整数的表示特点是常用于表示地址或计数。无符号整数的所有二进位均用于表示数值,无符号位,默认为非负数,常用于地址运算、计数等场景。
位无符号整数的表示范围为
C语言中,unsigned int类型变量的特点是只能表示正数或零。
无符号数乘法运算的本质是移位与加法结合。
实现32位无符号数乘法时,乘积寄存器的最小位数是64位。 两个 位无符号数相乘,乘积最大为 ,需 位才能完整表示。32 位无符号数相乘的乘积最大需 64 位存储,因此乘积寄存器最小为 64 位。
无符号整数乘法溢出的判断依据是乘积的高n位为非0。
带符号整数的表示
32位带符号整数(补码)的表示范围是()。带符号整数用补码表示时, 位的表示范围为 ,32 位时即 。
32 位带符号整数(补码)表示的最大正数是
带符号整数乘法运算中,若两个n位乘数的机器数相同,截断低n位后,无符号数与带符号数的乘积可能相同。
带符号整数乘法溢出的判断依据是乘积的高n位与低n位最高位不同。
现代计算机中使用补码表示带符号整数的原因
模运算系统的本质
解释和解决C语言程序中整数类型数据的表示和转换问题
实数的表示
浮点数的表示格式及其与表示精度和表示范围之间的关系
浮点数左规的操作是尾数左移,阶码减1。
规格化浮点数的概念和浮点数规格化方法
IEEE 754标准
IEEE 754单精度浮点数的字长为32位。双精度为64位。
IEEE 754浮点数中,阶码采用的编码方式是移码。
IEEE 754双精度浮点数的阶码宽度为11位。
IEEE 754标准中,全1阶码且尾数为0表示无穷大。
能在真值与单精度和双精度格式浮点数之间进行转换
解释和解决C语言程序中浮点数类型数据的表示和转换问题
非数值数据的编码表示
逻辑数据、西文字符和汉字字符的常用表示方法,如ASCII码、GB2312字符集
ASCII码中,大写字母’A’的编码值为65。小写字母a为97。
汉字系统中,用于存储和处理汉字的编码是内码。
汉字系统中,用于汉字输入的编码是输入码。
下列关于逻辑数据的描述,正确的是(A)
- A. 只能表示“真”或“假”
- B. 与数值数据存储形式不同
- C. 不能参与位运算
- D. 占用1个字节存储
逻辑数据取值为0或1,对应“假”或“真”,n位二进制数可表示n个逻辑值,按位参与逻辑运算。逻辑数据与数值数据都是0/1序列,存储形式无差异,需通过指令类型识别。可参与按位与、或等运。可占用1位存储。
数据的长度单位与排列
常用数据长度单位的含义,如bit、B、KB、MB、GB、TB等
- 计算机中数据的最小存储单位是
位(Bit)。 - 1KB 对应的字节数是
1024。
能够利用对大小端和小端排列方式以及数据对齐方式的理解,计算C语言程序中变量的地址以及所占空间大小等
任何信息在计算机中用二进制编码后,得到的都是一串0/1序列,每8位构成一个字节,不同的数据类型具有不同的宽度。如果以字节为一个排列基本单位,那么LSB表示最低有效字节,MSB表示最高有效字节。
大端方式将数据的最高有效字节MSB存放在最小地址单元中,将最低有效字节LSB存放在最大地址单元中,即数据的地址就是MSB所在的地址。
小端方式将数据的最高有效字节MSB存放在高地址中,将最低有效字节LSB存放在低地址中,即数据的地址就是LSB所在的地址。
若数据0x1234按小端方式存储,其最低有效字节存放在低地址单元。0x1234的最低有效字节为0x34,存放在低地址;最高有效字节0x12存放在高地址。
大端方式存储的特点是最高有效字节存低地址。
加法器和算术逻辑部件
半加器
全加器
全加器相比半加器,增加的输入信号是低位进位。
加法器
n位串行进位加法器的速度瓶颈在于进位传递延迟。
溢出标志OF
进位标志CF
符号标志SF
零标志ZF
带标志加法器的结构和功能
补码加减运算器的结构和功能
ALU的结构和功能
算术逻辑部件(ALU)的核心功能是实现算术和逻辑运算。
算术逻辑部件(ALU)的核心功能不包括(C)。
- A. 算术运算
- B. 逻辑运算
- C. 存储数据
- D. 定点数加减运算
在补码加减运算器中对给定的两个整型变量进行加减运算,并对运算结果和产生的标志信息进行解释说明
定点数乘除运算
编译器处理变量与2的幂次相乘时,常采用的优化方式是移位与加法组合。
无符号乘运算基本原理
定点原码乘运算基本原理
原码乘法运算中,符号位的处理方式是单独通过异或运算确定。
原码乘法中,乘积的数值部分是两个乘数数值部分的积。
定点补码乘运算基本原理
补码作为带符号整数的表示形式,需要计算机能实现定点补码整数的乘法运算。A.D.Booth提出了一种补码相乘算法,可以将符号位与数值位合在一起参与运算,直接得出用补码表示的乘积,且正数和负数同等对待。这种算法称为Booth(布斯)乘法。
Booth乘法算法的优势是遇到连续1或0可跳过加法。
补码乘法中,乘数最低位增加的辅助位 的初始值是0。
Booth乘法算法中,辅助位 的初始值是0。
无符号除运算基本原理
无符号数除法运算前,需先对被除数进行扩展,n位被除数扩展后的位数是2n位。
恢复余数法除法中,当中间余数为负时,需执行的操作是上商0并恢复余数。
不恢复余数法(加减交替法)的主要特点是根据余数符号决定加减操作。
定点原码除运算基本原理
定点补码除运算基本原理
根据相应乘运算原理对给定的两个整数计算出乘积的机器数及其真值,并能判断结果是否溢出
根据相应除运算原理对给定的两个整数计算出商和余数的机器数及其真值,并能判断结果是否溢出
能将整型变量和整数之间的乘运算转换为移位和加减组合运算方式
对于一个整型变量与2的幂相除的情况,能转换为右移运算
浮点数运算
浮点数加减运算过程
浮点数加减运算的第一步是对阶。
浮点数对阶的原则是小阶向大阶看齐。
浮点数规格化的目的是提高数据精度。
IEEE 754标准对附加位的添加以及舍入模式等方面规定
IEEE 754浮点数舍入模式中,“就近舍入”的核心规则是向最近可表示数舍入,中间值取偶数。
了解浮点数乘法和除法运算的基本思想
对给定的两个浮点数进行加减运算
程序转换概述
寄存器传送级语言(RTL)
汇编语言程序
机器级程序
反汇编程序
机器指令和汇编指令之间的关系
机器指令的格式及指令中应包含的基本信息
汇编指令的表示(如 Intel x86 架构中的 AT&T 格式和 Intel 格式)
⭐CISC 和 RISC 的区别以及各自的特点
指令集体系结构所规定的内容
Intel 8086/8088架构中,机器指令的W位主要作用是指示操作数宽度。
C 语言程序的机器级代码生成过程
能使用 gcc 命令、objdump 命令以及 gdb 调试工具进行程序的预处理、编译、汇编、链接、调试和反汇编处理等
IA-32 指令系统概述
实地址模式
保护模式
单指令多数据(SIMD)技术
IA-32 指令规定的操作数和 C 程序变量类型之间的关系
IA-32 指令涉及的各类寄存器组和标志寄存器(EFLAGS)的结构和定义
IA-32 中各种寻址方式的含义和有效地址的概念,以及 IA-32 变址指令字格式
IA-32 常用指令类型及其操作
IA-32 中的常用的传送类指令
定点算术运算类指令
按位运算类指令和程序执行流控制类指令等的汇编表示和指令功能
能对照 C 语言源程序或补码加减运算器等电路的功能,对 IA-32 常用指令的执行结果进行分析和解释
C 语言程序的机器级表示
IA-32 过程调用时寄存器使用约定和栈帧结构
按值传参和按地址传参的区别
嵌套调用和递归调用的基本原理
C 语言源程序中函数调用语句以及各类选择语句和循环语句所转换生成的机器级代码对应结构
能够对 C 语言源程序中各种语句和运算表达式对应的机器级代码中常用 IA-32 指令的执行结果进行分析和解释
能够写出 C 语言源程序中各种语句和运算表达式的机器级代码,也能根据机器级代码给出 C 语言程序中对应的语句(逆向工程)
复杂数据类型的分配和访问
C 语言程序中各种复杂数据类型(数组、指针、结构体和联合体)的存储分配及其相应操作对应的机器级代码结构
数据对齐存放的原因以及目前流行的几种系统平台的数据对齐规则
能够对 C 语言程序中各种复杂数据类型(数组、指针、结构体和联合体)处理对应的机器级代码中常用指令的执行结果进行分析和解释,能运用对齐规则分析结构体和联合体类型变量占空间大小
兼容 IA-32 的 64 位系统
IA-32 和 x86-64 两种 x86 架构的关联和主要差别
x86-64 不采用栈传参而采用寄存器传参的主要原因
能够对 C 语言程序中各种语句和运算表达式对应的机器级代码中常用 x86-64 指令的执行结果进行分析和解释
可执行文件生成概述
可重定位文件的形成过程
多个可重定位文件组合形成可执行文件的大致过程
可重定位文件和可执行文件的本质区别
使用 objdump 命令对可重定位文件和可执行文件分别进行反汇编,并对两种文件的反汇编结果进行对比分析
目标文件格式
ELF 目标文件的链接视图和执行视图
ELF 头的作用以及主要描述信息
ELF 目标文件中主要节(.text、.rodata、.data、.bss、.symtab、.strtab)的含义
节头表的作用以及主要描述信息
程序头表的作用以及主要描述信息
可执行文件中的信息与虚拟地址空间之间的映射关系
使用 readelf 命令对 ELF 文件中的 ELF 头、节头表和程序头表中的信息进行分析解释
符号解析与重定位
目标文件的符号表中所包含的符号类型
ELF 文件中符号表的作用和主要描述信息
未定义符号和 COMMON 符号的含义
全局符号的解析规则
静态库文件的生成过程以及静态链接方式
重定位节及其重定位表项中的重定位信息
PC 相对地址和绝对地址两种重定位方式的基本思想
共享库文件和动态链接的基本概念和特点
能运用符号解析规则分析给定程序的机器级代码中某些指令内操作数的寻址方式
能够对给定程序的机器级代码中某些指令内所含的重定位结果进行分析和解释
可执行文件的加载
程序和进程之间的关联和区别
Linux 进程描述符中对虚拟地址空间的描述
可执行文件的加载过程
三个关键函数 fork、execve 和 main 的功能以及程序加载过程形成的用户栈栈底信息结构
程序的执行和中央处理器
指令周期
内部异常
外部中断
异常/中断处理程序
断点
程序状态字
中断使能位
开中断
向量中断方式
中断向量
中断向量表
中断类型号
数据通路
控制器
指令流水线
指令的执行过程
CPU 的基本功能和基本组成
CPU 的基本工作过程
打断程序正常执行的典型事件
内部异常和外部中断的不同点和相同点
异常和中断的响应过程
指令流水线的基本概念和流水线 CPU 的基本工作原理
存储器概述
随机存取存储器
只读存储器
存储元(位元)
存储阵列(存储体、存储矩阵)
编址方式
编址单位
主存控制器
存储器容量
存取时间
程序访问的时间局部性和空间局部性
存储器各种分类方式
主存的基本结构
存储器层次结构及其与程序访问局部性之间的关系
主存与CPU的连接及读/写操作
SDRAM 的基本工作方式和读/写过程
突发传输(Burst)的概念
行缓冲器(Row Buffer)的概念
DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM 等芯片技术的基本原理
CPU 和主存之间的连接
内存条插槽和存储器总线的关系
存储器芯片的扩展方式
内存条的组织方式
内存条中 DRAM 芯片内存储单元的编址方式
取数/存数指令的操作过程
对于内存条的容量、芯片个数、芯片的数据引脚数和地址引脚数、地址字段的划分等进行简单的计算和分析
硬盘存储器
磁盘道密度
磁盘的未格式化容量和格式化容量
磁盘内部传输速率和外部传输速率
寻道时间
旋转等待时间
逻辑块号
磁盘存储器的结构和基本工作原理
磁盘记录格式
磁盘驱动器与主机之间的互连
各类只读存储器的特点
闪速存储器的基本读/写原理
固态硬盘的基本特点
对于硬盘存储器的存储容量、存取时间、盘地址、访问过程等进行简单的计算和分析
高速缓冲存储器(cache)
主存块
cache 行
命中率
缺失率
平均访问时间
cache 的基本工作原理
主存块和 cache 行之间的映射关系
替换算法的基本概念
写策略的基本概念
对于 cache 总容量、命中率、平均访问时间、某个主存块所映射的 cache 行号等进行简单计算
综合使用映射关系、替换算法、写策略等相关知识,对 C 语言程序执行过程中的访存过程进行分析,计算出各种情况下的 cache 容量和 cache 命中率等
虚拟存储器
虚拟地址空间
MMU
虚拟地址
物理地址(主存地址)
段式虚拟存储器
页式虚拟存储器
段页式虚拟存储器
页表的功能和页表项的内容
页故障异常的发现和处理过程
TLB(快表)的结构和实现
一次存储访问全过程
虚拟地址向物理地址的转换过程
存储器中硬件与软件之间的分工协作方式
根据页表或 TLB 内容进行地址转换
结合 C 语言程序、cache、虚拟存储器等方面的知识,对程序的访存过程进行分析和相应的计算
实例:Intel Core i7+Linux 存储系统
具体系统中一个完整的存储系统总体框架
四级页表方式下的地址转换过程
多级页表中页目录表和页表之间的关联
操作系统如何与硬件协同实现存储管理
I/O 子系统概述
I/O 子系统层次结构
I/O 子系统的三个重要特性及其与操作系统之间的关系
从 C 程序中执行 I/O 函数调用开始到执行内核中相关系统调用服务例程为止所经过的调用路径
系统调用封装函数的汇编代码结构
用户空间 I/O 软件
C 标准 I/O 库函数与系统级 I/O 函数之间的关系
文件的基本概念
常用系统级 I/O 函数(如
creat/open/read/write/lseek/stat/fstat/close)的基本含义
常用 C 库函数或宏定义(如
fopen/getc/putc/getchar/putchar)的基本实现方法
头文件
stdio.h中的 FILE 结构(流缓冲区)的工作原理
标准输入(
stdin)、标准输出(stdout)和标准错误(stderr)三种文件的特点
标准 I/O 库函数如何利用流缓冲区减少系统调用次数以及为何要减少系统调用次数
内核空间 I/O 软件
虚拟文件系统层
逻辑文件系统层
缓存层
通用块设备 I/O 层
绝对路径名
相对路径名
inode
inode 表
系统(打开)文件表
打开文件描述符表
文件描述符
内核空间 I/O 软件的基本层次结构
设备无关 I/O 软件层的主要功能以及组成部分
文件系统的主要任务和框架结构
设备驱动程序和 I/O 控制方式之间的关系
程序直接控制(查询)方式的特点和工作流程
中断 I/O 方式的特点和工作流程
中断服务程序的结构框架以及多重中断处理过程
DMA 方式下的 I/O 处理整个过程
中断方式和 DMA 方式的区别和联系
三种 I/O 控制方式下 CPU 用于 I/O 的开销比较
I/O 硬件和软件的接口
外设
字符设备
块设备
处理器总线
存储器总线
I/O 总线
I/O 接口
数据缓冲寄存器
状态寄存器
控制寄存器(命令寄存器)
I/O 端口
I/O 指令
计算机系统互连方式
常用总线标准
I/O 接口的基本功能和通用结构
I/O 接口在整个系统互联中的位置
I/O 接口和 I/O 端口的差别
I/O 端口的编址方式
断点保护和现场保护的不同
中断允许触发器的使用以及应在何时开/关中断
中断服务程序调用和子程序调用的差别
中断控制器的基本结构
多重中断和中断屏蔽的概念
前端总线、QPI 总线、存储器总线和 PCI-e 总线等各类总线带宽的计算




