2009 年
讲解视频推荐:【BOK408真题讲解-2009年(催更就退网版)】
1. I/O 方式(8’)
某计算机的 CPU 主频为 500MHz ,CPI 为 5(即执行每条指令平均需 5 个时钟周期)。假定某外设的数据传输率为 0.5MB/s ,采用中断方式与主机进行数据传送, 以 32 位为传输单位,对应的中断服务程序包含 18 条指令, 中断服务的其他开销相当于 2 条指令的执行时间。
请回答下列问题, 要求给出计算过程。
(1)在中断方式下,CPU 用于该外设 I/O 的时间占整个 CPU 时间的百分比是多少?
(2)当该外设的数据传输率达到 5MB/s 时,改用 DMA 方式传送数据。假定每次 DMA 传送块大小为 5000B ,且 DMA 预处理和后处理的总开销为 500 个时钟周期,则 CPU 用于该外设 I/O 的时间占整个 CPU 时间的百分比是多少(假设 DMA 与 CPU 之间没有访存冲突)?
【解析】:
2. 数据通路的功能和基本结构(13’)
某计算机字长 16 位,采用 16 位定长指令字结构, 部分数据通路结构如下图所示,图中所有控制信号为 1 时表示有效、为 0 时表示无效, 例如控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR ,MDRin 为 1 表示允许数据从内总线打入 MDR 。假设 MAR 的输出一直处于使能状态。加法指令 “ADD(R1), R0” 的功能为 (R0) + ((R1)) → (R1) ,即将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存。
下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。
时钟 | 功能 | 有效控制信号 |
---|---|---|
C1 | MAR ← (PC) | PCout 、MARin |
C2 | MDR ← M(MAR) 、PC ← (PC) + 1 | MemR 、MDRinE 、PC + 1 |
C3 | IR ← (MDR) | MDRout 、IRin |
C4 | 指令译码 | 无 |
【解析】:
题干己给出取值和译码阶段每个节拍的功能和有效控制信号 , 我们应以弄清楚取指阶段中数据通路的信息流动作为突破口,读懂每个节拍的功能和有效控制信号。 然后应用到解题思路中, 包括划分执行步骤、 确定完成的功能、 需要的控制信号。
先分析题干中提供的示例(本部分解题时不做要求):
于是得到参考答案如下:
2010 年
讲解视频推荐:【BOK408真题讲解-2010年】
1. 指令的寻址方式(11’)
某计算机字长为 16 位,主存地址空间大小为 128KB ,按字编址。采用单字长指令格 式,指令各字段定义如下。
OP | Ms(源操作数) | Rs | Md(目的操作数) | Rd |
---|---|---|---|---|
15 → 12 | 11 → | → 6 | 5 → | → 0 |
转移指令采用相对寻址方式,相对偏移量用补码表示。寻址方式定义见下表。
Ms / Md | 寻址方式 | 助记符 | 含义 |
---|---|---|---|
000B | 寄存器直接 | Rn | 操作数= (Rn) |
001B | 寄存器间接 | (Rn) | 操作数 = ((Rn)) |
010B | 寄存器间接、自增 | (Rn)+ | 操作数 = ((Rn)) , (Rn) +1 → Rn |
011B | 相对 | D(Rn) | 转移目标地址 = (PC) + (Rn) |
注:(x) 表示存储器地址 x 或寄存器 x 的内容。
请回答下列问题:
(1)该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?存储器地址寄存器(MAR)和存储器数据寄存器(MDR)至少各需要多少位?
(2)转移指令的目标地址范围是多少?
(3)若操作码 0010B 表示加法操作(助记符为 add),寄存器 R4 和 R5 的编号分别为 100B 和 101B ,R4 的内容为 1234H ,RS 的内容为 5678H ,地址 1234H 中的内容为 5678H ,地址 5678H 中的内容为 1234H ,则汇编语言 “add(R4) , (RS)+”(逗号前为源操作数,逗号后为目的操作数)对应的机器码是什么(用十六进制表示) ?该指令执行后,哪些寄存器和存储单元中的内容会改变?改变后的内容是什么?
【解析】:
2. 高速缓冲存储器(12’)
某计算机的主存地址空间大小为 256MB ,按字节编址。指令 Cache 和数据 Cache 分离,均有 8 个 Cache 行,每个 Cache 行大小为 64B ,数据 Cache 采用直接映射方式。现有两个功能相同的程序 A 和 B ,其伪代码如下所示:
假定 int 类型数据用 32 位补码表示, 程序编译时 i 、j 、sum 均分配在寄存器中,数组 a 按行优先方式存放,其首地址为 320(十进制数) 。回答下列问题,要求说明理由或给出计算过程。
(1)若不考虑用于 Cache 一致性维护和替换算法的控制位,则数据 Cache 的总容噩为多少?
(2)数组元素 a[0][31] 和 a[1][1] 各自所在的主存块对应的 Cache 行号分别是多少(Cache 行号从 0 开始)?
(3)程序 A 和 B 的数据访问命中率各是多少?哪个程序的执行时间更短?
【解析】:
2011 年
讲解视频推荐:【BOK408真题讲解-2011年】
1. 运算方法和运算电路(11’)
假定在一个 8 位字长的计算机中运行如下类 C 程序段:
unsigned int x = 134;
unsigned int y = 246;
int m = x;
int n = y;
unsigned int z1 = x - y;
unsigned int z2 = x + y;
int k1 = m - n;
int k2 = m + n;
若编译器编译时将 8 个 8 位寄存器 R1 ~ R8 分别分配给变量 x 、y 、m 、n 、z1 、z2 、k1 和 k2 。
请回答下列问题。(提示:带符号整数用补码表示)
(1)执行上述程序段后, 寄存器 R1 、R5 和 R6 的内容分别是什么?(用十六进制表示)
(2)执行上述程序段后,变量 m 和 k1 的值分别是多少?(用十进制表示)
(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。
(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
【解析】:
2. 虚拟存储器(12’)
某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB ,主存(物理)地址空间大小为 1MB ,页面大小为 4KB ;Cache 采用直接映射方式,共 8 行; 主存与 Cache之间交换的块大小为 32B 。系统运行到某一时刻时,页表的部分内容和 Cache 的部分内容分别如下表 (a) 、下表 (b) 所示,图中页框号及标记字段的内容为十六进制形式。
表 (a) :页表的部分内容
虚页号 | 有效位 | 页框号 | …… |
---|---|---|---|
0 | 1 | 06 | …… |
1 | 1 | 04 | …… |
2 | 1 | 15 | …… |
3 | 1 | 02 | …… |
4 | 0 | —— | …… |
5 | 1 | 2B | …… |
6 | 0 | —— | …… |
7 | 1 | 32 | …… |
表 (b) :Cache 的部分内容
行号 | 有效位 | 标记 | …… |
---|---|---|---|
0 | 1 | 020 | …… |
1 | 0 | —— | …… |
2 | 1 | 01D | …… |
3 | 1 | 105 | …… |
4 | 1 | 064 | …… |
5 | 1 | 14D | …… |
6 | 0 | —— | …… |
7 | 1 | 27A | …… |
请回答下列问题。
(1)虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位, 哪几位表示页框号(物理页号)?
(2)使用物理地址访问 Cache 时, 物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址 001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。
(4)假定为该机配置一个 4 路组相联的 TLB ,该 TLB 共可存放 8 个页表项, 若其当前内容(十六进制)如下表 © 所示, 则此时虚拟地址 024BACH 所在的页面是否在主存中?要求说明理由。
【解析】:
2012 年
讲解视频推荐:【BOK408真题讲解-2012年】
1. I/O 方式(11’)
假定某计算机的 CPU 主频为 80MHz ,CPI 为 4 ,并且平均每条指令访存 1.5 次,主存与 Cache 之间交换的块大小为 16B ,Cache 的命中率为 99% , 存储器总线宽度为 32 位。请回答下列问题。
(1)该计算机的 MIPS 数是多少?平均每秒 Cache 缺失的次数是多少?在不考虑 DMA 传送的情况下, 主存带宽至少达到多少才能满足 CPU 的访存要求?
(2)假定在 Cache 缺失的情况下访问主存时,存在 0.0005% 的缺页率,则 CPU 平均每秒产生多少次缺页异常?若页面大小为 4KB ,每次缺页都需要访问磁盘, 访问磁盘时 DMA 传送采用周期挪用方式, 磁盘 I/O 接口的数据缓冲寄存器为 32 位, 则磁盘 I/O 接口平均每秒发出的 DMA 请求次数至少是多少?
(3)CPU 和 DMA 控制器同时要求使用存储器总线时,哪个优先级更高?为什么?
(4)为了提高性能, 主存采用 4 体交叉存储模式, 工作时每 1/4 个存储周期启动一个体。若每个体的存储周期为 50ns ,则该主存能提供的最大带宽是多少?
【解析】:
2. 指令流水线(12’)
某 16 位计算机中, 带符号整数用补码表示,数据 Cache 和指令 Cache 分离。下表给出了指令系统中部分指令格式,其中 Rs 和 Rd 表示寄存器,mem 表示存储单元地址,(x) 表示寄存器 x 或存储单元 x 的内容。
该计算机采用 5 段流水方式执行指令, 各流水段分别是取指 (IF) 、译码/读寄存器 (ID) 、执行/计算有效地址 (EX) 、访问存储器 (M) 和结果写回寄存器 (WB) , 流水线采用 “按序发射, 按序完成” 方式,没有采用转发技术处理数据相关, 并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题。
(1)若 int 型变量 x 的值为 -513 ,存放在寄存器 R1 中,则执行指令 “SHR R1” 后, R1 的内容是多少?(用十六进制表示)
(2)若某个时间段中,有连续的 4 条指令进入流水线, 在其执行过程中没有发生任何阻塞,则执行这 4 条指令所需的时钟周期数为多少?
(3)若高级语言程序中某赋值语句为 x = a + b ,x 、a 和 b 均为 int 型变量,它们的存储单元地址分别表示为 [x] 、[a] 和 [b] 。该语句对应的指令序列及其在指令流水线中的执行过程下图所示。
则这 4 条指令执行过程中,I3 的 ID 段和 l4 的 IF 段被阻塞的原因各是什么?
(4)若高级语言程序中某赋值语句为 x = 2 * x + a ,x 和 a 均为 unsigned int 类型变量,它们的存储单元地址分别表示为 [x] 、[a] ,则执行这条语句至少需要多少个时钟周期?要求模仿上图画出这条语句对应的指令序列及其在流水线中的执行过程示意图。
【解析】:
2013 年
讲解视频推荐:【BOK408真题讲解-2013年】
1. 高速缓冲存储器(9’)
某 32 位计算机,CPU 主频为 800MHz ,Cache 命中时的 CPI 为 4 ,Cache 块大小为 32 字节;主存采用 8 体交叉存储方式, 每个体的存储字长为 32 位、存储周期为 40ns ;存储器总线宽度为 32 位,总线时钟频率为 200MHz ,支待突发传送总线事务。每次读突发传送总线事务的过程包括: 送首地址和命令、存储器准备数据、传送数据。每次突发传送 32 字节, 传送地址或 32 位数据均需要一个总线时钟周期。请回答下列问题,要求给出理由或计算过程。
(1)CPU 和总线的时钟周期各为多少?总线的带宽(即最大数据传输率)为多少?
(2)Cache 缺失时, 需要用几个读突发传送总线事务来完成一个主存块的读取?
(3)存储器总线完成一次读突发传送总线事务所需的时间是多少?
(4)若程序 BP 执行过程中,共执行了 100 条指令,平均每条指令需进行 1.2 次访存,Cache 缺失率为 5% ,不考虑替换等开销,则 BP 的 CPU 执行时间是多少?
【解析】:
(1)CPU 的时钟周期是主频的倒数,即 1 / 800MHz = 1.25ns 。
总线的时钟周期是总线频率的倒数,即 1 / 200MHz = 5ns 。
总线宽度为 32 位,故总线带宽为 4B × 200MHz = 800MB/s 或 4B / 5ns = 800MB/s 。
(2)Cache 块大小是 32B ,因此 Cache缺失时需要一个读突发传送总线事务读取一个主存块。
(3)一次读突发传送总线事务包括一次地址传送和 32B 数据传送: 用 1 个总线时钟周期传输地址;每隔 40ns / 8 = 5ns 启动一个体工作(各进行 1 次存取),第一个体读数据花费 40ns ,之后数据存取与数据传输重叠;用 8 个总线时钟周期传输数据。读突发传送总线事务时间:5ns + 40ns + 8 × 5ns = 85ns 。
(4)BP 的 CPU 执行时间包括 Cache 命中时的指令执行时间和 Cache 缺失时带来的额外开销。命中时的指令执行时间:100 × 4 × 1.25ns = 500ns 。 指令执行过程中 Cache 缺失时的额外开销:1.2 × 100 × 5% × 85ns = 510ns 。BP 的 CPU 执行时间: 500ns + 510ns = 1010ns 。
2. 指令的寻址方式(14’)
某计算机采用 16 位定长指令字格式, 其 CPU 中有一个标志寄存器, 其中包含进位/借位标志 CF 、零标志 ZF 和符号标志 NF 。假定为该机设计了条件转移指令,其格式如下:
00000 | C | Z | N | OFFSET |
---|---|---|---|---|
15 → 11 | 10 | 9 | 8 | 7 → 0 |
其中,00000 为操作码 OP ;C 、Z 和 N 分别为 CF 、ZF 和 NF 的对应检测位,某检测位为 1 时表示需检测对应标志位, 需检测的标志位中只要有一个为 1 就转移, 否则不转移。例如, 若 C = 1 , Z = 0 , N = 1 ,则需检测 CF 和 NF 的值,当 CF = 1 或 NF = 1 时发生转移; OFFSET 是相对偏移量,用补码表示。转移执行时,转移目标地址为 (PC) + 2 + 2 × OFFSET ;顺序执行时,下条指令地址为:(PC) + 2 。请回答下列问题。
(1)该计算机存储器按字节编址还是按字编址? 该条件转移指令向后(反向)最多可跳转多少条指令?
(2)某条件转移指令的地址为 200CH ,指令内容如下图所示,若该指令执行时 CF = 0 , ZF = 0 , NF = 1 , 则该指令执行后 PC 的值是多少?若该指令执行时 CF = 1 , ZF = O , NF = 0 , 则该指令执行后 PC 的值又是多少?请给出计算过程。
00000 | 0 | 1 | 1 | 11100011 |
---|---|---|---|---|
15 → 11 | 10 | 9 | 8 | 7 → 0 |
(3)实现 “无符号数比较小于等于时转移” 功能的指令中,C 、Z 和 N 应各是什么?
(4)以下是该指令对应的数据通路示意图, 要求给出图中部件 ①~③ 的名称或功能说明。
【解析】:
2014 年
讲解视频推荐:【BOK408真题讲解-2014年】
1. 指令流水线(12’)
某程序中有如下循环代码段 P:“for(int i = 0; i < N; i++){sum += A [i];}” 。假设编译时变量 sum 和 i 分别分配在寄存器 R1 和 R2 中。常量 N 在寄存器 R6 中,数组 A 的首地址在寄存器 R3 中。程序段 P 起始地址为 0804 8100H ,对应的汇编代码和机器代码如下表所示。
执行上述代码的计算机 M 采用 32 位定长指令字,其中分支指令 bne 采用如下格式:
OP | Rs | Rd | OFFSET |
---|---|---|---|
31 → 26 | 25 → 21 | 20 → 16 | 15 → 0 |
OP 为操作码;Rs 和 Rd 为寄存器编号;OFFSET 为偏移量,用补码表示。请回答下列问题,并说明理由。
(1)M 的存储器编址单位是什么?
(2)已知 sll 指令实现左移功能,数组 A 中每个元素占多少位?
(3)表中 bne 指令的 OFFSET 字段的值是多少?已知 bne 指令采用相对寻址方式,当前 PC 内容为 bne 指令地址,通过分析表中指令地址和 bne 指令内容,推断出 bne 指令的转移目标地址计算公式。
(4)若 M 采用如下 “按序发射、按序完成” 的 5 级指令流水线:IF(取值)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起 3 个时钟周期的阻塞,则 P 中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令 1 的执行不会因为与指令 5 的数据相关而发生阻塞?
【解析】:
2. 虚拟存储器(11’)
假设对于题 44 中的计算机 M 和程序 P 的机器代码,M 采用页式虚拟存储管理;P 开始执行时,(Rl) = (R2) = 0 ,(R6) = 1000 ,其机器代码已调入主存但不在 Cache 中; 数组 A 未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。回答下列问题并说明理由。
(1)p 执行结束时,R2 的内容是多少?
(2)M 的指令 Cache 和数据 Cache 分离。若指令 Cache 共有 16 行,Cache 和主存交换的块大小为 32 字节,则其数据区的容量是多少?若仅考虑程序段 P 的执行,则指令 Cache 的命中率为多少?
(3)p 在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组 A 的访问, 需要读磁盘和 TLB 至少各多少次?
【解析】:
2015 年
讲解视频推荐:【BOK408真题讲解-2015年】
1. 数据通路的功能和基本结构(13’)
某 16 位计算机的主存按字节编码,存取单位为 16 位;采用 16 位定长指令字格式;CPU 采用单总线结构,主要部分如下图所示。图中 R0 ~ R3 为通用寄存器;T 为暂存器;SR 为移位寄存器, 可实现直送(mov)、左移一位(left)和右移一位(right)3 种操作,控制信号为 SRop ,SR 的输出由信号 SRout 控制;ALU 可实现直送 A(mova)、A 加 B(add)、A 减 B(sub)、A 与 B(and)、A 或 B(or)、非 A(not)和 A 加 1(inc)7 种操作, 控制信号为 ALUop 。
请回答下列问题。
(1)图中哪些寄存器是程序员可见的?为何要设置暂存器 T ?
(2)控制信号 ALUop 和 SRop 的位数至少各是多少?
(3)控制信号 SRout 所控制部件的名称或作用是什么?
(4)端点 ①~⑨ 中,哪些端点须连接到控制部件的输出端?
(5)为完善单总线数据通路,需要在端点 ①~⑨ 中相应的端点之间添加必要的连线。写出连线的起点和终点,以正确表示数据的流动方向。
(6)为什么二路选择器 MUX 的一个输入端是 2 ?
【解析】:
2. 指令的寻址方式(10’)
上题中描述的计算机,其部分指令执行过程的控制信号如题 44 图 a 所示。
该机指令格式如题 44 图 b 所示,支持寄存器直接和寄存器间接两种寻址方式,寻址方式位分别为 0 和 1 ,通用寄存器 R0 ~ R3 的编号分别为 0, 1, 2 和 3 。
请回答下列问题。
(1)该机的指令系统最多可定义多少条指令?
(2)若 inc 、shl 和 sub 指令的操作码分别为 01H 、02H 和 03H ,则以下指令对应的机器代码各是什么?
inc R1; //(R1) + 1 → R1
shl R2, R1; //(R1) << 1 → R2
sub R3, (R1), R2; //((R1)) - (R2) → R3
(3)假设寄存器 X 的输入和输出控制信号分别为 Xin 和 Xout ,其值为 1 表示有效,为 0 表示无效(如 PCout = 1 表示 PC 内容送总线);存储器控制信号为 MEMop,用于控制存储器的读(read)和写(write)操作。写出题图 a 中标号 ① ~ ⑧ 处的控制信号或控制信号的取值。
(4)指令 “sub R1, R3, (R2)” 和 “inc R1” 的执行阶段至少各需要多少个时钟周期?
【解析】:
2016 年
讲解视频推荐:【BOK408真题讲解-2016年】
1. I/O 方式(9’)
假定 CPU 主频为 50MHz ,CPI 为 4 。设备 D 采用异步串行通信方式向主机传送 7 位 ASCII 字符, 通信规程中有 1 位奇校验位和 1 位停止位, 从 D 接收启动命令到字符送入 I/O 端口需要 0.5ms 。请回答下列问题,要求说明理由。
(1)每传送一个字符,在异步串行通信线上共需传输多少位?在设备 D 待续工作过程中, 每秒最多可向 I/O 端口送入多少个字符?
(2)设备 D 采用中断方式进行输入/输出,示意图如下。
I/O 端口每收到一个字符申请一次中断, 中断响应需 10 个时钟周期, 中断服务程序共有 20 条指令,其中第 15 条指令启动 D 工作。若 CPU 需从 D 读取 1000 个字符,则完成这一任务所需时间大约是多少个时钟周期? CPU 用于完成这一任务的时间大约是多少个时钟周期?在中断响应阶段 CPU 进行了哪些操作?
【解析】:
2. 主存储器与 CPU 的连接(14’)
某计算机采用页式虚拟存储管理方式,按字节编址, 虚拟地址为 32 位,物理地址为 24 位,页大小为 8KB ;TLB 采用全相联映射; Cache 数据区大小为 64KB ,按 2 路组相联方式组织,主存块大小为 64B 。存储访问过程的示意图如下。
请回答下列问题。
(1)图中字段 A ~ G 的位数各是多少? TLB 标记字段 B 中存放的是什么信息?
(2)将块号为 4099 的主存块装入到 Cache 中时, 所映射的 Cache 组号是多少?对应的 H 字段内容是什么?
(3)Cache 缺失处理的时间开销大还是缺页处理的时间开销大?为什么?
(4)为何 Cache 可采用直写(Write Through)策略,而修改页面内容时总是采用回写(Write Back )策略。
【解析】:
2017 年
讲解视频推荐:【BOK408真题讲解-2017年】
1. 浮点数的表示与运算(13’)
已知 f(n) = Σi=0n 2i = 2n+1 - 1 = 11···1B(n + 1 位),计算 f(n) 的 C 语言函数 f1 如下:
int f1(unsigned n){
int sum = 1, power = 1;
for(unsigned i = 0; i <= n-1; i++) {
power *= 2;
sum += power;
}
return sum;
}
将 f1 中的 int 都改为 float ,可得到计算 f(n) 的另一个函数 f2 。假设 unsigned 和 int 型数据都占 32 位,float 采用 IEEE 754 单精度标准。请回答下列问题。
(1)当 n = 0 时, f1 会出现死循环,为什么?若将 f1 中的变量 1 和 n 都定义为 int 型,则 f1 是否还会出现死循环?为什么?
(2)f1(23) 和 f2(23) 的返回值是否相等?机器数各是什么(用十六进制数表示) ?
(3)f1(24) 和 f2(24) 的返回值分别为 33554431 和 33554432.0 ,为什么不相等?
(4)f(31) = 232 - 1 ,而 f1(31) 的返回值却为 -1 ,为什么?若使 f1(n) 的返回值与 f(n) 相等,则最大的 n 是多少?
(5)f2(127) 的机器数为 7F80 0000H ,对应的值是什么?若使 f2(n) 的结果不溢出,则最大的 n 是多少?若使 f2(n) 的结果精确(无舍入),则最大的 n 是多少?
【解析】:
2. 程序的机器级代码表示(10’)
在按字节编址的计算机 M 上,上题中 f1 的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下:
其中, 机器级代码行包括行号、虚拟地址、机器指令和汇编指令。请回答下列问题。
(1)计算机 M 是 RISC 还是 CISC ?为什么?
(2)f1 的机器指令代码共占多少字节 ?要求给出 计算过程 。
(3)第 20 条指令 cmp 通过 i 减 n - 1 实现对 i 和 n - 1 的比较。执行 f1(0) 的过程中,当 i = 0 时,cmp 指令执行后, 进/借位标志 CF 的内容是什么?要求给出计算过程。
(4)第 23 条指令 shl 通过左移操作实现了 power × 2 运算, 在位中能否也用 shl 指令来实现 power × 2 ?为什么?
【解析】:
2018 年
讲解视频推荐:【BOK408真题讲解-2018年】
1. I/O 方式(8’)
假定计算机的主频为 500MHz ,CPI 为 4 。现有设备 A 和 B ,其数据传输速率分别为 2MB/s 和 40MB/s ,对应 I/O 接口中各有一个 32 位数据缓冲寄存器。请回答下列问题,要求给出计算过程。
(1)若设备 A 采用定时查询 I/O 方式,每次输入/输出都至少执行 10 条指令。设备 A 最多间隔多长时间查询一次才能不丢失数据? CPU 用于设备 A 输入/输出的时间占 CPU 总时间的百分比至少是多少?
(2)在中断 I/O 方式下,若每次中断响应和中断处理的总时钟周期数至少为 400 ,则设备 B 能否采用中断 I/O 方式?为什么?
(3)若设备 B 采用 DMA 方式,每次 DMA 传送的数据块大小为 1000B ,CPU 用于 DMA 预处理和后处理的总时钟周期数为 500 ,则 CPU 用于设备 B 输入/输出的时间占 CPU 总时间的百分比最大是多少?
【解析】:
2. 虚拟存储器(15’)
某计算机采用页式虚拟存储管理方式, 按字节编址。CPU 进行存储访问的过程如题 44 图所示。
根据题 44 图回答下列问题。
(1)主存物理地址占多少位?
(2)TLB 采用什么映射方式? TLB 是用 SRAM 还是用 DRAM 实现?
(3)Cache 采用什么映射方式?若 Cache 采用 LRU 替换算法和回写(Write Back)策略,则 Cache 每行中除数据(Data)、Tag 和有效位,还应有哪些附加位? Cache 的总容量是多少?Cache 中有效位的作用是什么?
(4)若 CPU 给出的虚拟地址为 0008 C040H ,则对应的物理地址是多少?是否在 Cache 中命中?说明理由。若 CPU 给出的虚拟地址为 0007 C260H ,则该地址所在主存块映射到的 Cache 组号是多少?
【解析】:
2019 年
讲解视频推荐:【BOK408真题讲解-2019年】
1. 程序的机器级表示(16’)
已知 f(n) = n! = n × (n - 1) × (n-2) × … × 2 × 1 ,计算 f(n) 的 C 语言函数 f1 的源程序(阴影部分)及其在 32 位计算机 M 上的部分机器级代码如下:
其中, 机器级代码行包括行号、虚拟地址、机器指令和汇编指令,计算机 M 按字节编址,int 型数据占 32 位。请回答下列问题:
(1)计算 f(10) 需要调用函数 f1 多少次?执行哪条指令会递归调用 f1 ?
(2)在上述代码中,哪条指令是条件转移指令? 哪几条指令一定会使程序跳转执行?
(3)根据第 16 行的 call 指令, 第 17 行指令的虚拟地址应是多少?已知第 16 行的 call 指令采用相对寻址方式, 该指令中的偏移量应是多少(给出计算过程) ?已知第 16 行的 call 指令的后 4 字节为偏移量,M 是采用大端方式还是采用小端方式?
(4)f(13) = 6227020800 ,但 f1(13) 的返回值为 1932053504 ,为什么两者不等?要使 f1(13) 能返回正确的结果, 应如何修改 f1 源程序?
(5)第 19 行 imul 指令(带符号整数乘) 的功能是 R[eax] ← R[eax] × R[ecx] ,当乘法器输出的高、低 32 位乘积之间满足什么条件时, 溢出标志 OF = 1 ? 要使 CPU 在发生溢出时转异常处理,编译器应在 imul 指令后应加一条什么指令?
【解析】:
(1)计算 f(10) 需要调用函数 f1 共 10 次。执行第 16 行 call 指令会递归调用 f1 。
(2)第 12 行 jle 指令是条件转移指令。第 16 行 call 指令、第 20 行 jmp 指令、第 30 行 ret 指令一定会使程序跳转执行。
jle 指令是条件转移指令,其含义为小于或等于时跳转至目标地址。call 指令为函数调用指令 jmp 指令为无条件转移指令、ret 指令为子程序的返回指令。
(3)第 16 行 call 指令的下一条指令的地址为 00401025H + 5= 0040102AH ,故第 17 行指令的虚拟地址是 0040102AH 。call 指令采用相对寻址方式,即目标地址 = (PC) + 偏移量,call 指令的目标地址为 00401000H ,所以偏移量 = 目标地址 - (PC) = 0040 1000H - 0040 102AH = FFFF FFD6H 。根据第 16 行 call 指令的偏移量字段为 D6 FF FF FF,可确定 M 采用小端方式。
M 按字节编址,call 指令长度为 5 字节,故下一条指令的地址 = call 指令的地址 + 5 。
(4)因为 f(13) = 6 227 020 800 ,大于 32 位 int 型数据可表示的最大值,所以 f1(13) 的返回值是个发生了溢出的结果。
为使 f1(13) 能返回正确结果,可将函数 f1 的返回值类型改为 double(或 long long 或 long double 或 float)。
(5)若乘积的高 33 位为非全 0 或非全 1 ,则 OF = 1 。
编译器应该在 imul 指令后加一条 “溢出自陷指令” ,使得 CPU 自动査询溢出标志 OF,当 OF = 1 时调出 “溢出异常处理程序” 。
2. 程序的机器级表示(7’)
对于上题,若计算机 M 的主存地址为 32 位,采用分页存储管理方式, 页大小为 4KB ,则第 1 行 push 指令和第 30 行 ret 指令是否在同一页中(说明理由)?若指令 Cache 有 64 行,采用 4 路组相联映射方式,主存块大小为 64B ,则 32 位主存地址中, 哪几位表示块内地址?哪几位表示 Cache 组号?哪几位表示标记(tag)信息?读取第 16 行 call 指令时,只可能在指令 Cache 的哪一组中命中(说明理由) ?
【解析】: