一、《计算机组成原理》习题解答
第 1 章
1. 解释概念或术语:实际机器、虚拟机器,机器指令、机器指令格式,主机、CPU、
主存、I/O、PC、IR、ALU、CU、AC、MAR、MDR,机器字长、存储字长、指令字长、
CPI、TC、主频、响应时间、吞吐量、MIPS、MFLOPS。
答:略
2. 如何理解计算机系统的层次结构?说明高级语言、汇编语言及机器语言的差别与联
系。
答:⑴计算机系统是由软件和硬件结合而成的整体。为了提高计算机系统的好用性,程
序设计语言的描述问题能力越来越强,各种程序设计语言大体上是一种层次结构,即高等级
编程语言指令包含低等级编程语言指令的全部功能。
对于使用不同层次编程语言的程序员来说,他们所看到的同一计算机系统的属性是不同
的,这些属性反映了同一计算机系统的不同层次的特征,即同一计算机系统可划分成多个层
次结构,不同层次的结构反映的计算机系统的特征不同而已。
⑵机器语言是能够被计算机硬件直接识别和执行的程序设计语言,机器语言是一种面向
硬件的、数字式程序设计语言;汇编语言和高级语言均用符号表示机器语言指令,指令很容
易阅读和编写、但不能被硬件直接识别和执行,它们均是一种面向软件的、符号式程序设计
语言;相对于汇编语言而言,高级语言描述问题的能力更强;高级语言和汇编语言程序必须
翻译成机器语言程序后,才能在计算机硬件上执行。
3. 计算机系统结构、计算机组成的定义各是什么?两者之间有何关系?
答:计算机系统结构是指机器语言程序员或编译程序编写者所看到的计算机系统的属
性,包括概念性结构和功能特性两个方面。主要研究计算机系统软硬件交界面的定义及其上
下的功能分配。
计算机组成是指计算机硬件设计人员所看到的计算机系统的属性。主要研究如何合理地
逻辑实现硬件的功能。
计算机组成是计算机系统结构的逻辑实现。
4. 冯·诺依曼模型的存储程序原理包含哪些内容、对计算机硬件和软件有哪些要求?
冯·诺依曼模型计算机的特点有哪些?
答:存储程序原理是指程序和数据预先存放在存储器中,机器工作时自动按程序的逻辑
顺序从存储器中逐条取出指令并执行。
存储程序原理要求存储器是由定长单元组成的、按地址访问的、一维线性空间结构的存
储部件;要求软件指令支持用地址码表示操作数在存储器中的地址,指令长度为存储单元长
度的倍数,编程语言中必须有转移型指令,以实现程序存储顺序到程序逻辑顺序的转变。
冯·诺依曼模型计算机的特点可归纳为如下几点:
⑴计算机由运算器、控制器、存储器、输入设备和输出设备组成;
⑵存储器是由定长单元组成的、按地址访问的、一维线性空间结构;
⑶程序由指令组成,指令和数据以等同地位存放在存储器中;
⑷机器工作时自动按程序的逻辑顺序从存储器中逐条取出指令并执行;
⑸指令由操作码和地址码组成,操作码用于表示操作的性质,地址码用于表示操作数在
1
存储器中的地址;
⑹指令和数据均采用二进制方式表示,运算亦采用二进制方式;
⑺机器以运算器为中心,输入/输出设备与存储器间的数据传送都经过运算器。
5. 现代计算机均采用冯·诺依曼模型、但进行了改进,画出现代计算机硬件组成及结构
图,并说明各部件的作用。
答:现代计算机结构大多在冯·诺依曼模型基础上进行了改进,以进一步提高系统的性
能。改进主要包括以存储器为中心、多种存储器共存、采用总线互连三个方面。基本的硬件
组成及结构图如下:
CPU
主存
系统总线
I/O接口
I/O设备
……
I/O接口
磁盘接口
I/O设备
磁盘
CPU 由运算器和控制器组成,运算器负责实现数据加工,实现算术逻辑运算;控制器
负责指挥和控制各部件协调地工作,实现程序执行过程。
存储器由主存和辅存(如磁盘)组成,负责实现信息存储。主存由小容量、快速元器件组
成,存放近期常用程序和数据;辅存由大容量、低价格元器件组成,存放所有的程序和数据;
主存可被 CPU 直接访问,这样在提高访存速度的同时,可降低存储器总成本。
I/O 设备负责实现信息的输入和输出,以及信息的格式变换。
通过总线实现部件互连的好处是可以实现 CPU 的操作标准化,而操作标准化的具体实
现部件是 I/O 接口,它负责缓冲和中转相关操作。
6. 若某计算机的机器指令格式如表 1.2 所示,请写出求 s=a+b+c 的机器语言程序,其中
a、b、c 存放在起始地址为 0000100000 的连续 3 个主存单元中,而 s 则要求存放到地址为
0000001000 的主存单元中。
解:假设程序第一条指令存放在第 1000000000 号存储单元中,则程序清单如下:
主存单元地址
(二进制)
指令(二进制)
操 作 码
地 址 码
注 释
…
0000001000
…
0000100000
0000100001
0000100010
…
1000000000
1000000001
1000000010
1000000011
1000000100
000001
000011
000011
000010
000100
…
s
…
a
b
c
…
结果数据 s
原始数据 a
原始数据 b
原始数据 c
0000100000 取数 a 到累加器 AC 中
0000100001
(AC)+b,结果存于 AC 中
(AC)+c,结果存于 AC 中
0000100010
0000001000 将 AC 中内容存到 s 所在主存单元中
********** 停机,地址码空闲(值可任意)
7. 画出基于累加器 CPU 的主机框图,说明题 6 的机器语言程序的执行过程(尽可能详
细)。简述执行过程与冯·诺依曼模型的存储程序原理的关系。
2
答:基于累加器 CPU 的的主机框图如下:
假设 s=a+b+c 程序已被调入主存、首指令地址已写入到 PC 中,即(PC)=1000000000。
程序运行启动后,计算机硬件自动地、逐条地、按(PC)为指令地址实现取指令、分析指令、
执行指令的对应操作,直到执行到停机指令为止。假设 IR 中操作码记为 OP(IR)、地址码记
为 AD(IR),则 s=a+b+c 程序执行过程的具体操作如下:
(1)PC→MAR、MAR→ABus、Read→CBus ;MAR=PC=1000000000, 取指令开始
(2)WMFC,(PC)+1→PC
(3)MDR→IR
ID 对 OP(IR)译码
;PC=1000000001(下条指令地址)
;IR=000001 0000100000,取指令完成
;CU 得知当前为取数指令
(4)AD(IR)→MAR、MAR→ABus、Read→Cbus ;MAR=0000100000,执行指令开始
(5)WMFC
(6)MDR→AC
;AC=MDR=a, 执行指令完成
(7)PC→MAR、MAR→ABus、Read→CBus
;MAR=PC=1000000001, 取指令开始
(8)WMFC,(PC)+1→PC
(9)MDR→IR
ID 对 OP(IR)译码
;PC=1000000010(下条指令地址)
;IR=000011 0000100001,取指令完成
;CU 得知当前为加法指令
(10)AD(IR)→MAR、MAR→ABus、Read→CBus ;MAR=0000100001,执行指令开始
(11)WMFC
(12)(MDR)+(AC)→AC
;AC=a+b, 执行指令完成
(13)PC→MAR、MAR→ABus、Read→CBus
;MAR=PC=1000000010,取指令开始
(14)WMFC,(PC)+1→PC
(15)MDR→IR
ID 对 OP(IR)译码
;PC=1000000011(下条指令地址)
;IR=000011 0000100010,取指令完成
;CU 得知当前为加法指令
(16)AD(IR)→MAR、MAR→ABus、Read→CBus ;MAR=0000100010,执行指令开始
(17)WMFC
(18)(MDR)+(AC)→AC
;AC=a+b+c, 执行指令完成
(19)PC→MAR、MAR→ABus、Read→CBus ;MAR=PC=1000000011, 取指令开始
(20)WMFC,(PC)+1→PC
(21)MDR→IR
;PC=1000000100(下条指令地址)
;IR=000010 0000001000,取指令完成
ID 对 OP(IR)译码 ;CU 得知当前为存数指令
(22)AD(IR)→MAR、MAR→ABus、Write→Cbus ;MAR=0000100000,执行指令开始
(23)AC→MDR、MDR→DBus、WMFC
;MDR=AC=a+b+c,执行指令完成
(24)PC→MAR、MAR→ABus、Read→Cbus ;MAR=PC=1000000100, 取指令开始
(25)WMFC,(PC)+1→PC
(26)MDR→IR
ID 对 OP(IR)译码
(27)机器自动停机
;PC=1000000101(下条指令地址)
;IR=000100 **********,取指令完成
;CU 得知当前为停机指令
;执行停机指令完成
从程序执行过程可以看出:由于指令存放在存储器中,故指令执行过程分为取指令(含
3
CPU 设备 运算器 Addr Data Cmd 主存储器 MAR MDR … 控制信号形成部件 时序部件 ID 控制器 +“1” I/O接口 AC ALU IR PC …… 存储 阵列 I/O电路 地址译码器 … 系统总线 I/O
分析指令)、执行指令两个阶段;由于存储器同时只接收一个访问操作,故程序执行过程是
循环的指令执行过程,循环变量为 PC 中的指令地址;只要按照程序逻辑顺序改变(PC),可
以实现按程序逻辑顺序执行程序的目标。
8. 指令和数据均存放在存储器中,计算机如何区分它们?
答:由于存储器访问只使用地址和命令(Read/Write)信号,而指令和数据均以二进制编
码形成存放在存储器中,因此,从存储器取得的信息本身是无法区分是指令还是数据的。
计算机只能通过信息的用途来区分,即取指令时取得的是指令,指令执行时取操作数或
写结果对应的信息是数据。即计算机通过程序执行过程或指令执行过程的不同阶段来区分。
9. 在某 CPU 主频为 400MHz 的计算机上执行程序 A,程序 A 中指令类型、执行数量及
平均时钟周期数如下表所示。
指令类型
指令执行数量 平均时钟周期数(/指令)
整数
数据传送
浮点数
条件转移
45000
75000
8000
1500
1
2
4
2
求该计算机执行程序 A 时的程序执行时间、平均 CPI 及 MIPS。
解:CPU 时钟周期 TC=1/f=1/(400×106)=2.5ns
程序执行时间 TCPU=[45000×1+75000×2+8000×4+1500×2]×2.5=0.575ms。
平均 CPI=(45000×1+75000×2+8000×4+1500×2)
÷( 45000+75000+8000+1500)
=1.776(时钟周期/指令)
MIPS=( 45000+75000+8000+1500)/ (0.575×10-3×106)=225.2 百万条/秒
10. 冯·诺依曼模型计算机的性能瓶颈有哪些?简述缓解性能瓶颈严重性的方法。
答:冯·诺依曼模型计算机的性能瓶颈有 CPU-MEM 瓶颈、指令串行执行瓶颈两个。
对缓解 CPU-MEM 瓶颈而言,主要目标是减少 MEM 访问延迟、提高 MEM 传输带宽,
常用的方法有采用多种存储器构成层次结构存储系统、采用多级总线互连、采用并行结构存
储器等。
对缓解指令串行执行瓶颈而言,主要目标是尽可能实现并行处理,常用的方法有采用流
水线技术、数据流技术、超标量技术、超线程技术、多核技术等。
4
第 2 章
1. 解释概念或术语:进制、机器数、原码、补码、移码、变形补码、BCD 码、交换码、
内码、奇校验、CRC、上溢、下溢、左规、对阶、溢出标志、进位标志、部分积、Booth 算
法、交替加减法除法、警戒位、全加器、并行加法器、行波进位、先行进位。
答:略
2. 完成下列不同进制数之间的转换
(1)(347.625)10=( )2=( )8=( )16
(2)(9C.E)16=( )2=( )8=( )10
(3)(11010011)2=( )10=( )8421BCD
解:(1)(347.625)10=(101011011.101)2=(533.5)8=(15B.A)16
(2)(9C.E)16=(10011100.1110)2=(234.7)8=(156.875)10
(3)(11010011)2=(211)10=(001000010001)8421BCD
3. 对下列十进制数,分别写出机器数长度为 8 位(含 1 位符号位)时的原码及补
码。
(1)+23/128 (2) -35/64 (3) 43 (4) -72
(5)+7/32 (6) -9/16 (7)+91 (8) -33
解:(1)[+23/128]原=0.0010111, [+23/128]补=0.0010111;
(2)[-35/64]原=1.1000110, [-35/64]补=1.0111010;
(3)[43]原=00101011,
(4)[-72]原=11001000,
[43]补=00101011;
[-72]补=10111000;
(5)[+7/32]原=0.0011100, [+7/32]补=0.0011100;
(6)[-9/16]原=1.1001000, [-9/16]补=1.0111000;
(7)[+91]原=01011011,
(8)[-33]原=10100001,
[+91]补=01011011;
[-33]补=11011111。
4. 对下列机器数(含 1 位符号位),若为原码时求补码及真值,若为补码或反码时求原
码及真值。
(1)[X]原=100011 (2)[X]补=0.00011 (3)[X]反=1.01010
(4)[X]原=1.10011 (5)[X]补=101001 (6)[X]反=101011
解:(1)[X]补=111101,X=-00011=-3;
(2)[X]原=0.00011,X=+0.00011=+3/32;
(3)[X]原=1.10101,X=-0.10101=-21/32;
(4)[X]补=1.01101,X=-0.10011=-19/32;
(5)[X]原=110111,X=-10111=-23/32;
(6)[X]原=110100,X=-10100=-20/32。
5. (1)若[X]补=1.01001,求[-X]补及 X;
(2)若[-X]补=101001,求[X]补及 X。
解:(1)[-X]补=0.10111,X=-0.10111=-23/32;
(2)[X]补=010111,X=+10111=+23。
6. (1)若 X=+23 及-42,分别求 8 位长度的[X]移;
5
(2)若[X]移=1100101 及 0011101,分别求 X。
解:(1)[+23]移=10010111,[-42]移=01010110;
(2)[X]移=1100101 时的 X=+100101=+37,
[X]移=0011101 时的 X=-100011=-35。
7. 若[X]补=0.x-1x-2x-3x-4x-5,[Y]补=1y4y3y2y1y0,求下列几种情况时,x-i 或 yi 的取
值。
(1)X>1/4 (2)1/8≥X>1/16 (3)Y<-16 (4)-32<Y≤-8
解:(1)[1/4]补=0.01000,
故[(x-1=0)∧(x-3=1∨x-4=1∨x-5=1)]∨(x-1=1)时 X>1/4;
(2)[1/8]补=0.00100,[1/16]补=0.00010,
故(x-1=0∧x-2=0)∧[(x-3=1∧x-4=0∧x-5=0)∨(x-3=0∧x-4=1∧x-5=1)]时
1/8≥X>1/16;
(3)[-16]补=110000,故 y4=0 时 Y<-16;
(4)[-8]补=111000,[-32]补=100000,故(y4=1∧y3=1∧y2=0∧y1=0∧y0=0)
y3=1)∨[y4=0∧y3=0∧(y2=1∨y1=1∨y0=1)]时-32<Y≤-8。
∨(y4
8. 冗余校验的基本原理是什么?
答:数据发送时,除发送数据信息外,还冗余发送按某种规律形成的校验信息;数据接
收时,用所接收数据信息形成新的校验信息,与所接收的校验信息比较,以此判断是否发生
了错误,出错时报告出错或自动校正错误。
9. 若采用奇校验,下述两个数据的校验位的值是多少?
(1)0101001 (2)0011011
答:(1)数据 0101001 的奇校验位值为 0
(2)数据 0011011 的奇校验位值为 0
1
0
0
1
1
1
0
0
0
1
1
1
1=0;
1=1。
10. 若下列奇偶校验码中只有一个有错误,请问采用的是奇/偶校验?为什么?
(1)10001101 (2)01101101 (3)10101001
答:上述奇偶校验码采用的是偶校验编码方式。
由于三个奇偶校验码中分别有偶数、奇数、偶数个“1”,而只有一个校验码有错误,
故第 2 个奇偶校验码(01101101)有错误;
又由于第 2 个奇偶校验码有奇数个“1”,故校验码采用的是偶校验编码方式。
11. 设有 8 位数据信息 01101101,请写出求其海明校验码的过程。
解:本题中数据位数 n=8,数据信息 m8…m1=01101101,设检验信息位数为 k 位,
(1)先求得校验信息位数 k,根据 2k-1≥8+k 的要求,可得 k=4 位;
(2)列出 n+k=8+4=12 位校验码中的信息排列:m8 m7m6m5p4m4m3m2p3m1p2p1。
(3)设各校验组采用偶校验编码方式,各校验组校验位的值为:
p4=m8 m7 m6 m5=0
p3=m8 m4 m3 m2=0
p2=m7 m6 m4 m3 m1=1
p1=m7 m5 m4 m2 m1=1
1
0
(4)海明偶校验码为:011001100111。
1
1
1
0
1=1,
1=1;
1
1
1
1
0=0,
0=0,
12. 若机器数表示时字长为 8 位,写出下列情况时它能够表示的数的范围(十进制)。
(1)无符号整数; (2)原码编码的定点整数;
(3)补码编码的定点整数; (4)原码编码的定点小数;
6
(5)补码编码的定点小数。
解:(1)无符号整数的表示范围是 00000000~11111111,即 0~255;
(2)原码定点整数的表示范围是-1111111~+1111111,即-127~+127;
(3)补码定点整数的表示范围是-(1111111+1)~+1111111,即-128~+127;
(4)原码定点小数的表示范围是-0.1111111~+0.1111111,即-127/128~+127/128;
(5)补码定点小数的表示范围是-1.0000000~+0.1111111,即-128/128~+127/128。
13. 对两个 8 位字长的定点数 9BH 及 FFH,分别写出它们采用原码编码、补码编码及移
码编码时的十进制整数的真值,并写出它们表示为无符号数时的十进制真值。
解:机器码 9BH FFH
原码编码的真值(整数) -27 -127
补码编码的真值(整数) -101 -1
移码编码的真值(整数) +27 +127
无符号编码的真值(整数) 155 255
14. 若浮点数表示格式(从高位到低位)为:阶码 6 位(含 1 位阶符)、尾数 10 位(含
1 位数符),请写出 51/128、-27/1024、7.375、-86.5 所对应的机器数。
(1)阶码和尾数均为原码;
(2)阶码和尾数均为补码;
(3)阶码为移码、尾数为补码。
解:(1)阶码和尾数均为原码时,
[51/128]浮=[0.0110011]浮=100001 0110011000 或 000000 0011001100 或…,
[-27/1024]浮=[-0.0000011011]浮=100101 1110110000 或 100001 1000011011 或…,
[7.375]浮=[111.011]浮=000011 0111011000 或 000110 0000111011 或…,
[-86.5]浮=[-1010110.1]浮=000111 1101011010 或 001000 1010101101 或…;
(2)阶码和尾数均为补码时,
[51/128]浮=111111 0110011000 或 000000 0011001100 或…,
[-27/1024]浮=111011 1001010000 或 111111 1111100101 或…,
[7.375]浮=000011 0111011000 或 000110 0000111011 或…,
[-86.5]浮=000111 1010100110 或 001000 1101010011 或…;
(3)阶码为移码、尾数为补码时,
[51/128]浮=011111 0110011000 或 100000 0011001100 或…,
[-27/1024]浮=011011 1001010000 或 011111 1111100101 或…,
[7.375]浮=100011 0111011000 或 100110 0000111011 或…,
[-86.5]浮=100111 1010100110 或 101000 1101010011 或…。
15. 若浮点数表示格式采用 6 位阶码(含 1 位阶符)、10 位尾数(含 1 位数符),阶码
和尾数均采用补码编码。
(1)写出浮点数能表示的正数及负数的范围;
(2)写出规格化浮点数能表示的正数及负数的范围。
解:(1)浮点数正数区的范围为:+2-9×2-32~+(1-2-9)×2+31,
浮点数负数区的范围为:-1×2+31~-2-9×2-32;
(2)规格化浮点数正数区的范围为:+2-1×2-32~+(1-2-9)×2+31,
规格化浮点数负数区的范围为:-1×2+31~-(2-1+2-9)×2-32。
16. 若浮点数表示格式为:6 位阶码(含 1 位阶符)、10 位尾数(含 1 位数符)。分别写
7
出阶码和尾数均为原码及均为补码时,下列数值为规格化数时的机器码。
(1)+51/128 (2)-51/128 (3)-1/64
解:(1)阶码和尾数均为原码时,规格化数的机器码为 100001 0110011000,
阶码和尾数均为补码时,规格化数的机器码为 111111 0110011000;
(2)阶码和尾数均为原码时,规格化数的机器码为 100001 1110011000,
阶码和尾数均为补码时,规格化数的机器码为 111111 1001101000;
(3)阶码和尾数均为原码时,规格化数的机器码为 100101 1100000000,
阶码和尾数均为补码时,规格化数的机器码为 111010 1000000000。
17. 若机器中单精度浮点数采用 IEEE 754 标准表示。
(1)对机器码为(99D00000)16 及(59800000)16 的浮点数,请写出它们的真值;
(2)请写出-51/128 的机器码。
解:(1)由于机器码(99D00000)16=1 00110011 10100000000000000000000B,
故浮点数的符号码 S=1、阶码 E=00110011、尾数码 M=10100000000000000000000,
因 1<E<255,故机器码表示的为规格化浮点数,
(99D00000)16 的真值 N=(-1)1×251-127×1.10100000000000000000000=-0.1101×2-76;
由于机器码(59800000)16=0 10110011 00000000000000000000000B,
故浮点数的符号码 S=0、阶码 E=10110011、尾数码 M=00000000000000000000000,
因 1<E<255,故机器码表示的为规格化浮点数,
(59800000)16 的真值 N=(-1)0×2179-127×1. 00000000000000000000000=+0.1×2+53。
(2)(-51/128)10=(-0.0110011)2=(-1)1×(1.10011)×2125-127,
则用 IEEE754 标准表示时,符号码 S=1、阶码 E=125、尾数 M=0.10011,
故-51/128 的单精度浮点数机器码为 1 01111101 10011000000000000000000。
18. 字符在计算机中的表示可看作无符号定点整数,对字符的操作有比较是否相同、判
断前后次序等关系运算,需要哪些支持才能用算术运算和逻辑运算实现关系运算?
答:由于字符数据可看作无符号定点整数,故字符操作的结果可以用两个无符号定点整
数关系运算的结果表示。
设 NA 及 NB 为无符号定点整数,NC 为有符号定点整数,且 NA-NB=NC,
则①当 NA>NB 时,NC 的符号为正,
②当 NA<NB 时,NC 的符号为负,
③当 NA=NB 时,NC 的值为零,
④当 NA≥NB 时,NC 的符号为正、或者 NC 的值为零,
⑤当 NA≤NB 时,NC 的符号为负、或者 NC 的值为零;
即对算术运算(减法)结果的符号、是否为零进行逻辑运算(逻辑与、逻辑或),就可以得
到关系运算的结果。
因此,运算器中设置“结果符号是否为负”及“结果是否为零”两个标志位,并且有对
这 2 个硬件标志位的 5 种逻辑操作硬件时,就可以用算术运算和逻辑运算实现关系运算了。
19. 各种应用数据在计算机中一般表示成哪几种数据类型?对某个机器数,如何才能够
知道它的数据类型?
答:计算机中的应用数据一般有数值数据和非数据数据两大类型,数值数据的运算均为
算术运算,数据可表示为定点数或浮点数两种数据类型;非数值数据的运算比较复杂,可能
为逻辑运算,或算术运算或关系运算,数据可表示为逻辑数,或定点数或浮点数。故应用数
据在计算机中一般表示成定点数、浮点数及逻辑数三种数据类型。
由于计算机中均用二进制表示数据和指令,只能通过约定方式隐含表示符号及小数点
8