(1) n=0时,n-1的机器表示为FFFF FFFFH,而变量i的int类型所能表示的最大真值为7FFF FFFFH,则i++无论如何执行,也无法大于n-1,发生死循环。i和n定义为int型,f1不会出现死循环,因为i的机器表示可以达到8000 0000H,此时真值小于-1。
(2) f1(23)返回值为,机器表示为00FF FFFFH,f2(23)的返回值的机器表示4B7F FFFFH,返回值是相等的。
(3) f1(24)的返回真值为,机器表示为01FF FFFFH,而f2(24)的机器表示为4B8F FFFFH,而尾数的精度此时已经不够了,此时最后一位尾数表示
,而阶码表示的真值为
,最小可以表示的尾数为2,此时最后一个1发生了丢失。
(4) 因为此时f1(31)的机器表示为FFFF FFFFH,表示的真值为-1。要使f1(n)的返回值与f(n)相等,则最大的n为30
(5) f2(127)的机器数为7F80 0000H,阶码为128,而尾数为全0,对应的值为正无穷,若要使得f2(n)的结果不溢出,最大的n为127,要使f2(n)的结果精确,最大的n为23。(由之前题目得到结论)
(1) 计算机M是CISC的,因为指令码长度是不定长的。
(2) 按字节编址,指令占用的地址空间为00401020H-0040107FH,107FH-1020H+1H=5FH+1H=60H,一共占用6*16B=96B。
(3) n-1的机器数表示为FFFF FFFFH,i=0时,cmp指令执行后,i-n+1=0000 0000H-FFFF FFFFH=0000 0001H,最高位未发生进位,而减法sub为1,进行异或操作后得到CF=1。
(4) 在f2中不可以使用shl指令实现power*2,因为float型的数要实现power*2应当使阶码值+1而非使机器数左移。