文章目录
- 【计算机组成原理2017年真题43题-13分】
- 【第一步:信息提取】
- 【第二步:具体解答】
- 【计算机组成原理2017年真题44题-10分】
- 【第一步:信息提取】
- 【第二步:具体解答】
【计算机组成原理2017年真题43题-13分】
(1)当n=0时,
f
1
f_1
f1会出现死循环,为什么?若将
f
1
f_1
f1中的变量i和n都定义为int型,则fl是否还会出现死循环?为什么?
(2) f 1 ( 23 ) f_1(23) f1(23)和 f 2 ( 23 ) f_2(23) f2(23)的返回值是否相等?机器数各是什么(用十六进制表示)?
(3) f 1 ( 24 ) f_1(24) f1(24)和 f 2 ( 24 ) f_2(24) f2(24)的返回值分别为33554431和33554432.0,为什么不相等?
(4) f ( 31 ) = 2 32 − 1 f(31)=2^{32}-1 f(31)=232−1,而 f 1 ( 31 ) f_1(31) f1(31)的返回值却为 -1,为什么?若使 f 1 ( n ) f_1(n) f1(n) 的返回值与 f ( n ) f(n) f(n)相等,则最大的n是多少?
(5) f 2 ( 127 ) f_2(127) f2(127)的机器数为7F80 0000H,对应的值是什么?若使 f 2 ( n ) f_2(n) f2(n)的结果不溢出,则最大的n是多少?若使 f 2 ( n ) f_2(n) f2(n)的结果精确(无舍入),则最大的n是多少?
【第一步:信息提取】
unsigned:0000 0000H~FFFF FFFFH,是无符号数;int 是有符号数
IEEE 754单精度标准:1位符号位;8位阶乘;23位位数,隐藏了1位
【第二步:具体解答】
第一小题:
(1)当n=0时, f 1 f_1 f1会出现死循环,为什么?
由于i和n是unsigned型的,故"i<=n-1"是无符号数比较,n=0时,n-1的机器数为全1,值是 2 32 − 1 2^{32}-1 232−1,为unsigned 型可表示的最大数,条件"i<=n-1"永真,因此出现死循环。
(2)若将 f 1 f_1 f1中的变量i和n都定义为int型,则 f 1 f_1 f1是否还会出现死循环?为什么?
若i和n改为int类型,则不会出现死循环。
因为"i<=n-1"是带符号整数比较, n=0时,n-1的值是-1,当i=0时条件“i<=n-1”不成立,此时退出for循环。
第二小题:
(1) f 1 ( 23 ) f_1(23) f1(23)和 f 2 ( 23 ) f_2(23) f2(23)的返回值是否相等?
f 1 ( 23 ) f_1(23) f1(23)与 f 2 ( 23 ) f_2(23) f2(23) 的返回值相等。
f ( 23 ) = 2 23 + 1 − 1 = 2 24 − 1 f(23)=2^{23+1}-1=2^{24}-1 f(23)=223+1−1=224−1,它的二进制形式是24个1,int占32位,没有溢出。
float有1个符号位,8个指数位,23个底数位,23个底数位可以表示24位的底数。所以两者返回值相等
(2)机器数各是什么(用十六进制表示)?
f1(23)的机器数是00FF FFFFH。
f2(23)的机器数是 4B7F FFFFH。
显而易见前者是24个1,即 ( 000000011111111111111111111111 ) 2 (000 0000 111 1111 1111 1111 1111 1111)_2 (000000011111111111111111111111)2,
后者符号位是0,即 ( 01001011011111111111111111111111 ) 2 (0100 1011 0111 1111 1111 1111 1111 1111)_2 (01001011011111111111111111111111)2 指数位为 23 + 127 = ( 150 ) 10 = ( 10010110 ) 2 23+127=(150)_{10}=(10010110)_2 23+127=(150)10=(10010110)2,底数位是 ( 11111111111111111111111 ) 2 (111 1111 1111 1111 1111 1111)_2 (11111111111111111111111)2
注:IEEE 754单精度标准: 符号位( 1. 底数) ∗ 2 指数 符号位 (1.底数)* 2^{指数} 符号位(1.底数)∗2指数
指数=实际乘+127,即实际乘=指数-127
第三小题:
(1) f 1 ( 24 ) f_1(24) f1(24)和 f 2 ( 24 ) f_2(24) f2(24)的返回值分别为33554431和33554432.0,为什么不相等?
当n=24时,f(24)=1 1111 1111 1111 1111 1111 1111 B,而float型数只有24位有效位,舍入后数值增大,所以f2(24)比 f1(24)大 1。
第四小题:
(1) f ( 31 ) = 2 32 − 1 f(31)=2^{32}-1 f(31)=232−1,而 f 1 ( 31 ) f_1(31) f1(31)的返回值却为 -1,为什么?
显然f(31)已超出了int型数据的表示范围,用 f 1 ( 31 ) f_1(31) f1(31)实现时得到的机器数为32个1,作为int型数解释时其值为-1,即f1(31)的返回值为-1。
(2)若使 f 1 ( n ) f_1(n) f1(n) 的返回值与 f ( n ) f(n) f(n)相等,则最大的n是多少?
因为int型最大可表示数是0后面加31个1,故使 f 1 ( n ) f_1(n) f1(n)的返回值与f(n)相等的最大n值是30。
第五小题:
(1) f 2 ( 127 ) f_2(127) f2(127)的机器数为7F80 0000H,对应的值是什么?
IEEE 754标准用"阶码全1、尾数全0"表示无穷大。f2返回值为float型,机器数7F800000H 对应的值是+∞
(2)若使 f 2 ( n ) f_2(n) f2(n)的结果不溢出,则最大的n是多少?
当n= 126时, f ( 126 ) = 2 127 − 1 = 1.1 … 1 × 2 126 f(126)=2^{127}-1= 1.1…1×2^{126} f(126)=2127−1=1.1…1×2126,对应阶码为 127 + 126 = 253 127+126=253 127+126=253,尾数部分舍入后阶码加1,最终阶码为254,是IEEE 754单精度格式表示的最大阶码。故使2结果不溢出的最大n值为126。
(3)若使 f 2 ( n ) f_2(n) f2(n)的结果精确(无舍入),则最大的n是多少?
当n=23时,f(23)为24位1,float型数有24位有效位,所以不需舍入,结果精确。故使f2获得精确结果的最大n值为23。
【计算机组成原理2017年真题44题-10分】
(1)计算机M是RISC还是CISC?为什么?
(2)f1的机器指令代码共占多少字节?要求给出计算过程。
(3)第20条指令cmp通过i减n-1实现对i和n-1的比较。执行fl(0)过程中当i=0时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程。
(4)第23条指令sh通过左移操作实现了 p o w e r ∗ 2 power * 2 power∗2 运算,在2中能否也用shl指令实现 p o w e r ∗ 2 power * 2 power∗2 ?为什么?
【第一步:信息提取】
- 机器指令长短不一——采用的是CISC
- 字节编址
- 从开始到结束 0040 107FH - 0040 1020H + 1 = 0000 0060H
【第二步:具体解答】
第一小题:
(1)计算机M是RISC还是CISC?为什么?
M为CISC。
M的指令长短不一,不符合RISC指令系统特点。
第二小题:
(1)f1的机器指令代码共占多少字节?要求给出计算过程。
如信息提取中③, ( 60 ) 16 = ( 96 ) 10 (60)_{16}=(96)_{10} (60)16=(96)10 ,所以96个字节
第三小题:
(1)第20条指令cmp通过i减n-1实现对i和n-1的比较。执行f1(0)过程中当i=0时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程。
CF=1。
cmp指令实现i与n-1的比较功能,进行的是减法运算。
在执行 f 1 ( 0 ) f_1(0) f1(0)过程中,n=0,当i=0时,i= 0000 0000H,且n - 1 = FFFF FFFFH。
因此,当执行第20条指令时,在补码加/减运算器中执行“0减FFFF FFFFH"的操作,即0000 0000H + 0000 0000H + 1=00000001H
此时,进位输出C=0,减法运算时的借位标志CF=C异或1。
第四小题:
(1)第23条指令sh通过左移操作实现了 p o w e r ∗ 2 power * 2 power∗2 运算,在2中能否也用shl指令实现 p o w e r ∗ 2 power * 2 power∗2 ?为什么?
f2中不能用shl指令实现 power * 2。
因为shl指令用来将一个整数的所有有效数位作为一个整体左移;而2中的变量power是float 型,其机器数中不包含最高有效数位,但包含了阶码部分,将其作为一个整体左移时并不能实现“乘2”的功能,因而f2中不能用shl指令实现power*2。
浮点数运算比整型运算要复杂,耗时也较长。