一、选择题
12.程序P 在机器M上的执行时间是20秒,编译优化后,P 执行的指令数减少到原来的70%,而CPI增加到原来的1.2 倍,则P 在M 上的执行时间是。
A.8.4秒B.11.7秒C.14 秒D.16.8秒
13.若x=103,y=-25,则下列表达式采用8 位定点补码运算实现时,会发生溢出的 是。
A.x+yB.-x+yC.x-yD.-x-y
14.float型数据据常用IEEE754单精度浮点格式表示。假设两个float型变量x 和y分 别存放在32 位寄存器f1和f2 中,若(f1)=CC900000H,(f2)=B
0C
00000H,则x和y之间的 关系为。
A.x<y且符号相同B.x<y且符号不同
C.x>y且符号相同D.x>y且符号不同
15.某容量为256MB的存储器由若干
4
M
×8位的DRAM 芯片构成,该DRAM芯片的 地址引脚和数据引脚总数是。
A.19B.
2
2
C.30D.36
16.采用指令Cache与数据Cache分离的主要目的是。
A.降低Cache 的缺失损失B.提高Cache 的命中率
C.降低CPU平均访存时间D.减少指令流水线资源冲突
17.某计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若 基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范 围是。
A.-32768~+32767B.-32767~+32768
C.-65536~+65535D.-65535~+65536
18.某计算机采用微程序控制器,共有32 条指令,公共的取指令微程序包含2条微指 令,各指令对应的微程序平均由4 条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下址字段的位数至少是
A.5B.
6C
.8D.9
19.某同步总线采用数据线和地址线复用方式,其中地址/数据线有32 根,总线时钟频
率为66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是。
A.132 MB/sB.264 MB/sC.528 MB/sD.1056MB/s
20.一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为。
A.并行传输B.串行传输C.突发传输D.同步传输
21.下列有关I/O接口的叙述中,错误的是。
A.状态端口和控制端口可以合用同一个寄存器
B.I/O接口中CPU 可访问的寄存器称为I/O端口
C.采用独立编址方式时,I/O端口地址和主存地址可能相
D.采用统一编址方式时,CPU不能用访存指令访问I/O端
22.若某设备中断请求的响应和处理时间为100ns,每400ns 发出一次中断请求,中断 响应所允许的最长延迟时间为50ns,则在该设备持续工作过程中,CPU用于该设备的I/O 时间占整个CPU时间的百分比至少是。
A.12.5%B.25%C.37.5%D.50%
答案:D,C,A,A,D,A,C,C,C,D,B
二、综合应用题
43. (12 分)某程序中有如下循环代码段p::”for(int i = 0; i < N; i++) sum+=A[i];”。假设编译时变量sum 和i 分别分配在寄存器R1 和R2 中。常量N 在寄存器R6 中,数组A 的首地址在寄存器R3 中。程序段P 起始地址为0804 8100H,对应的汇编代码和机器代码如下表所示。
编号 |
地址 |
机器代码 |
汇编代码 |
注释 |
1 |
08048100H |
00022080H |
loop: sll R4,R2,2 |
(R2)<<2 R4 |
2 |
08048104H |
00083020H |
add R4,R4,R3 |
(R4)+(R3) R4 |
3 |
08048108H |
8C
850000H |
load R5,0(R4) |
((R4)+0) R5 |
4 |
0804810CH |
00250820H |
add R1,R1,R5 |
(R1)+(R5) R1 |
5 |
08048110H |
20420001H |
add R2,R2,1 |
(R2)+1 R2 |
6 |
08048114H |
1446FFFAH |
bne R2,R6,loop |
if(R2)!=(R6) goto loop |
执行上述代码的计算机M 采用32 位定长指令字,其中分支指令bne 采用如下格式:
312625212016150
OP 为操作码;;Rs 和Rd 为寄存器编号;OFFSET 为偏移量,用补码表示。请回答下列问题,并说明理由。
1)M 的存储器编址单位是什么?
2)已知sll 指令实现左移功能,数组A 中每个元素占多少位?
3)题44 表中bne 指令的OFFSET 字段的值是多少?已知bne 指令采用相对寻址方式,当前PC 内容为bne 指令地址,通过分析题44 表中指令地址和bne 指令内容,推断出bne指令的转移目标地址计算公式。
4)若M 采用如下“按序发射、按序完成”的5 级指令流水线:IF(取值)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3 个时钟周期的阻塞,则P 中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令1 的执行不会因为与指令5 的数据相关而发生阻塞?
解:
该题为计算机组成原理科目的综合题型,涉及到指令系统、存储管理以及CPU 三个部分内容,考生因注意各章节内容之间的联系,才能更好的把握当前考试的趋势。
(1)已知计算机M 采用32 位定长指令字,即一条指令占4B,观察表中各指令的地址可知,每条指令的地址差为4 个地址单位,即4 个地址单位代表4B,一个地址单位就代表了1B,所以该计算机是按字节编址的。(2 分)
(2)在二进制中某数左移二位相当于以乘四,由该条件可知,数组间的数据间隔为4 个地址单位,而计算机按字节编址,所以数组A 中每个元素占4B。(2 分)
(3)由表可知,bne 指令的机器代码为1446FFFAH,根据题目给出的指令格式,后2B 的内容为OFFSET 字段,所以该指令的OFFSET 字段为FFFAH,用补码表示,值为-6。(1 分) 当系统执行到bne 指令时,PC 自动加4,PC 的内容就为08048118H,而跳转的目标是08048100H,两者相差了18H,即24 个单位的地址间隔,所以偏移址的一位即是真实跳转地址的-24/-6=4 位。(1 分)可知bne 指令的转移目标地址计算公式为(PC)+4+OFFSET*4。(1分)
(4)由于数据相关而发生阻塞的指令为第2、3、4、6 条,因为第2、3、4、6 条指令都与各自前一条指令发生数据相关。(3 分) 第6 条指令会发生控制冒险。(1 分) 当前循环的第五条指令与下次循环的第一条指令虽然有数据相关,但由于第6 条指令后有3 个时钟周期的阻塞,因而消除了该数据相关。(1 分)
44.假设对于44 题中的计算机M 和程序P 的机器代码,M 采用页式虚拟存储管理;P 开始执行时,(R1)=(R2)=0,(R6)=1000,其机器代码已调入主存但不在Cache 中;数组A 未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。
1)P 执行结束时,R2 的内容是多少?
2)M 的指令Cache 和数据Cache 分离。若指令Cache 共有16 行,Cache 和主存交换的块大小为32 字节,则其数据区的容量是多少?若仅考虑程序段P 的执行,则指令Cache 的命中率为多少?
3)P 在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组A 的访问,需要读磁盘和TLB 至少各多少次?
解:
该题继承了上题中的相关信息,统考中首次引入此种设置,具体考察到程序的运行结果、
Cache 的大小和命中率的计算以及磁盘和TLB 的相关计算,是一题比较综合的题型。
(1)R2 里装的是i 的值,循环条件是i<N(1000),即当i 自增到不满足这个条件时跳出循环,程序结束,所以此时i 的值为1000。(1 分)
(2)C ache 共有16 行,每块32 字节,所以Cache 数据区的容量为16*32B=512B。 (1 分) P 共有6 条指令,占24 字节,小于主存块大小(32B),其起始地址为0804 8100H,对应一块的开始位置,由此可知所有指令都在一个主存块内。读取第一条指令时会发生Cache 缺失,故将P 所在的主存块调入Cache 某一行,以后每次读取指令时,都能在指令Cache中命中。因此在1000 次循环中,只会发生1 次指令访问缺失,所以指令Cache 的命中率为:(1000×6-1)/(1000×6)=99.98%。 (2 分)
(3)指令4 为加法指令,即对应sum+=A[i],当数组A 中元素的值过大时,则会导致条
加法指令发生溢出异常;而指令2、5 虽然都是加法指令,但他们分别为数组地址的计算指
令和存储变量i 的寄存器进行自增的指令,而i 最大到达1000,所以他们都不会产生溢出异常。(2 分) 只有访存指令可能产生缺页异常,即指令3 可能产生缺页异常。(1 分) 因为数组A 在磁盘的一页上,而一开始数组并不在主存中,第一次访问数组时会导致访
盘,把A 调入内存,而以后数组A 的元素都在内存中,则不会导致访盘,所以该程序一共访盘一次。(2 分) 每访问一次内存数据就会查TLB 一次,共访问数组1000 次,所以此时又访问TLB1000 次,还要考虑到第一次访问数组A,即访问A[0]时,会多访问一次TLB(第一次访问A[0]会先查一次TLB,然后产生缺页,处理完缺页中断后,会重新访问A[0],此时又查TLB),所以访问TLB 的次数一共是1001 次。(2 分)