来都来了点个赞收藏关注一下再走呗🌹🌹🌹🌹
第1章:绪论
1.冯·诺依曼机特点,与现代计算机的区别
冯诺依曼计算机的基本思想是:程序和数据以二进制形式表示,存储程序控制。在计算机中,事先将程序(包含指令和数据)存入主存储器中,计算机在运行程序时就能自动地、连续地从存储器中依次取出指令且执行;而数据和指令都是以二进制形式存储在存储器中的。
冯诺依曼计算机由五部分组成:
(1)输入设备
输入设备的主要功能是将程序和数据以机器所能识别和接收的信息形式输入到计算机,例如:键盘、鼠标、摄像机
(2)输出设备
输出设备的任务主要是将计算机处理的结果以人们可以接收的形式和其他系统所要求的信息形式输出,例如:显示器,打印机。
(3)存储器
存储器由主存储器和辅助存储器组成。cpu可以直接访问的是主储存器,主储存器的工作方式是按照存储单元的地址进行存取的,这叫按照地址存取。
主存储器:地址寄存器(MAR),数据寄存器(MDR),存储体
MAR:用于寻址,地址进行编译后找到对应的存储单元,MAR和地址码长度的长度是一致的,MAR有n位,则有2^n个存储单元。
MDR:用于暂存要从存储器读写的信息,长度为存储字长
(4)运算器
运算器是计算机的执行部件,用于进行算术运算和逻辑运算
(5)控制器
控制器由,程序计数器PC、指令寄存器IR、控制单元CU组成
PC:用来存放当前与执行指令地址,具体自动加1就可以得到下一条要执行指令地址
IR:用来存放当前指令,内容来自MDR
控制器的实质就是解释程序,它每次从存储器中读取一条指令,存入指令寄存器中,通过指令译码器进行译码(分析),以确定应该进行什么操作,再由控制逻辑根据分析的结果(译码信号)产生一系列的控制信号(又称为微命令),发向各个部件以控制它们执行指令所规定的操作。连续不断、有条不紊地继续上述动作,即所谓执行程序。
因此,控制器的主要任务有两项:一是按照程序要求,控制程序中指令的执行顺序;二是根据指令寄存器中的指令码控制每一条指令的执行。鉴于控制器的上述功能,它主要由微命令发生器和一些专用的寄存器组成。
冯·诺依曼机的主要特点包括:
数字计算机的数制采用二进制。
计算机应按照程序顺序执行。
指令和数据以同等地位存于存储器内,并可按地址寻访。
指令和数据均用二进制代码表示,指令由操作码和地址码组成。操作码表示操作性质,地址码表示操作数在存储器中的位置。
指令在存储器内按顺序存放,通常指令是顺序执行的,但在特定条件下,可根据运算结果或设定条件改变执行顺序。
计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备五大部件组成,其中运算器是中心,控制器通过控制线与各个部件通信。
现代计算机与冯·诺依曼机的区别在于,现代计算机已经发展为以存储器为中心,使I/O操作尽可能地绕过CPU直接在设备和存储器之间完成,以提高系统的整体运行效率。这与冯·诺依曼机早期以运算器为中心的设计有所不同。
另外,还有一些具体的存储和架构设计上的差异。例如,哈佛结构是为了高速数据处理而采用的,因为可以同时读取指令和数据(分开存储的),大大提高了数据吞吐率,但结构相对复杂。而通用微机指令和数据是混合存储的,结构简单且成本低。
2.计算机的层次结构
计算机的组成:硬件和软件
⭐⭐⭐计算机系统的五大层次结构:微指令机器、机器语言机器、操作系统机器、汇编语言机器、高级语言机器
三种级别的语言和对应程序:高级语言、汇编语言、机器语言(编译程序和解释程序)
我们编写的高级语言需要被编译程序或解释程序翻译成汇编语言或机器语言
编译程序:一次性将高级语言翻译成机器语言程序,如整体翻译(编译语言:C、C++)
解释程序:一句一句将高级语言翻译成机器语言程序,如同声传译(解释语言:JavaScript、Python、Shell)
3.计算机的特点
1.能在程序控制下自动连续地工作
2.运算速度快
3.运算精度高
4.具有很强的幸喜存储能力
5.通用性强,应用领域广
(1)机器字长
计算机进行一次定点整数运算所能处理的二进制数据的位数,机器字长一般与计算机内部的寄存器的大小是相等的。机器字长越长,可表示的数的范围就越大,计算机的精度就越高;
(2)数据通路带宽
指外部数据总线一次所能并行传送信息的位数;
(3)主存容量
主存容量是指主存所能存储信息的最大容量,可以字、字节等衡量,可用“字数 x 字长”表示存储容量的大小;
第一章习题
1、完整的计算机系统应该包括
A. 运算器、存储器、控制器
B. 外部设备和主机
C.主机和应用程序
D. 配套的硬件设备和软件系统
答案:D
计算机系统是由硬件和软件构成的
2. 冯•诺依曼机的基本工作方式是
A. 控制流驱动方式
B. 多指令多数据流方式
C. 微程序控制方式
D. 数据流驱动方式
答案:A
冯•诺依曼机最主要的特征是采用”存储系统“原理,是控制流驱动的方式
3.下列是冯•诺依曼机工作方式的基本特点。
A. 多指令流单数据流
B. 按地址访问并顺序执行指令
C. 堆栈操作
D. 存储器按内容选择地址
答案:B
冯•诺依曼机是按照内存中存储的程序顺序的执行指令,存储程序的阐述答案B
4. 以下说法错误的是()。
A. 硬盘是外部设备
B. 软件的功能与硬件的功能在逻辑上是等价的心
C. 硬件实现的功能一般比软件实现具有更高的执行速度
D. 软件的功能不能用硬件取代
答案:D
硬件和软件在逻辑上都有等价性,很多在软件上可以实现的功能在硬件上也可以实现,但是硬件实现的成本比较低,通常就优先采用硬件实现
5. 存放当前执行指令的寄存器是()。
A. MAR
B. PC
C. MDR
D. IR
答案:D
IR是指令寄存器、PC是存放的下一条指令的地址、MAR用来存放预访问的存储单元地址,MDR存放从存储单元取出来的数据
6. 在 CPU 中,跟踪下一条要执行的指令的地址的寄存器是()。
A. PC
B. MAR
C. MDR
D.IR
答案:A
解释如上题所示
7. CPU 不包括()
A. 地址寄存器
C. 地址译码器
B. 指令寄存器(IR)
D. 通用寄存器
答案:C
地址译码器是主存的部分
8.MAR 和MDR 的位数分别为()
A. 地址码长度、存储字长
C. 地址码长度、地址码长度
B. 存储字长、存储字长
D. 存储字长、地址码长度
答案:A
MAR是地址寄存器、MDR是数据寄存器,所以答案就显而易见了
9. 在运算器中,不包含()。
A. 状态寄存器 B. 数据总线
C. ALU D. 地址寄存器
答案:D
地址寄存器是在CPU当中的
10. 下列关于 CPU 存取速度的比较中,正确的是()
A. Cache>内存>寄存器
B. Cache>寄存器>内存
C. 寄存器>Cache>内存
D. 寄存器>内存>Cache
答案:C
寄存器在Cpu内部是cpu访问最快的,cache是用在寄存器和内存之间的,内存的访问速度是最慢的。
11. 若一个8位的计算机系统以16 位来表示地址,则该计算机系统有()个地址空间。
A. 256
B. 65535
C. 65536
D. 131072
答案:C
16 位来表示地址,也就是2^16个地址空间
2^16=65536
12.() 是程序运行时的存储位置,包括所需的数据。
A. 数据通路
B. 主存
C. 硬盘
D. 操作系统
答案:B
13. 下列()属于应用软件。
A. 操作系统
B. 编译程序
C. 连接程序
D. 文本处理
答案:D
14.关于编译程序和解释程序,下列说法中错误的是 ()
A. 编译程序和解释程序的作用都是将高级语言程序转换成机器语言程序
B. 编译程序编译时间较长,运行速度较快
C.解释程序方法较简单,运行速度也较快
D. 解释程序将源程序翻译成机器语言,并且翻译一条以后,立即执行这条语句
答案:C
解释程序要一边翻译一边执行速度较慢
15.可以在计算机中直接执行的语言和用助记符编写的语言分别是()
1. 机器语言 II. 汇编语言 II.高级语言 IV.操作系统原语 V.正则语言
A. II. III
B. II. IV
C.I、Ⅱ
D. I. V
答案:C
直接执行的是机器语言,汇编语言用助记符编写以便记忆
16.只有当程序执行时才将源程序翻译成机器语言,并且一次只能翻译一行语句,边翻译边执行的是()程序,把汇编语言源程序转变为机器语言程序的过程是()。
I. 编译 II.目标 Ⅲ.汇编 IV. 解释
A. Ⅰ、Ⅱ
в. IV、Ⅱ
C.IV、I
D. IV. Ⅲ
答案:D
17. 下列叙述中,正确的是()
I. 实际应用程序的测试结果能够全面代表计算机的性能II. 系列机的基本特性是指令系统向后兼容IⅢ.软件和硬件在逻辑功能上是等价的
A. II
B. III
C. II和Ⅲ
D. Ⅰ、II和Ⅲ
答案:C
比如浮点数可以通过浮点计数器进行计算也可以通过编写程序计算。
18. 在CPU的组成中,不包括()
A.运算器
B. 存储器
C.控制器
D. 寄存器
答案:B
中心处理器(CPU)由运算器和控制器组成,运算器和控制器中都内置了寄存器
19.下列()不属于系统软件。
A. 数据库系统
C. 编译程序
B. 操作系统
D. 以上3种都属于系统程序
答案:A
20. 关于相联存储器,下列说法中正确的是
A. 只可以按地址寻址
B. 只可以按内容寻址
C. 既可按地址寻址又可按内容寻址
D. 以上说法均不完善
答案:C
21.计算机系统的层次结构可以分为6层,其层次之间的依存关系是()。
A. 上下层之间相互无关
B. 上层实现对下层的功能扩展,而下层是实现上层的基础
C. 上层实现对下层的扩展作用,而下层对上层有限制作用
D. 上层和下层的关系是相互依存、不可分割的
答案:B
22.【2009统考真题】冯•诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区分它们的依据是用()。
A. 指令操作码的译码结果
B. 指令和数据的寻址方式
C. 指令周期的不同阶段
D. 指令和数据所在的存储单元
答案:C
在取指令周期中是取出来的是指令,在执行阶段取出来的是数据
23. 【2016统考真题】 将高级语言源程序转换为机器级目标代码文件的程序是()
A. 汇编程序
B.链接程序
C.编译程序
D. 解释程序
答案:C
具体的自己了解编译程序翻译程序解释程序的定义
24.【2015统考真题】计算机硬件能够直接执行的是
I. 机器语言程序 II.汇编语言程序 II.硬件描述语言程序
A. 仅I
B. 仅I、II
C. 仅I、Ⅲ
D.I、Ⅱ、Ⅲ
答案:A
硬件可以直接执行的只有机器语言(二进制编码)
25.【2019统考真题】下列关于冯,诺依曼计算机基本思想的叙述中,错误的是()
A. 程序的功能都通过中央处理器执行指令实现
B. 指令和数据都用二进制数表示,形式上无差别
C.指令按地址访问,数据都在指令中直接给出
D.程序执行前,指令和数据需预先存放在存储器中
答案:C
数据和指令是在不同的指令周期中的,数据一般都是要事先存放在寄存器中的
26.【2022 統考真题】 将高级语言源程序转换为可执行目标文件的主要过程是()。
A. 预处理一编译一汇编一链接
B. 预处理一汇编一编译一链接
C. 预处理一编译一链接一汇编
D. 预处理一汇编一链接一编译
答案:A
将源文件转化为可执行文件的步骤分为四步:预处理一编译一汇编一链接。
简答题:
1、翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特征是什么?
- 翻译程序:翻译程序是一种更广泛的术语,它涵盖了将一种编程语言转换为另一种编程语言的过程。这包括编译程序和解释程序。
- 汇编程序:汇编程序是将汇编语言代码转换为机器语言代码的过程。汇编语言非常接近计算机硬件,因此汇编程序是翻译程序的一种,通常用于优化高级语言的程序代码。
- 编译程序:编译程序是一种将高级编程语言源代码转换为机器语言(也称为目标代码)的过程。一旦编译完成,就可以直接运行生成的可执行文件。编译过程通常包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成等阶段。
- 解释程序:解释程序是一种特殊类型的翻译程序,它读取源代码并逐行解释执行。解释程序没有像编译程序那样的全局转换阶段,而是在读取每一条语句时立即转换并执行。这使得解释程序更容易编写和理解,但通常比编译程序的运行速度慢。
2、计算机是由哪几部分组成的?以那部分作为中心?
计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成。从冯诺依曼计算机结构来看,计算机的核心是存储器;而从现代计算机来看,计算机的核心是中央处理器(CPU)。
3、不同级别的语言编写的程序有什么区别?那种语言编写的程序可以直接被硬件直接执行?
机器语言和汇编语言与机器指令对应,而高级语言不与指令直接对应,具有较好的可移植性,其中机器语言可以被硬件直接执行。
第2章:计算机中的信息表示
2.1.原码、反码、补码、移码定义、数据表示范围
2.1.1、原码
原码是一种二进制编码方式,它直接将数值的二进制形式转换为机器码。原码就是“未经更改”的码,当一个二进制数大于0时,符号位为0;二进制数小于0时,符号位为1;二进制数等于0时,符号位可以为0或1。
在计算机中,所有的数包括正数和负数都用0和1来表示,数字的正负号也用0和1表示。如果一个机器数字长是n位的话,约定最左边一位用作符号位,其余n-1位用于表示数值。
[+1]原 = 0000 0001 [-1]原 = 1000 0001
[+11]原 = 0000 1011 [-11]原 = 1000 1011
2.1.2、反码
反码:是原码的一种变形,对于正数,反码与其原码相同;对于负数,反码是对原码按位取反(即符号位不变,其他位取反)。反码可以用于实现减法运算,但还是不便于直接用于加减混合运算。
反码的表示方法是:
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
2.1.3、补码
补码: 是计算机内部用于表示数值的真正形式。对于负数,补码是反码加1;对于正数,补码与其原码相同。补码在计算机中有两个主要优点:首先,它使得加法和减法操作变得简单统一;其次,它使得符号位可以参与运算,从而简化了计算机中的进位和溢出处理。
补码的表示方法是:
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
- ([x]补)全部相反+1=[-x]补
例如:X=-101011 , [X]原= 10101011 ,
[X]反=11010100,[X]补=11010101,[X]移=01010101
2.1.4、移码
移码是一种表示浮点数阶码的方法,其符号位用“1”表示正数,用“0”表示负数,数值部分与补码相同。通常,移码由1位符号位和n位数值位组成。在移码中,正数的移码与其原码相同,负数的移码是其原码按位取反后加1。
移码的一个特点是它可以使得浮点数的加法和减法运算变得简单统一。另外,移码表示法也有利于浮点数的溢出判断和表示。当出现000…00时(表示-2^n),属于浮点数下溢。
[+1] = [00000001]原 = [00000001]反 = [00000001]补= [10000001]移
[-1] = [10000001]原 = [11111110]反 = [11111111]补= [01111111]移
2.1.5、数据表示范围
- 无符号二进制数:00000000到11111111,即十进制中的0到255。
- 原码:符号位+真数值,正数的符号位为0,负数的符号位为1。例如,+7的原码为00000100,-7的原码为10000100。因此,八位的原码可以表示-127到+127的范围。
- 反码:正数的反码与其原码相同,负数的反码是其原码除符号位外各位取反。例如,+7的反码为00000100,-7的反码为11111011。因此,八位的反码可以表示-127到+127的范围。
- 补码:正数的补码与其原码相同,负数的补码是其反码加一。例如,+7的补码为00000100,-7的补码为11111100。因此,八位的补码可以表示-128到+127的范围。
⭐ ⭐(特别的)[10000000]补=-128(这个是一个很特殊的计算,因为我们知道负数的补码是由反码加一得来的所以要得到0000000只可以是1111111加一得来的所以说也就是在127的基础上再加上一个1,加上符号位就是-128)
[10000000]补=[11111111]反+1=-128
5.移码:用来表示浮点数,符号位单独占一位,紧随其后的是指数和尾数(有效数字)。例如,+7的移码为01000100,-7的移码为11000100。因此,八位的移码可以表示+32到-32的范围。
2.2.指令的表示
指令的基本信息:
1.操作码:该指令需要完成的操作
2.操作数的地址:待操作数的存放地址(包括寄存器地址、主存地址、内存地址等)
3.操作结果存放地址:操作结果的存放地址
4.下一条操作码地址(由PC给出)
地址码结构:
三地址指令:op是操作码、A1、A2、A3分别表示操作数A1、A2的地址和结果存放的地址A3,也就是对A1、A2地址中的值进行操作把结果存到A3的地址中。
op | A1 | A2 | A3 |
二地址指令:op是操作码、A1、A2也就是把A2地址的值和A1地址的值进行操作然后把操作出来的值存放到A1中。
(A1)OP(A2) -> (A1)
op | A1 | A2 |
一地址指令
op | A1 |
一地址指令分为两种形态,要根据操作数确定是哪一种?
①只有目的操作数的单操作数指令
也就是操作完这个操作数还把值存到当前的地址上。也就是加1,减1操作
OP(A1) -> A1
②隐含约定目的地址的双操作数指令
操作数源地址A1和另一个操作数的隐含在CPU中累加器AC上,把运算之后的结果还是会存放在累加器AC中
(AC)OP(A1) -> AC
零地址指令
op |
零地址指令也有两种可能:
①不需要操作数的指令,如:空操作数指令、停机指令。
②所需的操作数是隐含指定的。
这种指令的操作数隐含在寄存器中,指令可直接访问寄存器,也就是存在了堆栈汇中,由堆栈指针SP隐含指出,操作完的结果还是存在堆栈中。
2.3.寻址方式
计算机组成寻址方式是指确定本条指令的操作数地址以及下一条将要执行的指令地址的方法,与硬件结构紧密相关,而且直接影响指令格式和指令功能。可以分为指令寻址和数据寻址两大类。
其中,指令寻址分为顺序寻址和跳跃寻址两种。顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址;跳跃寻址则通过转移类指令实现。数据寻址种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。
(立即寻址、直接寻址、寄存器寻址、间接寻址、寄存器间接寻址、基址或变址寻址、基址变址寻址、相对寻址、堆栈寻址) 有效地址
1.立即寻址:操作数就在指令中,紧跟在操作码后面。执行指令时,指令给出的是操作数的有效地址,而不是操作数本身。因此,CPU执行该指令时,可直接从指令中取得操作数。这种方式的优点是简单、直观、易于实现。缺点是指令的长度将随操作数的长度而变化,从而影响了指令的长度和执行速度。
在汇编语言中,指令“MOV AX, 1234H”就是立即寻址的一个实例。这里,“MOV”是操作码,“AX”是目标操作数,“1234H”是立即数。该指令将立即数“1234H”直接赋给寄存器“AX”。
2.直接寻址:操作数的有效地址EA(即有效地址EA)由指令给出。执行指令时,CPU将指令中的形式地址A作为有效地址EA来访问内存单元。
实例(x86汇编):
MOV AX, [0023H]
解释:这条指令将内存地址0023H中的内容移动到AX寄存器中。
3.间接寻址:操作数的有效地址EA由内存单元给出。执行指令时,CPU首先从内存单元中取出有效地址EA,然后再用该地址EA访问内存单元。
实例(x86汇编):
MOV AX, [BX]
解释:这条指令将BX寄存器指向的内存单元中的内容移动到AX寄存器中。
4.寄存器间接寻址:操作数的有效地址EA由寄存器给出。执行指令时,CPU先从寄存器中取出有效地址EA,然后再用该地址EA访问内存单元。
实例(x86汇编):
MOV AX, [BX+SI]
解释:这条指令将BX和SI寄存器的值相加,并将结果指向的内存单元中的内容移动到AX寄存器中。
5.相对寻址:操作数的有效地址EA是程序计数器PC的内容与某个变址寄存器的内容之和。执行指令时,CPU先将程序计数器PC的内容加上某个变址寄存器的内容,从而得到操作数的有效地址EA,然后再用该地址EA访问内存单元。
实例(x86汇编):
MOV AX, [OFFSET PROGRAM]
解释:这条指令将OFFSET PROGRAM的地址加载到AX寄存器中,其中OFFSET PROGRAM是相对于当前指令位置的一个标签或地址。
6.基址寻址:操作数的有效地址EA是基址寄存器和位移量之和。执行指令时,CPU先将基址寄存器的内容加上位移量,从而得到操作数的有效地址EA,然后再用该地址EA访问内存单元。
实例:MOV AX, [BX+DISP]
解释:这条指令将BX寄存器中的值与DISP相加,并将结果指向的内存单元中的内容移动到AX寄存器中。其中DISP可以是立即数、寄存器或表达式,用于指定相对于BX寄存器内容的位移量。
7.变址寻址:操作数是变址寄存器的内容加上某个位移量。执行指令时,CPU先将变址寄存器的内容加上某个位移量,从而得到操作数的有效地址EA,然后再用该地址EA访问内存单元。
实例:MOV AX, [BX+SI+DISP]
解释:这条指令将BX、SI寄存器的值与DISP相加,并将结果指向的内存单元中的内容移动到AX寄存器中。其中DISP可以是立即数、寄存器或表达式,用于指定相对于BX和SI寄存器内容的位移量。
8.基址加变址寻址:这种方式的指令格式类似于前面的变址方式,所不同的是此处的变址寄存器的内容不是直接加到指令给出的位移量上,而是加到另一个变址寄存器的值上。
实例(x86汇编):
MOV AX, [BX+DI+SI]
解释:这条指令将BX、DI和SI寄存器的值相加,并将结果指向的内存单元中的内容移动到AX寄存器中。
9.相对基址变址寻址:这种方式的指令格式类似于前面的相对寻址方式,所不同的是此处的变址寄存器的内容不是直接加到程序计数器PC上,而是加到另一个变址寄存器的值上。
实例:MOV AX, [BX+DI+DISP]
解释:这条指令将BX、DI寄存器的值与DISP相加,并将结果指向的内存单元中的内容移动到AX寄存器中。其中DISP可以是立即数、寄存器或表达式,用于指定相对于BX和DI寄存器内容的位移量。
10.堆栈寻址:堆栈是一种数据结构,其操作具有后进先出(Last In First Out, LIFO)的特性。堆栈寻址方式就是按照堆栈的这种特性来访问数据的一种方式。在堆栈中,最后一个进入堆栈的元素位于堆栈的顶部,因此访问堆栈中的元素时,总是从堆栈顶部开始访问。
实例(x86汇编):
PUSH AX
或POP AX
解释:PUSH指令将AX寄存器的内容压入堆栈,而POP指令从堆栈顶部弹出内容并将其放入AX寄存器中。
第二章习题
1、选择题
1.(单选题,5.0分)下列对源码、补码和反码叙述正确的是:
A.当真值为正时,原码和补码的表示形式不同,但其符号位都用“0”表示。
B.三种机器数的最高位均为符号位。符号位和数值部分之间可用”"(对于小数)和”,”(对于整数)隔开。
C.全部正确。
D.当真值为负时,原码、补码和反码的表示形式均相同,即符号位用“1"表示,数值部分和真值部分相同
答案:B
A选项错的很明显当真值为正的时候原码和补码是一样的,D选项当真值为负数,原码和补码是相反加一。
2.(单选题,5.0分)已知X=0.a1a2a3a4a5a6(ai为0或1)则当X>1/2时ai应取何值?
A.a1=1,a2-a6任意
B.a1=1,a2-a6至少有一个为1
C.a1-a6至少有一个为1
D.a1-a6任意
答案:B
小数点后的二进制是1/2(n),所以只要第一位=1,后面的只要有一个一就可以大于1/2了
3.(单选题,5.0分)设x为真值,x*为绝对值,说明[-x*]补=[-x]补在什么时候成立
A.当x为负数时成立
B.任何时候都成立
C.任何时候都不成立
D.当x为正数时成立
答案:D
4.(单选题,5.0分)以下各类表示法中,无论表示正数还是负数,()的数值位永远都是其真值的绝对值。
A.原码
B.反码
C.补码
D.移码
答案:A
原码的数值位永远是真值,第一位是符号位
5.(单选题,5.0分) 以下各类表示法中,引入( )的概念是为了消除减法操作。
A.移码
B.原码
C.反码
D.补码
答案:D
引入了补码可以实现加法进行减法计算。
6.(单选题,5.0分)在计算机中,以下选项属于小数点的表示方法的是
A.无正确答案
B.定长表示
C.定点表示
D.变长表示
答案:C
7.(单选题,5.0分)当真值用补码表示时,由于符号位和数值部分一起编码,与习惯上的表示法不同,因此人们很难从补码的形式上直接判断其真值的大小,而采用移码编码时从代码本身就可以看出真值的实际大小。以下给出了四种整数编码的定义,其中是整数移码定义的为()
答案:D
8.(单选题,5.0分)下列数中最小的数为
A.(01010101)二
B.(21)十
C.(40)八
D.(1A)十六
答案:B
A:转化十进制1+4+16+64
B: 21
C:4*8=32
D:1*16+11=27
9.(多选题,5.0分) 设x为整数,x的真值为25,以下选项与x相等的有
A.补码二进制串为0.11001的数
B原码二进制串为1,11001的数
C反码二进制串为0,11001的数
D.原码二进制串为0,11001的数
答案:AD
10.(多选题,5.0分) 下列关于定点数和浮点数的叙述正确的是:
A.定点数在运算规则、运算速度及硬件成本方面优于浮点数。
B.当浮点机和定点机中数的位数相同时,浮点数的表示范围比定点数的范围大的多。
C.在溢出的判断方法上,浮点数是对规格化数的阶码进行判断,而定点数是对数值本身进行判断。
D.浮点数运算要分阶码部分和尾数部分,而且运算结果都要求规格化,故浮点运算步骤比定点运算步骤多,运算速度比定点运算的低,运算线路比定点运算的复杂。
答案:ACD
11.(多选题,5.0分)以下关于机器数和真值的说法正确的是
A.把带“+”或“”符号的数称为真值。
B.把符号"数字化"的数称为机器数
C.把带“+”或“”符号的数称为机器数
D.无正确答案
答案:AB
第3章:微体系结构层——CPU组织
3.1 CPU的组成和功能
1.CPU的组成
cpu主要由运算器和控制器两部分组成,如下图所示:
运算器由算术/逻辑运算部件ALU、累加器ACC、寄存器B、暂存器TMP1、TMP2和程序状态标志寄存器PSW组成。其中,ALU是核心部件,可实现算术运算和逻辑运算,并处理位变量。累加器ACC用于向ALU提供操作数和存放运算结果。寄存器B是专门为乘法和除法运算设置的寄存器。程序状态标志寄存器PSW用于保存ALU运算结果的特征和处理状态。
控制器由指令寄存器IR、指令译码器ID、定时及控制逻辑电路以及程序计数器PC等组成。程序计数器PC是一个16位的计数器,用于存放下一个要取指令的16位程序存储器存储单元的地址。指令寄存器IR保存当前正在执行的指令,指令内容包含操作码和地址码两部分。指令译码器ID对指令进行译码,并形成相应指令的微操作信号。定时与控制时微处理器的核心部件,其任务是控制取指令、执行指令、存取操作数或运算结果等操作,向其他部件发出各种微操作信号,协调各部件工作,完成指令的执行。
cpu的组成:控制器、算术逻辑部件、寄存器、cpu内部总线
2.CPU的功能
①指令控制:CPU按照指令计数器中的指令地址从内存储器中取出指令,并对指令进行译码,将指令中的操作码转换成相应的控制信号,再根据控制信号逐条完成操作码指定的任务。
②操作控制:CPU根据指令的操作码和操作数计算出相应的控制信号,并将这些信号送往相应的部件,控制这些部件完成指令的操作。
③时间控制:CPU通过定时器或时间计数器来控制指令的执行顺序和执行时间,确保指令按照规定的顺序和时间执行。
④数据加工:CPU对数据进行算术运算、逻辑运算等操作,并将结果存储回内存或寄存器中。这些操作可以帮助CPU处理各种数据,包括输入/输出数据、计算结果等。
⑤中断处理:CPU在执行指令的过程中,如果出现异常或需要处理其他事件(如输入/输出操作完成),则会产生中断信号,CPU会暂停当前任务的执行,保存现场信息,转去处理该中断事件,处理完毕后再恢复现场并继续执行。
3.2 算术逻辑部件ALU和运算方法
1.补码减法电路
首先我们需要知道的是,在计算机硬件中是不可以直接的实现减法运算的,所以在计算机中的减法都是通过补码的加法进行实现的。
首先我们要先复习一下加减法手算是怎么进行的。
X=12,Y=8,我们需要进行X-Y的计算,假设是八位二进制数。
【X】=00001100
【Y】=00001000
X-Y=【X】补+【Y取反+1】=【00001100】+【11110111+1】=【00000100】补= 4
补码的加减法电路首先通过sub信号控制加减法,如果是减法,就把传入的值按位取反并且来自低位的信号加一,加法就可以直接把值传入进行运算。
标志位:
- OF(溢出标志):当进行加法或减法运算时,如果结果的符号与操作数的符号不同,那么就发生了溢出。OF标志用于表示是否发生了溢出。例如,对于8位二进制补码表示,如果最高位(符号位)为0,那么最大的正数是+127;如果最高位为1,那么最大的负数是-127。如果进行加法或减法运算的结果超出了这些范围,那么就发生了溢出。
- SF(符号标志):SF标志用于表示结果的符号。如果SF=0,那么结果为正数;如果SF=1,那么结果为负数。
- ZF(零标志):ZF标志用于表示结果是否为0。如果ZF=1,那么结果为0;如果ZF=0,那么结果不为0。
- CF(进位标志):CF标志用于表示是否有进位或借位发生。在进行加法或减法运算时,如果最高位(符号位)有进位或借位,那么CF标志就被设置。
2.影响加法器运算速度的关键因素——进位传递延迟
影响加法器运算速度的关键因素之一是进位传递延迟。在加法运算中,低位向高位的进位需要一定的时间来传播,这个时间就是进位传递延迟。如果进位传递延迟过长,就会影响加法器的运算速度。因此,优化进位传递延迟是提高加法器性能的重要手段之一。
为了减小进位传递延迟,可以采用多种技术。其中一种常用的技术是预计算进位,即在每个加法操作之前,预先计算出所有可能的进位,并将它们存储在一个表格中。在进行加法操作时,直接从表格中取出相应的进位值,从而避免了在运算过程中进行进位计算和传递,大大提高了加法器的运算速度。
根据Ci=AiBi+(Ai⊕Bi)Ci-1(逻辑表达式),我们可以设Gi=AiBi,Pi=Ai⊕Bi,则可以得到Ci=Gi+PiCi-1,一直拆分就可以不用知道前一位的进位就可以知道Ci的值了就可以并行加法运算,但是这样子就会导致电子元件的增加
要是一直拆分就会越来越复杂
3.IEEE 754浮点格式
在IEEE 754标准中,浮点数被表示为符号位、指数部分和尾数部分三部分组成。根据不同的位数,有单精度、双精度、扩展单精度和扩展双精度四种格式。
对于单精度格式(32位),符号位占1位,指数部分占8位,尾数部分占23位。对于双精度格式(64位),符号位占1位,指数部分占11位,尾数部分占52位。在扩展的单精度和双精度格式中,指数部分和尾数部分的位数可以更多,分别满足不同的精度要求。
4.浮点数加减运算——对阶、尾数求和、规格化、判断溢出(掌握【例3-12】)(综合题)
首先我们需要知道的浮点数的计算过程:
- 对阶:让两个操作数阶数相同,以便进行加减。实现的方式是对较小数的尾数进行右移操作。对阶的原则是向高阶看齐。计算公式为:当结果大于0说明被加数(被减数)阶数高,则对加数(减数)进行移位对阶。小于0则反之改变被加数(被减数)。
- 尾数相加/相减:将两个操作数的尾数相加或相减。值得注意的是,在IEEE754标准中,对于规格化数来说在小数点前有一位隐藏位1,在加减过程中需要把它还原到尾数中。
- 规格化:如果结果不为规格化数,则需要通过左规或右规将其变为规格化数(尾数最高有效位的真值为1,或尾数符与最高有效位不等)。左规是将尾数左移,同时指数部分减1;右规则是将尾数右移,同时指数部分加1。
- 舍入处理:根据舍入规则对结果进行舍入处理。IEEE 754标准定义了四种舍入规则:向最接近的值舍入、向下舍入、向上舍入和向最接近的值舍入但不超过该值。
- 溢出判断与处理:判断结果是否溢出。如果溢出,则需要将结果表示为无穷大或NaN等特殊值。
- 结果的符号:根据操作数的符号确定结果的符号。正数的符号为0,负数的符号为1。
【例3-12】
有两个二进制浮点数X=0.110101B* , Y=-0.101011B* ,计算X+Y.(浮点的格式为阶码4位、尾数8位,采用双符号位补码表示)
则把他们转化位机器数如下所示:
计算过程如下所示:
① 对阶。求阶差AE=[Ex]+[-EY]=1110+0001=1111B,即▲E=-1,表明X 的阶码蚊小。按对阶规则,将Mx右移1 位,其阶码加1,得
[X]浮=11,11;00.011011B(用0舍1入法)
② 尾数求和。[Mx]+[My]=00.011011B+11.010101B=11.11000B。
③ 规格化及判溢出。结果尾数是非规格化的数(因为我们算出尾数的数值位的真值是010000B,最高有效位不是1),需左规。因此将结果尾数左移1位,阶码减1,得
[X+Y]浮 =11,10; 11.10000B由于阶码的表示范围为-4≤E≤3,而E(x+y)=10B=2,在范围内,因此结果不会溢出;或因阶码符号位为 11,表明无溢出。
④ 舍入。由于是左规,结果不需要舍入。
最后运算结果的真值 X+Y=(-0.100000B)×2(-010B)
3.3 指令流水线
在指令流水线中,每条指令的处理过程被分为多个阶段,例如取指、译码、执行和写回结果等。每个阶段对应一个电路单元,这些电路单元可以同时处理不同的指令。
指令流水线技术的应用可以提高CPU的运算速度,因为它允许多条指令同时进行操作,提高了各部件的利用率和指令的平均执行速度。此外,流水线技术还要求所有指令在每个部件上执行的时间是一样的,这样就可以实现多个任务的重叠执行,进一步提高工作效率。
1.影响指令流水线的因素
- 结构相关(资源冲突):由于多条指令在同一时刻争用同一资源而形成的冲突。解决办法包括后一相关指令暂停一周期和资源重复配置。
- 数据相关(数据冲突):在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
解决办法①包括把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。②数据旁路技术:也就是在操作完数据以后就把数据存入到寄存器中,这样就不需要等到写回阶段之后才可以拿到数据进行操作。
- 控制相关(控制冲突):当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
- 机器周期的设置:机器周期的设置也会影响指令流水线的性能。
⭐在指令流水线中把流水线操作分为取指、译码、执行和写回结果几个阶段,每个阶段都会执行一个时钟周期的时间,指令流水线操作的时钟周期确定应以各功能段的最长执行时间为准,否则用时较长的流水段的功能将不能正确完成,会导致数据缺失的情况发生。
2.流水线多发技术
流水线多发技术是指在一个时钟周期内,产生更多条指令的结果。常见的多发技术有超标量技术、超流水线技术和超长指令字技术。
超标量技术通过配置多个功能部件,在一个时钟周期内并发多条独立指令,并通过编译优化技术将可并行执行的指令配对起来。
超流水线技术将一个流水段进行细分,在一个时钟周期内将其分为三段,使一个功能部件在一个时钟周期内使用多次,从而提高流水线的速度。
超长指令字技术通过编译程序挖掘出指令间的潜在并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字,以提高指令执行效率。
3.4 组合逻辑控制器原理
1.组合逻辑控制器的基本原理
根据指令译码器产生的指令信息、时序系统产生的机器周期信号和节拍信号、来自执行单元的反馈信息即标志,按时间的顺序发送一系列微操作控制信号(前两者是组合逻辑控制器中微操作控制信号形成的主要因素)。(简答题)
组合逻辑控制器的基本原理是依据执行过程中的操作码、当前指令所处的执行步骤等输入信号,用组合逻辑门电路直接、快速地形成并送出指令当前执行步骤要求的控制信号。与微程序控制器不同,组合逻辑控制器中的控制信号是由组合逻辑的门电路实现的,而不是存储在控制存储器中。
在组合逻辑控制器中,微程序控制器中的控制存储器变成了时序控制信号形成部件,微程序控制器中的下地址形成部件变成了节拍发生器,而增加了指令译码器用于标识每一条不同的指令。组合逻辑控制器通过这些逻辑部件,在执行指令时生成一系列时序控制信号,控制指令的执行。
在指令执行过程中,组合逻辑控制器中的时序系统会提供周期、节拍和脉冲等时序信号,这些信号与各项操作相关,用于规定各项操作所需的时间段和时机。时序信号是计算机操作的时间标志,是计算机系统中各种操作的控制信号。
总的来说,组合逻辑控制器的基本原理是通过组合逻辑门电路和时序系统生成一系列控制信号,以控制指令的执行过程。这种控制器具有速度快、结构简单、修改方便等优点,但也有设计难度大、线路复杂的缺点。
3.5 微程序控制器原理
首先我们需要知道的三个概念:微指令、微程序、微操作
- 微指令(Microinstruction):微指令是机器指令转换为一系列微操作的控制信号,通常包含操作码和地址码字段。微指令具有非常具体和细致的操作控制功能,能够直接控制硬件实现各种基本的操作。
- 微程序(Microprogram):微程序是机器指令的转换序列,由一系列微指令组成。微程序通过将机器指令转换为一系列微指令来实现对机器指令的精确控制。微程序控制器通过存储器中的微程序表来执行微指令序列,从而实现对机器指令的执行。
- 微操作(Microoperation):微操作是计算机中最小执行单位,通常由一组控制信号来控制。在微程序控制器中,微操作是由微指令控制的,用于实现对数据通路的各种基本操作。
1.微程序控制的基本原理(简答题)
微程序控制的基本原理是将机器指令分解为基本的微命令序列,在制造CPU时固化在控制存储器CM中,执行一条机器指令时,CPU依次从CM中取出微指令产生微命令。一条微指令包含的微命令控制实现一步(一个节拍)操作,若干条微指令组成一小段微程序解释执行一条机器指令。执行过程如下:
-
根据计算机给出的第一条微指令的地址,从控制存储器中取出第一条微指令。
-
微指令由操作控制部分和顺序控制部分组成。操作控制部分产生微操作控制信号,控制执行部分完成规定的操作。顺序控制部分中的直接顺序控制部分放入微地址寄存器,顺序控制部分的P字段和执行部件反馈的状态条件信息决定修改微地址寄存器中的值。
-
按地址寄存器中的值从控制存储器中取出下一条微指令,继续第二步,如此循环,直到全部指令执行完毕。
2.水平型微指令与垂直型微指令的区别
水平型微指令的特点是能够定义并执行多个并行操作的微指令。这种类型的微指令通常采用直接编码、字段直接或间接编码以及混合编码的方式。在执行一条机器指令所需的微指令数目方面,水平型微指令比垂直型微指令少,因此执行速度更快。此外,水平型微指令的微程序结构相对较短,但需要较长的微指令结构来换取。
相比之下,垂直型微指令采用类似机器指令操作码的方式,在微指令字中设置微操作码字段,由微操作码规定微指令的功能。垂直型微指令的并行操作能力较差,通常只能实现一个微操作,控制1~2个信息传送通路,效率较低,执行一条机器指令所需的微指令数目多,执行时间长。然而,垂直型微指令与机器指令相似,因此容易掌握和利用,编程比较简单。
水平型微指令
垂直型微指令
3.微指令编码方式(直接编码法、分段直接编码法)
①直接编码法(不译法):微指令操作控制字段的每一位都直接表示一个微命令,该位为“1”,表示执行这个微命令。
这种方法的优点是结构简单,并行性强,无需译码,速度快。
缺点是微指令字长过长,n个微指令就要要求微指令的操作字段有n位,造成控存容量极大。
②分段直接编码法:将微指令的控制字段分成若干“段”,每段经译码后发出控制信号。这种方法的优点是可以缩短微指令字长。然而,需要通过译码电路后再发出微命令,因此比直接编码方式慢。
如上图,(PC)->MAR和1->R这两个微操作是可以并行的执行的,所以我们把这两个微操作放到不同的段里面,这两个微操作在段内会有与之相对应的编码,这个编码经过译码器的译码就会发出相应的控制信号,并且这两个的控制信号是并行的发出的。
(PC)->MAR和(PC)+1->PC这两个微操作是互斥的,可以放到同一个段。
第5章:汇编语言
1.指令语句、伪指令语句的语句格式
指令语句,也称为可执行语句,是用于指导计算机执行特定操作的语句。指令语句通常包括操作符和操作数,操作符指定要执行的操作,而操作数指定参与操作的数据或变量。指令语句在程序执行过程中被直接解释或编译成机器代码,并由计算机硬件执行。例如,在C语言中,赋值语句“a = b + c;”就是一个指令语句,它告诉计算机将变量b和c的值相加,并将结果存储在变量a中。
伪指令语句是用于指导编程器或汇编器生成特定代码的语句。它们不是直接指导计算机执行操作的语句,而是通过指导编译器或汇编器的行为来间接影响程序的执行。伪指令语句通常用于定义程序的结构、控制程序的流程、设置符号等。例如,在汇编语言中,伪指令“ORG 0x1000”用于指定程序代码的起始地址为0x1000。
指令语句、伪指令语句都有相同的语句格式,包括4个字段
名字 | 操作符 | 操作数 | ;注释 |
名字字段:用来标记字段的名字,并且一定是用冒号“:”作为名字字段的结束符。
操作符字段:指令语句中。操作符如MOV、ADD、SUB等,表示程序在运行时完成的功能。在伪指令语句中,数据定义指令DB、DW、DD,段定义伪指令SEGMENT,过程定义伪指令PROC。
操作数字段:本字段需要几个操作数,多个操作数之间要用,进行分隔。
注释字段:用“;”进行注释,学过c、c++高级语言的应该都知道的。
2.汇编语言程序结构
①数据段
数据段用于存储程序中静态和全局变量的数据。
它通常包含初始化的数据,这些数据在程序开始执行时就被加载到内存中。
数据段通常被设置为只读,以防止程序意外地修改这些数据。
②堆栈段
堆栈段用于存储局部变量、函数调用的返回地址以及程序中的临时数据。
堆栈是一个后进先出(LIFO)的数据结构,最后一个进入堆栈的元素将是第一个出来的。
堆栈的增长和缩小通常由汇编语言中的PUSH和POP指令控制。
③代码段
代码段用于存储程序的指令。
它包含程序开始执行时需要执行的机器代码。
代码段通常被设置为只读,以防止程序意外地修改其指令。
下面是一个最简单的x8086的汇编语言程序的实例:
;数据段
DATAS SEGMENT STRING DB 'Hello, World!',13,10,'$' ; 定义字符串常量,其中13代表回车,10代表换行(Line Feed),'$'代表字符串结束符 DATAS ENDS
;代码段 CODES SEGMENT ASSUME CS:CODES, DS:DATAS ; 假设代码段寄存器为CODES,数据段寄存器为DATAS START: MOV AX, DATAS ; 将DATAS段的地址赋值给AX寄存器 MOV DS, AX ; 将AX寄存器的值赋值给DS数据段寄存器,初始化数据段寄存器 LEA DX, STRING ; 将字符串STRING的偏移地址加载到DX寄存器中 MOV AH, 9 ; 将9赋值给AH寄存器,代表使用DOS中断21H的9号功能,用于在屏幕上显示字符串 INT 21H ; 调用DOS中断21H,执行相应的功能 MOV AH, 4CH ; 将4CH赋值给AH寄存器,代表使用DOS中断21H的4CH号功能,用于退出程序 INT 21H ; 调用DOS中断21H,执行退出程序的功能 CODES ENDS END START ; 汇编程序结束,从START标签开始执行
3.程序设计(分支、循环,掌握【例题5-10】)(综合题)
①顺序结构
顺序结构是最简单的程序结构,它按照指令的顺序逐条执行。在x86汇编语言中,顺序结构由一系列指令组成,按照它们在代码段中的顺序执行。没有条件或跳转指令中断程序的正常执行流程。
例如:
MOV AX, 10 ; 将10移入AX寄存器
ADD AX, 5 ; 将5加到AX寄存器上
在这个例子中,两条指令按照它们在代码中的顺序执行,首先是将10移入AX寄存器,然后是将5加到AX寄存器上。
常用指令
MOV:移动指令。用于将数据从一个位置复制到另一个位置。
例如:
MOV AX, [BX]
将内存地址为BX的内容复制到AX寄存器中。LEA:加载有效地址指令。用于将操作数的有效地址加载到寄存器中。
例如:
LEA BX, [AX]
将AX寄存器的值作为偏移量加载到BX寄存器中。ADD:加法指令。用于将两个操作数相加,并将结果存储在目标操作数中。
例如:
ADD AX, BX
将BX寄存器的值加到AX寄存器的值上,并将结果存储在AX中。SUB:减法指令。用于从第一个操作数中减去第二个操作数,并将结果存储在目标操作数中。
例如:
SUB AX, BX
从AX寄存器的值中减去BX寄存器的值,并将结果存储在AX中。TEST:测试指令。用于对操作数执行按位与运算,并根据结果设置标志位。
例如:
TEST AX, BX
将AX和BX执行按位与运算,并根据结果设置标志位。CMP:比较指令。用于比较两个操作数,并根据结果设置标志位。
例如:
CMP AX, BX
比较AX和BX的值,并根据结果设置标志位。DEC:递减指令。用于将操作数的值减1。
例如:DEC BX
将BX寄存器的值减1。INC:递增指令。用于将操作数的值加1。
例如:INC BX
将BX寄存器的值加1。AND:按位与指令。用于对操作数执行按位与运算,并将结果存储在目标操作数中。例如:
AND AX, BX
将AX和BX执行按位与运算,并将结果存储在AX中。- XOR:按位异或指令。用于对操作数执行按位异或运算,并将结果存储在目标操作数中。
例如:
XOR AX, BX
将AX和BX执行按位异或运算,并将结果存储在AX中。11.OR:按位或指令。用于对操作数执行按位或运算,并将结果存储在目标操作数中。
例如:
OR AX, BX
将AX和BX执行按位或运算,并将结果存储在AX中。12.SHL 和 SAL:左移指令。SHL将操作数的位向左移动指定的位数,SAL等价于SHL 1。
例如:
SHL BX, 2
将BX寄存器的值向左移动2位。13.SHR 和 SAR:右移指令。SHR执行算术右移(保持符号位),SAR执行逻辑右移(复制符号位)。
例如:
SHR BX, 2
将BX寄存器的值向右移动2位并保持符号位不变(算术右移)。
②分支结构
分支结构允许程序根据某个条件改变执行流程。在x86汇编语言中,分支结构通常使用跳转指令(如JMP)来实现。根据条件的不同,程序可以跳转到代码段中的不同位置。
例如:
CMP AX, 15 ; 比较AX寄存器和15
JE Label ; 如果AX等于15,则跳转到Label标签处
在这个例子中,CMP指令将AX寄存器的值与15进行比较,并根据比较结果设置标志位。JE指令检查零标志位(ZF),如果ZF被设置(即AX等于15),则程序跳转到Label标签处。
常用指令:
1.JMP:无条件跳转指令。用于将程序的执行流无条件地跳转到指定的地址处执行。
例如:
JMP [BX]
将程序的执行流跳转到内存地址为BX处执行。2.JC, JNC, JE/JZ, JS, JNS, JO, JNO, JP/JPE, JNP/JPO:条件跳转指令。根据特定的条件标志(如零标志、进位标志、符号标志等)进行有条件的跳转。这些指令分别表示“进位时跳转”、“非进位时跳转”、“相等/零时跳转”、“负数时跳转”、“正数时跳转”、“溢出时跳转”、“非溢出时跳转”、“奇偶校验时跳转”和“非奇偶校
③循环结构
循环结构允许程序重复执行一段代码,直到满足某个终止条件。在x86汇编语言中,循环结构通常使用LOOP指令实现。LOOP指令根据CX寄存器的值来控制循环的次数。
例如:
MOV CX, 10 ; 将10移入CX寄存器
LOOPE Label ; 如果CX不为0且ZF被设置(即CX大于0且上次循环的ZF被清除),则跳转到Label标签处
在这个例子中,MOV指令将10移入CX寄存器,作为循环的次数。LOOPE指令检查CX的值和零标志位(ZF)。如果CX不为0且ZF被设置(即CX大于0且上次循环的ZF被清除),则程序跳转到Label标签处,并继续执行循环体中的代码。当CX变为0时,循环结束。
DATA SEGMENT // 定义一个数据段
NUM DB ? // 定义一个字节大小的变量NUM,?表示其值尚未确定
DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24,-8 // 定义一个字节数组DA1,其包含了11个元素
COUNT EQU $ - DA1 // 定义COUNT为DA1的长度($代表当前位置,因此$ - DA1就是DA1的长度)
DATA ENDS // 数据段结束 STAK1 SEGMENT PARA STACK // 定义一个堆栈段 DW 20H DUP(0) // 分配20H(32字节)的空间,并初始化为0
STAK1 ENDS // 堆栈段结束 CODE SEGMENT // 定义一个代码段 ASSUME CS:CODE,DS:DATA,SS:STAK1 // 设定段寄存器:CS指向CODE,DS指向DATA,SS指向STAK1 BEING: MOV AX,DATA // 将DATA段的地址加载到AX寄存器中 MOV DS,AX // 将AX的值加载到DS寄存器中,DS是数据段寄存器 MOV SI, OFFSET DA1 // 将DA1的偏移地址加载到SI寄存器中,SI是源索引寄存器 XOR BL, BL // BL寄存器清零,BL将用于计算负数的数量
EXCHANG: MOV AL,[SI] // 将SI指向的内存地址的值加载到AL寄存器中 XOR AL,[SI+1] // 将AL中的值与SI+1指向的内存地址的值进行异或操作 TEST AL,80H // 测试AL寄存器的最高位是否为1,如果是则说明AL中的数是负数 JE NEXT // 如果最高位不是1(即JE判断为相等),则跳转到NEXT标签处执行 INC BL // 如果AL是负数,BL加1
NEXT: INC SI // SI加1,指向下一个元素 LOOP EXCHANG // 循环执行EXCHANG标签处的代码,直到遍历完所有元素 MOV NUM, BL // 将BL的值(负数的个数)存储到NUM变量中 MOV AH, 4CH // 将4CH加载到AH寄存器中,4CH是DOS系统中结束程序的调用代码 INT 21H // 通过软中断21H调用DOS系统服务,结束程序运行 CODE ENDS // 代码段结束 END BEING // 程序结束,返回到BEGIN标签处
第6章:存储系统
博主正在努力整理中请稍等~~~~
1.存储器的主要功能、层次结构
存储器的功能:存储器的主要功能是存储数据和指令,并在需要时提供快速访问。存储器层次结构是为了满足计算机系统对速度、容量和价格的需求而发展起来的。
存储器的层次结构:
- CPU寄存器:这是存储器层次结构的最内层,直接与CPU相连,访问速度最快,但容量非常有限。CPU寄存器用于保存CPU当前执行的指令和数据。
- 高速缓存(Cache):高速缓存是位于CPU和主存储器之间的一层存储器,用于解决CPU和主存储器之间速度不匹配的问题。高速缓存利用局部性原理,将CPU频繁访问的数据和指令缓存到离CPU更近的位置,以减少访问主存储器的次数,从而提高系统的性能。
- 主存储器(Main Memory):主存储器是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据。CPU的控制部件只能从主存储器中取得指令和数据。数据能够从主存储器中读取并装入到寄存器中,或者从寄存器存入到主存储器。CPU与外围设备交换的信息一般也依托于主存储器地址空间。
- 磁盘存储:磁盘存储是一种辅助存储器,用于长期保存大量数据。磁盘存储器的容量比主存储器大得多,但访问速度较慢。
- 固定磁盘和可移动存储介质:固定磁盘是一种永久性的存储介质,而可移动存储介质则可以随时取出或更换。它们主要用于数据的长期保存和备份。
存储器按照存取方式分类:
- 随机存储器(Random Access Memory,RAM):任何存储单元的内容都能被随机存取,且存取时间和存储单元的物理位置无关。RAM是计算机系统中的主要存储器,用于存储程序和数据,并且允许对其进行读写操作。
- 顺序存储器(Sequential Access Memory,SAM):只能按某种顺序来存取,存取时间和存储单元的物理位置有关。SAM通常用于存储大量的数据,如磁带或线性磁带文件。
- 直接存取存储器(Direct Access Storage,DAM):既有随机存取特性,也有顺序存取特性。DAM先直接选取信息所在区域,然后按顺序方式进行存取。这种存储器通常用于大型数据库和文件系统。
- 只读存储器(ROM)是一种只能读取数据而不能写入数据的存储器。数据一旦写入ROM后,就无法更改,除非重新写入新的数据。ROM的特点是存储的数据稳定,断电后数据不会丢失,并且结构较简单,使用方便。因此,ROM常用于存储程序和数据,如BIOS、固件等。
2.存储器容量扩展(地址分配)(综合题)
①位扩展:位扩展相当于将两个存储芯片用相同的地址线接入,这意味着数地址线的数目只和芯片的存储单元有关,芯片每一次读写的数据字长又和数据线的数目有关。当CPU访问存储单元时候,每一个芯片的同样位置上的存储单元被选中,并分别输出四位数据到不同的数据线上。这种方式可以扩大存储器的位数,但存储单元的数目不变,每个单元的位数增加。
②字扩展:字扩展是通过增加存储字的数量来实现存储器容量的扩展。例如,使用1K4的存储芯片,可以通过字扩展成为1K8的存储芯片。这种方式可以增加存储字的数量,但每个存储单元的位数不变。
③字位扩展:字位扩展是同时进行字扩展和位扩展的存储器容量扩展方式。通过先进行位扩展,满足位要求的芯片再使用字扩展,对芯片进行扩展。例如,使用1K4位的芯片可以扩充成为4K8位的芯片。这种方式可以同时增加存储器的位数和字的数量。
3.DRAM刷新方式
DRAM和SRAM的区别:
因为DRAM是采用的电容的方式存储的信息所以在一段时间内我们就必须要对DRAM寄存器进行刷新,不然会有寄存器的数据丢失。
DRAM刷新也就是读取出一行的数据,然后再写回去,所以一次刷新操作占用一个读写周期。
DRAM的刷新方式分类:
- 集中刷新:在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新。这种方式在刷新过程中需要停止读/写操作,存在“死区”。以一个128×128的矩阵存储芯片为例,存储周期为0.5μs,刷新周期为2ms。一个刷新周期内需要刷新128行,每行刷新的时间为0.5μs,所以全部刷新的时间为128×0.5μs=64μs。在刷新周期内,不能进行读写操作,因此这段时间被称为“死区”,死区的时间占比为128÷4000×100%=3.2%。
- 分散刷新:将每行存储单元的刷新分散到每个存储周期内完成,即将刷新时间分散到每个读写周期中。这种方式可以避免“死区”,但会延长存取周期,降低整个系统的速度。
- 异步刷新:结合了集中刷新和分散刷新的特点,将刷新分散到多个读/写周期中完成,充分利用了最大刷新间隔为2ms的特点,既缩短了“死区”,又充分利用了整个系统的性能。
4.程序访问的局部性原理
程序访问的局部性原理,也称为局部引用原理,是指程序在执行过程中,对数据的访问往往呈现出某种局部性特征,即在一个较短的时间间隔内,程序将频繁地访问存储器中的某个局部区域的数据,而不是访问整个存储器中的数据。这种局部性特征主要表现在以下几个方面:
- 时间局部性:如果一个数据被访问,那么在不久的将来,这个数据可能会再次被访问。这是因为程序中存在大量的循环和递归等重复操作的代码。
- 空间局部性:如果一个数据被访问,那么与这个数据相邻的数据也可能会被访问。这是因为程序中很多操作都是对数组、结构体等连续存储的数据进行操作。
利用程序访问的局部性原理,可以采取一些优化措施来提高程序的执行效率,例如:
- 缓存技术:将频繁访问的数据缓存在高速缓存中,以减少对主存的访问次数。
- 预取技术:在程序执行过程中,提前将即将被访问的数据从主存中读入到高速缓存中。
- 块交换技术:将一组连续的数据作为一个块进行交换,以减少访问不同块数据时的开销。
- 分页和分段技术:将主存划分为多个页面或段,每个页面或段的大小与高速缓存的大小相匹配,以充分利用高速缓存的空间。
也就是为什么会有虚拟内存的引入,就是要把大的程序分开的放入内存中,因为内存是不够使用的如果是很大的程序的话。
5.Cache的地址映射方式
全相联映射:主存块可以放在 Cache 的任意位置。
直接映射:每个主存块只能放到一个特定的位置:
Cache块号 = 主存块号 % Cache总块数
组相联映射:Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置: 组号 = 主存块号 % 分组数
(一)、全相联映射(随意放)
CPU 访问主存地址 1…1101001110:
①主存地址的前22位,对比Cache中所有块的标记;
②若标记匹配且有效位=1,则Cache命中,访问块内地址为 001110 的单元。
③若未命中或有效位 = 0,则正常访问主存。
(二)、直接映射(只能放固定位置)
直接映射,主存块在Cache中的位置 = 主存块号 % Cache总块数。
若 Cache总块数 =2^n则主存块号末尾n位直接反映它在Cache 中的位置。将主存块号的其余位作为标记即可。
此时主存地址为:
CPU 访问主存地址 0…01000 001110 :
①根据主存块号的后 3位确定Cache行 。
②若主存块号的前 19 位与Cache标记匹配且有效位=1,则Cache命中,访问块内地址为 001110 的单元。
③若未命中或有效位=0,则正常访问主存。
(三)、组相联映射(可放到特定分组)
n 路组相联映射 —— n块为一组
eg:2路组相联映射——2块为一组
组相联映射,所属分组 = 主存块号 %分组数
CPU 访问主存地址1…1101001110 :
①根据主存块号的后 2位确定所属分组号。
②若主存块号的前20位与分组内的某个标记匹配且有位=1, 则Cache命中,访问块内地址为 001110的单元。
③若未命中或有效位=0,则正常访问主存。
第7章:输入/输出系统
1.程序中断方式与DMA方式的主要区别(简答题)
虽然中断驱动方式解决了程序直接控制方式的问题,但是每一次只能读/写一个字,导致CPU频繁切换,耗费了很多时间。于是人们又发明了直接存储器访问方式,其基本思想是在外设和主存之间开辟直接的数据交换通路。
DMA方式的特点是:数据传送的基本单位是数据块;所传送的数据是从设备送内存,或者相反;不需要经过cpu的中转了,仅在传送一个或多个数据块的开始和结束时,才需中断CPU,请求干预,整块数据的传送是在DMA控制器控制下完成的。
最大区别:
1.DMA方式是一次传递一个数据块,而程序中断驱动一次是传输一个字,两者的数据传送的单位不同。
2.DMA方式是不需要cpu的中转,直接在磁盘和主存中建立通道,只需要在完成和开始的时候告诉CPU就可以了,减少了中断处理,cpu不需要频繁切换效率高。
2.I/O设备的编址方式
独立编址是指为每个I/O设备分配一个独立的地址空间。在这种方式下,每个I/O设备都有自己的一组地址码,通过这些地址码来访问I/O设备。这种方式的特点是简单易行,对于小型系统来说比较适用。但随着系统规模的不断扩大,I/O设备数量的不断增加,独立编址方式会导致地址码资源浪费,管理维护也比较困难。
统一编址则是指将所有的I/O设备统一编址,形成一个共同的地址空间。在这个地址空间中,每个I/O设备都被看作是内存单元的一部分,具有自己的地址和数据线。这种方式的特点是简单方便,易于管理维护,而且可以充分利用地址码资源。但统一编址方式需要专门的硬件支持,实现起来比较复杂,且可能会与内存发生地址冲突。
3.DMA方式
DMA方式的优点:
- 速度快:由于DMA方式实现了硬件设备和主存之间的直接数据传输,因此传输速度非常快,可以大大提高系统的效率。
- 减轻CPU负担:在DMA方式下,硬件设备自主地进行数据传输,不需要CPU的干预,这使得CPU可以腾出更多的时间处理其他任务,提高了系统的处理能力。
- 实现并行处理:多个硬件设备可以同时使用DMA方式进行数据传输,从而实现并行处理,进一步提高系统的性能。
DMA方式的缺点:
- 成本高:实现DMA方式需要增加相应的硬件设备和控制逻辑,这会增加系统的成本。
- 设计复杂度高:由于DMA方式涉及到硬件设备和主存的直接交互,因此需要精心设计相关的控制逻辑和数据传输协议,增加了设计的复杂度。
- 可能产生冲突:如果多个硬件设备同时使用DMA方式进行数据传输,可能会产生数据冲突或数据错误的情况。因此,需要设计合理的冲突避免机制或仲裁机制来确保数据传输的正确性。
DMA传送方式主要有以下几种:
- 周期挪用:这种方式下,当CPU访问主存时,DMA控制器挪用或占用一部分主存总线的时间,从而实现数据传输。
- 停止CPU访存:在这种方式下,当进行DMA传送时,CPU停止访问主存,从而让出总线给DMA控制器使用。
- 分时共享:这种方式下,CPU和DMA控制器交替地控制总线,从而实现数据传输。这种方式不需要停止CPU的访存操作,但可能会影响CPU的效率。