计算机系统基础第二章习题参考答案-2018

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章习题答案9.在32位计算机中运行一个C语言程序,在该程序中出现了以下变量的初值,请写出它们对应的机器数(用十六进制表示)。(1)intx=-32768(2)shorty=522(3)unsignedz=65530(4)charc=’@’(5)floata=-1.1(6)doubleb=10.5本题要点:(1)数据要根据其类型要表示到足够的位数,如题(3),要写成0000FFFA,而不是FFFA(2)因为求机器数,所以负数要用补码表示(3)浮点数要用IEEE754标准编码,要注意是float还是double,分别编码:阶码位数、尾数位数、偏置常数各不相同。要表示到足够的位数。(4)16进制数后面要写H标识,二进制数后面要写B标识参考答案:(1)FFFF8000H解:-215=-1000000000000000B,负数符号位为1,int型整数表示为32位,故机器数为1…11000000000000000=FFFF8000H(2)020AH解:522=1000001010B,正数符号位为0,short型整数表示为16位,故机器数为0000001000001010=020AH(3)0000FFFAH解:65530=216-1-5=1111111111111010B,unsigned型整数表示为32位,无符号位(高位补0),故机器数为0000FFFAH(4)40H解:’@’的ASCII码是40H,char型表示为8位(5)BF8CCCCCH解:-1.1=-1.00011[0011]…B=-1.00011001100110011001100B,float型浮点数,阶码为127+0=01111111(8位),整数部1为隐藏位,负数符号位为1,故机器数为10111111100011001100110011001100=BF8CCCCCH(6)4025000000000000H解:10.5=1010.1B=1.0101B23(左规),Double型浮点数,阶码为1023+3=10000000010,整数部1为隐藏位,正数符号位为0,故机器数为0100000000100101[0000]=4025000000000000H10.在32位计算机中运行一个C语言程序,在该程序中出现了一些变量,已知这些变量在某一时刻的机器数(用十六进制表示)如下,请写出它们对应的真值。(1)intx:FFFF0006H(2)shorty:DFFCH(3)unsignedz:FFFFFFFAH(4)charc:2AH5)floata:C4480000H(6)doubleb:C024800000000000H本题要点(1)正确换算,结果最好表示成10进制(2)注意数据类型,准确区分有符号数和无符号数,有符号数最高位为1时为负数(3)正确解析浮点数参考答案:(1)-65530解:FFFF0006H=1…10000000000000110B,最高位为1,所以为负数,int型整数,所以真值为其余为取反加1,故x=-1111111111111010B=-(65535-5)=-65530(2)-8196解:DFFCH=1101111111111100B=-010000000000100B,最高位为1,所以为负数,short型整数,所以真值为其余为取反加1,故y=-(8192+4)=-8196(3)4294967290(或232-6)解:FFFFFFFAH=1…11010B,最高位虽然为1,但为unsigned型整数,所以解析为正整数,直接展开换算,故z=232-6=4294967290(4)字符’*’解:2AH=00101010B,故c的值是42,且c表示字符,故c为字符’*’(5)-800解:C4480000H=11000100010010000…0B,因为是float型浮点数数据,所以按照IEEE754标准解析。符号位为1,所以为负数;阶码为10001000,减掉偏置常数127后有:阶为136-127=9;尾数考虑隐藏位为:-1.1001B,故a=-1.1001B29=-1100100000B=-800(6)-10.25解:C024800000000000H=1100000000100100100000…0B,因为是double型浮点数,所以按照IEEE754标准解析。符号位为1,所以为负数;阶码为10000000010,,减掉偏置常数1023后有:阶为1026-1023=3;尾数考虑隐藏位为1.01001B,故b=-1.01001B23=1010.01B=-10.2517.以下是一个由反汇编器生成的一段针对某个小端方式处理器的机器级代码表示文本,其中,最左边是指令所在的存储单元地址,冒号后面是指令的机器码,最右边是指令的汇编语言表示,即汇编指令。已知反汇编输出中的机器数都采用补码表示,请给出指令代码中划线部分表示的机器数对应的真值。80483d2:81ecb8010000sub&0x1b8,%esp80483d8:8b5508mov0x8(%ebp),%edx80483db:83c214add$0x14,%edx80483de:8b8558feffffmov0xfffffe58(%ebp),%eax80483e4:0302add(%edx),%eax80483e6:898574feffffmov%eax,0xfffffe74(%ebp)80483ec:8b5508mov0x8(%ebp),%edx80483ef:83c244add$0x44,%edx80483f2:8b85c8feffffmov0xfffffec8(%ebp),%eax80483f8:8902mov%eax,(%edx)80483fa:8b4510mov0x10(%ebp),%eax80483fd:03450cadd0xc(%ebp),%eax8048400:8985ecfeffffmov%eax,0xfffffeec(%ebp)8048406:8b4508mov0x8(%ebp),%eax8048409:83c020add$0x20,%eax本题要点:(1)注意数据是小端方式,所以要注意字节的编排,如5字节:b8010000,表示的数是“000001b8”。(2)上述指令都是整数运算指令,所以所有的数据均按整数换算(3)正确换算,不要计算错了参考答案:(1)440解:b8010000:4字节,但考虑小端数据格式,所以机器数为000001B8H,符号位为0,所以为正整数,直接展开,真值为+110111000B=440(2)20解:14:单字节,机器数即为14H,符号位为0,解析为正整数,所以真值为+10100B=20(3)-424解:58feffff:4字节,考虑小端数据格式,所以机器数为FFFFFE58H,符号位为1,所以为负数,真值为其余位取反加1,所以真值为:-110101000B=-424(4)-396解:74feffff:4字节,考虑小端数据格式,所以机器数为FFFFFE74H,符号位为1,所以为负数,真值为其余位取反加1,所以真值为:-110001100B=-396(5)68解:44:单字节,机器数即为44H,符号位为0,解析为正整数,所以真值为+1000100B=68(6)-312解:c8feffff:4字节,考虑小端数据格式,所以机器数为FFFFFEC8H,符号位为1,所以为负数,真值为其余位取反加1,所以真值为:-110001100B=-312(7)16解:10:单字节,机器数即为10H,符号位为0,解析为正整数,所以真值为+10000B=16(8)12解:0c:单字节,机器数即为0CH,符号位为0,解析为正整数,所以真值为:+1100B=12(9)-276解:ecfeffff:4字节,考虑小端数据格式,所以机器数为FFFFFEECH,符号位为1,所以为负数,真值为其余位取反加1,所以真值为:-100010100B=-276(10)32解:20:单字节,机器数即为20H,符号位为0,解析为正整数,所以真值为+00100000B=3221.以下是两段C语言代码,函数arith()是直接用C语言写的,而optarith()是对arith()函数以某个确定的M和N编译生成的机器代码反编译生成的。根据optarith(),可以推断函数arith()中M和N的值各是多少?#defineM#defineNintarith(intx,inty){intresult=0;result=x*M+y/N;returnresult;}intoptarith(intx,inty){intt=x;x=4;x–=t;if(y0)y+=3;y2;returnx+y;}本题要点:直接用C语言写的源代码和反编译后的代码形式上不一致,所以要从功能的角度分析,而不能只从字面看。参考答案:答案:M=15,N=4解:(1)对照源代码语句中的“x*M”和反编译代码中的“intt=x;x=4;x-=t;”,可以分析出,反编译代码是将x乘以4(x=4),然后减去x的原值(t是x的备份,x-=t相当于减去x的原值),所以这三条语句实现的功能是:x乘15。因此,M等于15;(2)对照源代码语句中的“y/N”与反编译代码中的“if(y0)y+=3;y2;”,可以分析出,“y2”实现了y除以4的功能,因此N是4。而比较迷惑的是第一句“if(y0)y+=3;”什么意思呢:其意图主要在于:对y=–1时进行调整。若不调整,则–12=–1(-1的补码表示是FFFFFFFFH,移位后还是FFFFFFFFH,其值还是-1),而–1/4=0(数学定义),所以两者不等,不符合数学定义;故做上述调整,调整后–1+3=2,22=0,两者相等,正确。24.设一个变量的值为4098,要求分别用32位补码整数和IEEE754单精度浮点格式表示该变量(结果用十六进制形式表示),并说明哪段二进制位序列在两种表示中完全相同,为什么会相同?本题要点:(1)按照32位补码整数和IEEE754单精度浮点格式准确表示4098的值,尤其是浮点数位串不要搞错了。(2)找出位串相同的部分,为什么相同主要是4098数比较小,在32位补码整数(且为正数)和23位浮点尾数部分都能精确表示(没有舍入),所以对应相等(除了浮点数最高位,因为浮点数有1个隐藏位)。参考答案:解:4098=+1000000000010B(整数)=+1.00000000001×212(规格化浮点数)(1)32位2-补码形式为:00000000000000000001000000000010(即00001002H)(2)IEEE754单精度格式为:01000101100000000001000000000000(即45801000H)对照(1)和(2)的位串,粗体部分的12位位串为相同部分。注:浮点数中粗体部分为除隐藏位外的有效数字,只考虑这12位,阶码中最后一个1不考虑。28.假定在一个程序中定义了变量x、y和i,其中,x和y是float型变量(用IEEE754单精度浮点数表示),i是16位short型变量(用补码表示)。程序执行到某一时刻,x=–0.125、y=7.5、i=100,它们都被写到了主存(按字节编址),其地址分别是100,108和112。请分别画出在大端机器和小端机器上变量x、y和i中每个字节在主存的存放位置。本题要点:(1)正确区分大端、小端数据表示,注意字节顺序。(2)将x、y和i根据其类型正确换算成相应的位串(机器数),尤其是浮点数,要会转换成二进制。注意:长度不同,x和y是32位,i是16位。参考答案:解:首先,将x、y和i换算成正确的机器数(1)–0.125=–0.001B=–1.0×2-3,负浮点数,符号位为1,阶码为-3(加偏置常数127后为124),尾数为.0,所以,x在机器内部的机器数为:10111110000…0(BE000000H)(2)7.5=+111.1B=+1.111×22,正浮点数,阶码为2(加偏置常数127后为1

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功