100011 00010 01111 0000 0000 0000 0000
第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照
### 100011 00010 01111 0000 0000 0000 0000
### 100011 00010 10000 0000 0000 0000 0100
### 101011 00010 10000 0000 0000 0000 0000
### 101011 00010 01111 0000 0000 0000 0100
机器语言目标程序
计算机硬件层
指令译码器
⋯, EXTop=1,ALUSelA=1,ALUSelB=11,ALUop=add,
控制信号
lorD=1,Read,MemtoReg-1,RegWr=1,⋯
图1.11 不同层次语言之间的等价转换
代码为“100011 00010 01111 0000 0000 0000 0000”,这是一条 MIPS体系结构中的指令,其
中,高6位“100011”为操作码,随后5位“00010”为寄存器编号2,再后面5位“01111”为寄
存器编号15,最后16位为立即数0。
CPU 能够通过逻辑电路直接执行用二进制表示的机器指令。指令执行时,通过控制器
中的指令译码器将指令操作码进行译码,以解释成控制信号(control signal)来控制数据通
路的执行。例如,图1.11中给出的控制信号中,ALUop=add控制 ALU 进行加操作;Read
控制进行主存读操作;RegWr=1控制将结果写入寄存器。
1.4.4指令的执行过程
图1.12 给出了一个简单的冯·诺依曼结构模型机,下面通过描述该模型机的工作原理
来说明指令的执行过程。
中央处理器(CPU)
IR op addt
MDR
GPRs
0
控制器
1
2
3
PC
MAR
A
B
AL
标志寄存器
ALUop
F
数据线
控制线
地址线
主存
0
1
2
3
4
5
6
7
14
15
数据
控制
状态
输入
设备
和
输出
设备
控制信号线
→数据传送线
图1.12 冯·诺依曼结构模型机
<!-- page: 32 -->
计算机系统概述
在图1.12所示的模型机中,CPU包含 ALU、通用寄存器组(general purpose register
set,GPRs)、标志寄存器、控制器、指令寄存器(instruction register,IR)、程序计数器(PC)、
存储器地址寄存器(memory address register,MAR)和存储器数据寄存器(memory data
register,MDR)。其中,ALU用于进行算术运算和逻辑运算;通用寄存器组由若干通用寄
存器组成,每个通用寄存器有一个编号,通过指令可以指定哪个编号的寄存器中的数据作为
ALU运算的操作数;标志寄存器用来存放ALU 运算得到的一些标志信息,如结果是否为
0、有没有产生进位或借位、结果是否为负数等;IR用于存放从主存读出的指令;指令中的操
作码op被送到控制器进行译码,以生成控制信号,图中从控制器送出的虚线就是控制信号,
可以控制如何修改 PC以得到下一条指令的地址,可以通过ALUop控制 ALU 执行什么运
算等。
主存储器用来存储指令和操作数。每个主存单元有一个编号,称为主存地址。通常一
个主存单元存放一个字节(8位),因此,每条指令可能占用多个主存单元,一个操作数也可
能占用多个主存单元,指令的地址和操作数的地址都是指一组连续主存单元中最小的地址。
CPU可以读取主存中的指令和操作数,也可以将运算结果写入主存。
CPU和主存之间通过一组总线相连,总线中有地址线、控制线和数据线3组信号线。
MAR中的地址信息将会直接送到地址线上;控制线中有读/写信号线,指出数据是从CPU
写入主存还是从主存读到CPU,根据控制器送出的控制信号是写(write)还是读(read)信号
来控制将MDR中的数据直接送到数据线上还是将数据线上的数据接收到MDR中。
冯·诺依曼结构采用“存储程序”的工作方式,因此,组成一个程序的指令序列以及程序
所处理的操作数都被事先存放在主存中。程序中第一条指令的地址置于PC中,因此,一旦
启动程序执行,CPU 就按照以下步骤自动取出程序中的一条一条指令执行。
第一步,根据 PC取指令到IR。将 PC的内容送 MAR,MAR中的内容直接送地址线,
同时,控制器将读信号送读/写信号线,主存根据地址线上的地址和控制线上的读信号,从指
定地址的主存单元开始读出指令,并送到数据线上,MDR从数据线接收读出的指令,并传
送到IR中。
第二步,指令译码并送出控制信号。控制器根据IR中指令的操作码,生成相应的控制
信号,送到不同的执行部件。例如,若IR中的指令是加、减等ALU运算类指令,则控制信
号被送到 ALU的操作控制端 ALUop,以控制 ALU 进行相应运算。
第三步,读寄存器并进行 ALU 运算。根据IR中指令指定的寄存器编号选择两个或一
个寄存器中的内容作为操作数送到ALU的输入端,随后在 ALUop的控制下进行加(add)、
减(sub)等运算。
第四步,写结果寄存器或读写内存。若是ALU运算类指令,则将 ALU运算的结果写
入指定编号的寄存器中,并生成相应的标志信息送标志寄存器;若是取数/存数指令,则将第
三步得到的ALU结果作为地址送地址线,在读/写信号的控制下,主存对地址线指定的主
存单元进行读(read)、写(write)操作。若是取数指令,最后还需要将读出的数据从 MDR写
入指令指定的结果寄存器中。
为了能自动执行程序中的一条一条指令,CPU必须能够自动得到下一条指令的地址并
送 PC。对于每条指令的长度都一样的指令系统(定长指令字系统),只要第一步中在取指令
的同时将 PC自动加上指令长度即可;对于变长指令字系统,则需要在对指令进行译码后,
第1章
15
<!-- page: 33 -->
计算机组成与系统结构(第3版)
16
根据不同的情况来使 PC加上不同的值。不管是定长指令字系统还是变长指令字系统,当
一条指令执行结束时,PC中一定是下一条指令的地址,因此按照上述几个步骤继续执行下
一条指令,CPU 就可以按照程序规定的顺序自动地执行包含的所有指令。
指令执行过程中所包含的所有操作(如 add、sub、read、write等)都具有先后顺序关系,
因此需要定时信号进行定时。通常,CPU中所有操作都由时钟信号进行定时,时钟信号的
宽度为一个时钟周期。一条指令的执行时间包含一个或多个时钟周期。
1.5计算机系统性能评价
一个完整的计算机系统由硬件和软件构成,硬件性能的好坏对整个计算机系统的性能
起着至关重要的作用。硬件的性能检测和评价比较困难,因为硬件的性能只能通过运行软
件才能反映出来,而在相同硬件上运行不同类型的软件,或者同样的软件用不同的数据集进
行测试,所测到的性能都可能不同。因此,必须有一套综合的测试和评价硬件性能的方法。
1.5.1计算机性能的定义
吞吐率(throughput)和响应时间(response time)是考量一个计算机系统性能的两个基
本指标。吞吐率表示在单位时间内所完成的工作量。响应时间也称为执行时间(execution
time)或等待时间(latency),是指从作业提交开始到作业完成所用的时间。
如果不考虑应用背景而直接比较计算机性能,则大多用程序的执行时间来衡量。因此,
从执行时间来考虑,完成同样工作量所需时间最短的那台计算机性能是最好的。
操作系统在对处理器进行调度时,一段时间内往往会让多个程序(更准确地说是进程)
轮流使用处理器,因此在某个用户程序执行过程中,可能同时还会有其他用户程序和操作系
统程序在执行,所以,用户感觉到的某个程序的执行时间并不是其真正的执行时间。可以把
用户感觉到的执行时间分成用户 CPU时间和其他时间。用户CPU时间指真正用于用户
程序代码的执行时间;其他时间包括CPU运行操作系统程序的时间以及等待I/O操作完
成的时间或CPU用于其他用户程序的执行时间。
计算机系统的性能主要考虑的是CPU性能。系统性能和 CPU性能不等价,两者有一
些区别。系统性能是指系统的响应时间,它与CPU性能相关,同时也与CPU 以外的其他
部分有关;而CPU性能是指用户 CPU时间,它只包含CPU运行用户程序代码时的执行
时间。
在对用户CPU 时间进行计算时需要用到以下几个重要的概念和参数。
(1)时钟周期(clock cycle,tick,clock tick,clock)。计算机执行一条指令的过程被分成
若干步骤来完成,每一步都要有相应的控制信号进行控制,这些控制信号何时发出、作用时
间多长,都要有相应的定时信号进行同步。因此,计算机必须能够产生同步的时钟定时信
号,也就是 CPU的主脉冲信号,其宽度称为时钟周期。
(2)时钟频率(clock rate)。CPU的主频就是主脉冲信号的时钟频率,它是CPU 时钟
周期的倒数。
(3)CPI(cycles per instruction)。CPI表示执行一条指令所需的时钟周期数。不同指
令的功能不同,所需的时钟周期数也可能不同,因此,对于一条特定指令而言,其CPI指执
<!-- page: 34 -->
计算机系统概述
行该条指令所需的时钟周期数,此时CPI是一个确定的值;对于一个程序或一台机器来说,
其综合CPI指该程序或该机器指令集中的所有指令执行所需的平均时钟周期数。
已知上述参数,可以通过以下公式来计算用户程序的 CPU执行时间:
用户 CPU 时间 =程序总时钟周期数÷时钟频率
=程序总时钟周期数×时钟周期
上述公式中,程序总时钟周期数可由程序所含指令条数和相应的CPI求得。
如果已知程序总的指令条数和综合CPI,则可用如下公式计算程序总时钟周期数:
程序总时钟周期数=程序总指令条数×CPI
如果已知程序中共有n种不同类型的指令,第i种指令的条数和CPI分别为C,和CPI,则
程序总时钟周期数-点(cPI×C)
程序的综合CPI也可由以下公式求得,其中,F,表示第i种指令在程序中所占的比例:
CPI=(CPI×F)=程序总时钟周期数÷程序总指令条数
因此,若已知程序综合CPI和指令条数,则可用下列公式计算 CPU时间:
用户 CPU 时间=程序总指令条数×CPI×时钟周期
有了用户CPU时间,就可以评判两台计算机性能的好坏。计算机的性能可以看成用户
CPU时间的倒数,因此,两台计算机性能之比就是用户 CPU 时间之比的倒数。若计算机
M1和M2的性能之比为n,则说明“计算机 M1的速度是计算机M2的速度的n倍”,也就
是说,“在计算机M2上执行程序的时间是在计算机M1上执行时间的n倍”。
用户CPU时间度量公式中的时钟周期、指令条数、CPI三个因素是相互制约的。因此,
对于解决同一个问题的不同程序,即使是在同一台计算机上,指令条数最少的程序也不一定
执行得最快,
例1.1 假设某个频繁使用的程序P在机器M1上运行需要10s,M1的时钟频率为
2GHz。设计人员想开发一台与M1具有相同ISA的新机器M2。采用新技术可使M2 的时
钟频率增加,但同时也会使CPI增加。假定程序P在M2上的时钟周期数是在M1上的1.5
倍,则M2的时钟频率至少达到多少才能使程序P在M2上的运行时间缩短为6s?
解:程序P在机器M1上的时钟周期数为用户CPU时间×时钟频率=10s×2GHz=
20GHz。因此,程序P在机器M2上的时钟周期数为1.5×20GHz=30GHz。要使程序P在
M2上运行时间缩短到6s,M2的时钟频率至少应为程序所含时钟周期数÷用户CPU 时
间=30G/6s=5GHz。
由此可见,M2的时钟频率是M1的2.5倍,但M2的速度却只是M1的1.67倍。
上述例子说明,时钟频率的提高可能会对 CPU结构带来影响,从而使其他性能指标降
低,因此,虽然提高时钟频率会加快CPU执行程序的速度,但不能保证执行速度有同倍数
的提高。
例1.2 假设计算机M的指令集中包含A、B、C三类指令,其CPI分别为1、2、4。程序
P在M上被编译成两个不同的目标代码序列 P1和P2,P1所含A、B、C三类指令的条数分
别为8、2、2,P2所含A、B、C三类指令的条数分别为2、5、3。请问:哪个代码序列执行速度
快?它们的CPI分别是多少?
第1章
17
<!-- page: 35 -->
计算机组成与系统结构(第3版)
18
解:P1和P2的指令条数分别为12和10,P2的指令条数更少。
P1的时钟周期数为8×1+2×2+2×4=20。
P2的时钟周期数为2×1+5×2+3×4=24。
因为两个指令代码序列在同一台机器上运行,所以时钟周期一样,故时钟数少的代码序
列所用时间短,执行速度更快。显然,P1比 P2 快。
P1的CPI为20/12=1.67;P2的CPI为24/10=2.4。
上述例子说明,指令条数少并不代表执行时间短,时钟频率高也不说明执行速度快。在
评价计算机性能时,仅考虑单个因素是不全面的,必须3个因素同时考虑。
1.5.2用指令执行速度进行性能评估
最早用来衡量计算机性能的指标是每秒钟完成单个运算指令的条数。当时大多数指令
的执行时间是相同的,并且加法指令能反映乘、除等运算性能,其他指令的时间大体与加法
指令相当,故加法指令的速度有一定的代表性。指令速度所用的计量单位为MIPS(million
instructions per second),其含义是平均每秒钟执行多少百万条指令。
早期还有一种类似于MIPS的性能估计方式,就是指令平均执行时间,也称等效指令速
度法或 Gibson混合法。设某类指令i在程序中所占比例为w,,执行时间为t,则等效指令
的执行时间为T=w?×t?+w?×t?+⋯+w。×t,(n为指令种类数)。若指令执行时间用
时钟周期数来衡量的话,则上式计算的结果就是CPI。对指令平均执行时间求倒数能够得
到 MIPS 值。
选取一组指令组合,使得得到的平均 CPI最小,由此得到的MIPS 就是峰值 MIPS
(peak MIPS)。有些制造商经常将峰值MIPS直接当作 MIPS,而实际上的性能要比标称的
性能差。
相对MIPS(relative MIPS)是根据某个公认的参考机型来定义的相应MIPS值,其值的
含义是被测机型相对于参考机型 MIPS的多少倍。
MIPS反映了机器执行定点指令的速度,但是,用MIPS来对不同的机器进行性能比较
有时是不准确或不客观的。因为不同机器的指令集不同,而且指令的功能也不同,也许在机
器 M1上某一条指令的功能,在机器M2上要用多条指令来完成,因此,同样的指令条数所
完成的功能可能完全不同;另外,不同机器的CPI和时钟周期也不同,因而同一条指令在不
同机器上所用的时间也不同。
与定点指令执行速度 MIPS相对应的用来表示浮点操作速度的指标是 MFLOPS
(million floating point operations per second)。它表示每秒钟所执行的浮点运算有多少百
万次,它是基于所完成的操作次数而不是指令数来衡量的。类似的衡量浮点操作速度的指标
还有 GFLOPS(10°次/s)、TFLOPS(10次/s)、PFLOPS(10次/s)和 EFLOPS(10*次/s)等。
1.5.3用基准程序进行性能评估
基准程序(benchmarks)是进行计算机性能评测的一种重要工具。基准程序是专门用
来进行性能评价的一组程序,能够很好地反映机器在运行实际负载时的性能,可以通过在不
同机器上运行相同的基准程序来比较在不同机器上的运行时间,从而评测其性能。基准程
序是一个测试程序集,由一组程序组成。例如,SPEC测试程序集是应用最广泛、也是最全
<!-- page: 36 -->
计算机系统概述
面的性能评测基准程序集。目前国际上流行的用于测试高性能计算机系统浮点性能的基准
程序是Linpack,它通过在高性能计算机上用高斯消元法求解N元一次稠密线性代数方程
组来测试和评价高性能计算机的浮点性能。
如果基准测试程序集中不同的程序在两台机器上测试得出的结论不同,则如何给出最
终的评价结论呢?例如,假定基准测试程序集包含有程序P1和 P2,程序 P1在机器 M1和
机器 M2上运行的时间分别是10s和2s,程序 P2在机器 M1和机器 M2 上运行的时间分别
是120s和600s,即对于P1,M2的速度是M1的5倍;而对于P2,M1的速度是M2的5倍,
那么,到底是M1还是M2更快呢?可以用所有程序的执行时间之和来比较,例如,P1和P2
在M1上的执行时间总和为130s,而在M2上的总时间为602s,故 M1比 M2 快。但通常不
这样做,而是采用执行时间的算术平均值或几何平均值来综合评价机器的性能。如果考虑
每个程序的使用频度而用加权平均的方式,结果会更准确。
1.5.4Amdahl 定律
阿姆达尔定律(Amdahl's law)是计算机系统设计方面重要的定量原则之一,于1967年
由IBM360系列机的主要设计者阿姆达尔首先提出。该定律的基本思想是,对系统中某个
硬件部分,或者软件中的某部分进行更新所带来的系统性能改进程度,取决于该硬件部件或
软件部分被使用的频率或其执行时间占总执行时间的比例。
阿姆达尔定律定义了增强或加速部分部件而获得的整体性能的改进程度,它有两种表
示形式:
改进后的执行时间=改进部分执行时间÷改进部分的改进倍数+
未改进部分执行时间
或
整体改进倍数=1/(改进部分执行时间比例÷改进部分的改进倍数+
未改进部分执行时间比例)
例1.3 假定计算机中的整数乘法器改进后可以加快10倍,若整数乘法指令在程序中
占40则整体性能能改进多少倍?若整数乘法指令在程序中所占比例达60?90则
整体性能分别能改进多少倍?
解:这个题目中改进部分就是整数乘法器,改进部分的改进倍数为10,整数乘法指令在
程序中占 40说明程序执行总时间中40??整数乘法器所用,其他部件所用时间
占60??
根据公式可得:整体改进倍数=1/(0.4/10+0.6)=1.56。
若整数乘法指令在程序中所占比例达60?90则整体改进倍数分别为
1/(0.6/10+0.4)=2.17和1/(0.9/10+0.1)=5.26。
从上述例子中可以看出,即使执行时间占总时间90??高频使用部件加快了10倍,所
带来的整体性能也只能加快5.26倍。想要改进计算机系统整体性能,不能仅加速部分部件
的速度,计算机系统整体性能还受慢速部件的制约。
若t表示改进部分执行时间比例,n为改进部分的改进倍数,则1-t为未改进部分执
行时间比例,整体改进倍数为p=1/(t/n+1-t)。
当1-t=0时,则最大加速比p=n;当t=0时,最小加速比p=1;当n→~时,极限加
第1章
19
<!-- page: 37 -->
计算机组成与系统结构(第3版)
20
速比p→1/(1-t),这就是加速比的上限。例如,某程序在某台计算机上运行所需时间是
100s,其中,80s用来执行乘法操作。要使该程序的性能是原来的5倍,若不改进其他部件
而仅改进乘法部件,则乘法部件的速度应该提高到原来的多少倍?
设乘法部件的速度应该提高到n倍,即改进后乘法操作执行时间为80s/n。要使程序
的性能提高到5倍,也就是程序的执行时间为原来的1/5,即20s。根据阿姆达尔定律,有
20s=80s/n+(100s-80s),显然,必须有80s/n=0,因而n→~。也就是说,当乘法运算时
间占80??,无论怎样对乘法部件进行改进,整体性能都不可能提高到原来的5倍。
对并行计算系统进行性能分析时,会广泛使用到阿姆达尔定律。阿姆达尔定律适用于
对特定任务的一部分进行优化的所有情况,可以是硬件优化,也可以是软件优化。例如,系
统中异常处理程序的执行时间只占整个程序运行时间非常少的一部分,即使对异常处理程
序进行了非常好的优化,它对整个系统带来的性能提升也几乎为零。
#### 1.6 本 章 小 结
计算机在控制器的控制下,能完成数据处理、数据存储和数据传输3个基本功能,它由
控制器、运算器、存储器、输入设备和输出设备组成。在计算机内部,指令和数据用二进制表
示,计算机采用“存储程序”方式进行工作。计算机系统采用层次结构,通过向上层用户提供
一个抽象的简洁接口而将较低层次的实现细节隐藏起来。在软件和硬件之间的抽象层就是
指令集体系结构(ISA)。
计算机完成一个任务的大致过程如下:用某种程序设计语言编制源程序;用语言处理
程序将源程序翻译成机器语言目标程序;将目标程序中的指令和数据装入内存,然后从第一
条指令开始执行,直到程序所含指令全部执行完。每条指令的执行包括取指令、指令译码、
取操作数、运算并送结果或读写主存等操作。
计算机系统基本性能指标包括响应(执行)时间和吞吐率。一般把程序的执行时间划分
成用户 CPU时间和其他时间。CPU的基本性能参数包括时钟周期(或主频)、CPI等,
MIPS反映定点指令执行速度,MFLOPS、GFLOPS等反映的是浮点数操作的执行速度。
习题
1.给出以下概念的解释说明。
中央处理器(CPU)
程序计数器(PC)
应用软件
机器语言
编译程序
最终用户
指令集体系结构(ISA)
吞吐率
时钟周期
MIPS
算术逻辑部件(ALU)
通用寄存器组(GPRs)
指令寄存器(IR)
主存储器(MM)
系统软件
高级编程语言
机器级语言
源程序
解释程序
汇编程序
系统管理员
应用程序员
微体系结构
透明性
用户 CPU 时间
系统性能
主频
CPI
MFLOPS(GFLOPS,TFLOPS,PFLOPS.EPLOPS)
控制器(CU)
总线
汇编语言
目标程序
语言处理程序
系统程序员
响应时间
CPU 性能
基准程序
<!-- page: 38 -->
计算机系统概述
2.简单回答下列问题。
(1)冯·诺依曼计算机由哪几部分组成?各部分的功能是什么?采用什么工作方式?
(2)摩尔定律的主要内容是什么?
(3)计算机系统的层次结构如何划分?计算机系统的用户可分为哪几类?每类用户工作在哪个层次?
(4)程序的CPI与哪些因素有关?
(5)为什么说性能指标 MIPS 不能很好地反映计算机的性能?
3.假定你的朋友不太懂计算机,请用简单通俗的语言给你的朋友介绍计算机系统是如何工作的。
4.你对计算机系统的哪些部分最熟悉,哪些部分最不熟悉?最想进一步了解细节的是哪些部分的
内容?
5.若有两个基准测试程序P1和P2在机器M1和M2上运行,假定M1和M2的价格分别是5000 元
和8000元,下表给出了 P1和 P2 在 M1和 M2上所花的时间和指令条数。
程 序
M1
M2
指令条数
执行时间/ms
指令条数
执行时间/ms
P1
200×10?
10000
150×10*
5000
P2
300×103
3
420×103
6
请回答下列问题:
(1)从P1的执行时间来看,哪台机器的速度快?快多少?对于P2呢?
(2)在M1上,P1和P2的指令执行速度分别是多少MIPS?P1和P2在M2上的指令执行速度又各是
多少?从指令执行速度来看,对于P2,哪台机器的速度快?快多少?
(3)假定M1和M2的时钟频率各是800MHz和1.2GHz,则在M1和M2上执行 P1时的平均时钟周
期数CPI各是多少?
(4)如果某个用户需要大量使用程序P1,并且该用户主要关心系统的响应时间而不是吞吐率,那么,
该用户需要大批购进机器时,应该选择M1还是M2?为什么?(提示:从性价比上考虑)
(5)如果另一个用户也需要购进大批机器,但该用户使用P1和 P2一样多,主要关心的也是响应时
间,那么,应该选择 M1还是 M2?为什么?
6.若机器 M1和M2具有相同的指令集,其时钟频率分别为1GHz和1.5GHz。在指令集中有5种不
同类型的指令A~E。下表给出了在 M1和 M2上每类指令的平均时钟周期数 CPI。
机器
A
B
C
D
E
M1
1
2
2
3
4
M2
2
2
4
5
6
请回答下列问题:
(1)M1和 M2 的峰值 MIPS各是多少?
(2)假定某程序P的指令序列中,5类指令具有完全相同的指令条数,则程序P在 M1和M2上运行
时,哪台机器更快?快多少?在 M1和M2上执行程序P时的平均时钟周期数CPI各是多少?
7.假设同一套指令集用不同的方法设计了两种机器M1和M2。机器M1的时钟周期为0.8ns,机器
M2的时钟周期为1.2ns。某个程序P在机器M1上运行时的CPI为4,在M2上的CPI为2。对于程序P
来说,哪台机器的执行速度更快?快多少?
8.假设机器M的时钟频率为4GHz,程序P在M上的指令条数为8×10°,其CPI为1,25,则P在M
上的执行时间是多少?若在机器M上从程序P开始启动到执行结束所需的时间是4s,则P占用的 CPU
时间的百分比是多少?
第1章
21
<!-- page: 39 -->
计算机组成与系统结构(第3版)
22
9.假定编译器对某段高级语言程序编译生成两种不同的指令序列S1和S2,在时钟频率为500MHz
的机器 M上运行,目标指令序列中用到的指令类型有 A、B,C和D四类。每类指令在 M上的CPI和两个
指令序列所用的各类指令条数如下表所示。
A
B
C
D
各指令的CPI
1
2
3
4
S1 的指令条数
5
2
2
1
S2 的指令条数
1
1
1
5
请问:S1和S2各有多少条指令?CPI各为多少?所含的时钟周期数各为多少?执行时间各为多少?
10,假定机器M的时钟频率为1.2GHz,程序P在机器M上的执行时间为12s。对P优化时,将其所
有的乘4指令都换成了一条左移两位的指令,得到优化后的程序P'。已知在M上乘法指令的CPI为5,左
移指令的CPI为2,P的执行时间是P'执行时间的1.2倍,则P中有多少条乘法指令被替换成了左移指令
被执行?
11.假定机器M在运行程序P的过程中,共执行了500×10°条浮点数指令、4000×10°条整数指令、
3000×10°条访存指令、1000×10°条分支指令,这4种指令的CPI分别是2、1、4、1。若要使程序P的执行
时间减少一半,则浮点指令的CPI应如何改进?若要使程序P的执行时间减少一半,则访存指令的CPI应
如何改进?若浮点数指令和整数指令的CPI减少20访存指令和分支指令的CPI减少40则程序P
的执行时间会减少多少?
<!-- page: 40 -->
第
章
2
数据的机器级表示
数据是计算机处理的对象。从不同的处理角度来看,数据有不同的表现形态。从外部
形式来看,计算机可处理数值、文字、图、声音、视频以及各种模拟信息。从算法描述的角度
来看,有图、表、树、队列、矩阵等结构类型的数据。从高级语言程序员的角度来看,有数组、
结构、指针、实数、整数、布尔数、字符和字符串等类型的数据。不管以什么形态出现,在计算
机内部数据最终都由机器指令来处理。
本章重点讨论计算机内部数据的机器级表示方式。主要内容包括进位记数制、二进制
定点数的编码表示、无符号整数和带符号整数的表示、IEEE754浮点数表示标准、西文字符
和汉字的编码表示、C语言中各种类型数据的表示和转换、数据的宽度和存放顺序。
2.1数制和编码
2.1.1信息的二进制编码
计算机中用来存储、运算和传输数据的部件的位数是有限的,因此现实世界中的感觉媒
体信息(如声音、文字、图画、活动图像等)由输入设备转化为二进制编码表示时,必须进行
“数字化编码”,将连续信息转换为离散的“样本”信息,然后对它们用“0”和“1”进行编码。
计算机内部采用二进制表示的原因有以下几点。
(1)二进制只有两种基本状态,使用有两个稳定状态的物理器件就可以表示二进制数
的每一位,而制造有两个稳定状态的物理器件要比制造有多个稳定状态的物理器件容易
得多。
(2)二进制的编码和运算规则都很简单,可用开关电路实现,简便易行。
(3)两个符号1和0正好与逻辑命题的两个值“真”和“假”相对应,为计算机中实现逻
辑运算和程序中的逻辑判断提供了便利的条件,特别是能通过逻辑门电路方便地实现算术
运算。
高级语言程序被转换为机器语言程序后,每条指令处理的操作数只能是简单的基本数
据类型。指令所处理的基本数据类型分为两种:数值型数据和非数值型数据。数值型数据
可用来表示数量的多少,可比较其大小,分为整数和实数,整数又分为无符号整数和带符号
整数。在计算机内部,整数用定点数表示,实数用浮点数表示。非数值型数据没有大小之
分,不表示数量的多少。
<!-- page: 41 -->
计算机组成与系统结构(第 3版)
24
表示一个数值数据要确定3个要素:进位记数制、定/浮点表示和编码规则。任何给定
的一个二进制0/1序列,在未确定它采用什么进位记数制、定点还是浮点表示以及编码表示
方法之前,它所代表的数值数据的值是无法确定的。
2.1.2进位记数制
日常生活中基本上都使用十进制数,其每个数位可用十个不同符号0,1,2,⋯,9来表示,
每个符号处在十进制数中不同位置时,所代表的数值不一样。例如,2585.62 代表的值是
(2585.62)?o=2×10?+5×102+8×101+5×10?+6×10-1+2×10~2
一般地,任意一个十进制数:
D=d,d-⋯d?do.d-id-⋯d (m,n为正整数)
其值应为
V(D)=d。×10*+d-×10*-1+⋯+d?×101+d?×10?+d-;×10-1+
d_z×10-2+⋯+d-.×10~"
类似地,二进制数的基数是2,每一位只能使用0和1表示,运算时采用“逢二进一”的规则,
第i位上的权是2'。例如,二进制数(100101.01):代表的值是
(100101.01)?=1×2?+0×2?+0×2?+1×22+0×21+1×2?+0×21+1×2-?
=(37.25)1o
扩展到一般情况,在R进制数字系统中,应采用R个基本符号(0,1,2,⋯,R—1)表示各位
上的数字,采用“逢R进一”的运算规则,对于每一个数位i,该位上的权为R'。R被称为该
数字系统的基数。
在计算机系统中使用的几种进位记数制有下列几种。
二进制R=2,基本符号为0和1。
八进制R=8,基本符号为0,1,2,3,4,5,6,7。
十进制R=10,基本符号为0,1,2,3,4,5,6,7,8.9。
十六进制R=16,基本符号为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
表2.1列出了二、八、十、十六进制4种进位记数制中各基本数之间的对应关系。
表2.1 4种进位制数之间的对应关系
二 进 制 数
八 进 制 数
十 进 制 数
十六进制数
0000
0001
0
1
0
1
0
1
0010
0011
0100
0101
0110
0111
1000
1001
2
3
4
5
6
7
10
11
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
1010
12
10
A
<!-- page: 42 -->
数据的机器级表示
续表
二 进 制 数
1011
八 进 制 数
13
十 进 制 数
11
十六进制数
B
1100
14
12
C
1101
15
13
D
1110
16
14
E
1111
17
15
F
从表2.1中可看出,十六进制的前10个数字与十进制中前10个数字相同,后6个基本
符号A,B,C,D,E,F的值分别为十进制的10,11,12,13,14,15。在书写时可使用后缀字母
标识该数的进位记数制,一般用B(binary)表示二进制,用O(octal)表示八进制,用D
(decimal)表示十进制(十进制数的后缀可以省略),而H(hexadecimal)则是十六进制数的
后缀。例如,二进制数10011B,十进制数56D或56,十六进制数308FH、3C.5H等。
计算机内部所有信息采用二进制编码表示。但在计算机外部,为了书写和阅读的方便,
大都采用八、十或十六进制表示形式。因此,计算机在数据输入后或输出前都必须实现这些
进位制数和二进制数之间的转换。
1.R 进制数转换成十进制数
任何一个R进制数转换成十进制数时,只要“按权展开”即可。
例2.1 将二进制数10101.01B转换成十进制数。
解:10101.01B=1×21+0×23+1×22+0×21+1×2°+0×2-1+1×2-2=21.25。
例2.2 将十六进制数3A.CH转换成十进制数。
解:3A.CH=3×161+10×16°+12×16~1=58.75。
2.十进制数转换成 R 进制数
任何一个十进制数转换成R进制数时,要将整数和小数部分分别进行转换。
1)整数部分的转换
整数部分的转换方法是“除基取余,上低下高”。也就是说,用要转换的十进制整数去除
以基数R,将得到的余数作为结果中各位的数字,直到上商为0为止。上面的余数(先得到
的余数)作为右边低位上的数位,下面的余数作为左边高位上的数位。
例2.3 将十进制整数135分别转换成八进制数和二进制数。
解:将135分别除以8和2,将每次的余数按从低位到高位的顺序排列如下:
余数 低位
2
135⋯⋯⋯⋯ 1
2
67⋯⋯⋯⋯ 1
余数 低位
2
33⋯⋯⋯⋯ 1
8
135⋯⋯⋯⋯⋯ 7
2
16⋯⋯⋯⋯0
8[
16⋯⋯⋯⋯⋯ 0
2|
8⋯⋯⋯⋯0
8
2⋯⋯⋯⋯⋯⋯ 2
高位
2
4⋯⋯⋯⋯0
0