《计算机系统基础试卷(共8页).docx》由会员分享,可在线阅读,更多相关《计算机系统基础试卷(共8页).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上装订线班级:姓名:学号:计算机系统基础试卷 (编号:A)注意事项:1本试卷适用于2018级软件工程专业学生使用。2本试卷共8页,满分100分,答题时间90分钟。3考试采用开卷形式。题号一二三四总分得分得分评卷人一、单项选择题(在每小题给出的4个选项中,只有一项是正确的,将正确选项的字母标号填写在“单项选择题答题表”相应题号下的空格中。本大题共10道小题,每小题1分,共10分)单项选择题答题表题号12345678910答案1. 108对应的十六进制形式是(_)。A5CH B63HC6CH DB4H2. C语言程序段:short si=8196; unsigned sho
2、rt usi=si; 运行后,usi的值是(_)。A57339 B57340C8196 D345723. 采用IEEE 754单精度浮点数格式表示1028的结果(十六进制)是(_)。AH BC4C04000HCCH D44C04000H4. 若已知int i=12345, float f=1.2345e3,则在一个32位机器中执行下列表达式时,结果为“假”的是(_)。Af=(float)(int)f Bf=(float)(double)fCi=(int)(double)i Di=(int)(float)i5. 假定某计算机按字节采用小端方式编址,一个float型变量x的地址为0xffffc00
3、0,x=H,则在内存单元0xffffc001中存放的二进制串是(_)。AB B10100BC0101B DB6. 假设变量x的位数为n(n=8),使得x的最高有效字节不变,其余各位全变为0的C语言表达式为(_)。A(x&0xFF)(n-8) B(x&0xFF)(n-8)(n-8)(n-8) D(x(n-8)7. 若在一个8位计算机中完成x+2y的运算,假定变量x和y的机器数用补码表示为x补=44H,y补= DCH,则x+2y的机器数及相应的溢出标志OF分别是(_)。A32H、1 BFCH、1CFCH、0 D32H、08. 对于IEEE 754单精度浮点数加减运算,只要对阶时得到的两个阶之差的绝
4、对值|E|大于等于(_),就无需继续进行后续处理,此时,运算结果直接取阶大的那个数。A25 B128C127 D239. 假设Reax=0000B160H,Rebx=00FF0110H,执行指令“imulw %bx”后,通用寄存器的内容变化情况为(_)。AReax=FFAC7600H,其余不变 BReax=H,Rdx=FFACHCReax=00BC7600,其余不变 DReax=H,Rdx=00BCH10.假定全局数组a的声明为char *a8,a的首地址为0x80498c0,i 在ECX中,现要将ai取到EAX相应宽度的寄存器中,则所用的汇编指令是( )。Amov 0x80498c0( ,
5、%ecx), %ahBmov (0x80498c0, %ecx), %ahCmov 0x80498c0( , %ecx, 4), %eaxDmov (0x80498c0, %ecx, 4), %eax得分评卷人二、填空题(将第1120小题的答案填写在题目中的横线上。本大题共10道小题、每小题2分,共20分)10. 程序P在时钟频率为2GHz的机器M1机器上需要运行10秒,在具有与M1相同的ISA上的运行时间是6秒。如果P在M2上的CPI是在M1上的CPI的1.5倍,则M2的时钟频率至少应是(5)GHz。11. 在采用16位补码的计算机中,十进制数-2047的机器数是(_F801_H)。12.
6、在IA32计算机中,执行C语言的printf(uv=%un,(unsigned short)(-32768); 语句后,将在终端显示uv=(_32768_)。13. 在IA32中,与用补码表示的十进制数v(v1-31101-3(x(1)2-21110-221. 下表是5位补码加法的实际例子,填写表中空白单元格(数据采用二进制)。情况分为4种:1-正溢出,2-正确正值,3-正确负值,4-负溢出。xyx+yx+情况101001000100101411000110001000030001000101001112011000010010000122. 一个在 32 位计算机中运行的C 语言程序中对变量
7、设置了初值,写出它们对应的十六进制机器数,要求简要说明理由。(1)int x=-32768 (2)short y=532 (3)unsigned z=65527(4)char c=A (5)float a=-1.75(1)FFFF8000H(1分)-215=-1000 0000 0000 0000B,负数符号位为 1,int 型整数表示为 32 位,故机器数为 11 1000 0000 0000 0000=FFFF8000H (1分)(2)0224H (1分)532=10 0001 0100B,正数符号位为 0,short 型整数表示为 16 位,故机器数为 0000 0010 0001 01
8、00=0214H(1分)(3)0000FFF7H(1分)65527=216-1-8=1111 1111 1111 0111B,unsigned 型整数表示为 32 位,无符号位(高位补 0),故机器数为 0000FFF7H(4)41H(1分)A的 ASCII 码是 41H,char 型表示为 8 位(1分)(5)BFE00000H(1分)-1.75=-1.11B=-1.1120,阶码为0+ 127=B, 数符为 1,尾数小数部分0.11,所以 -1.75 表示为 1110 0000 0000 0000 0000 0000, 用十六进制表 示为 BFE00000H(1分)23. 采用IEEE 7
9、54 单精度浮点数,按照对阶、尾数相加、规格化、舍入、溢出判断等5个步骤计算0.875+(-33.75)的值。(1) 将0.875、-33.75转化为二进制的机器表示:(3分)x=0.875=0.111B=(1.110.0)22-1,y=-33.75=-.11B=(-l.0)25,用IEEE754标准单精度格式表示为:x浮=0 .0,y浮=1 .0用Ex、Ey分别表示x浮、y浮的阶码,Mx,My分别表示x浮、y浮的尾数,则有:Ex=,Mx=0l.0,Ey=,My=11.0,尾数Mx,My的小数点前面的左起第1位为符号位,第2位是隐藏位“1”。(2)对阶 (2分)(E)补=Ex+-Ey补= 01
10、11 1110 + 0111 1100=1111 l010(mod 28)=-6, 故Ex向Ey对齐Ex=Ey=,Mx,=00.0, 即将x的尾数右移6位,符号不变,数值高位 0,隐藏位右移到小数点后面,并保留最后移出的两位。(3)尾数相加(2分)Mb=Mx+My=00.00+11.0=11.0 00(3)规格化 (1分)所得尾数已经是规格化的形式(数值部分最高位为 1)。(4)舍入 (1分)将结果的尾数Mb中最后两位附加位进行舍入得:11.0(5)溢出判断(1分)上述阶码计算和调整过程中,没有发生”阶码上溢”和阶码下溢 的问题最终结果为 Eb= ,Mb=l(l).0,即:(-1.)225=-
11、32.875得分评卷人四、综合题(通过分析或计算详细解答第2527小题。本大题共3道小题,每小题10分,共30分)24. 假设某个C语言函数func的原型声明如下:void func(int *xptr, int *yptr, int *zptr);函数func的过程体对应的机器级代码用AT&T汇编形式表示如下:(1) movl10(%ebp), %eax(2) movl14(%ebp), %ebx(3) movl 18(%ebp), %ecx(4) movl(%ebx), %edx(5) movl(%ecx), %esi(6) movl (%eax), %edi(7) movl%edi, (
12、%ebx)(8) movl%edx, (%ecx)(9) movl %esi, (%eax)解答下列问题:(1) 在过程体开始时三个入口参数对应实参所存放的存储单元地址是什么?(提示:当前栈帧底部由帧指针寄存器EBP指示)(2) 根据上述机器级代码写出函数func的C语言代码。(1) xptr对应实参所存放的存储单元地址:Rebp+10;(1分)yptrr对应实参所存放的存储单元地址:Rebp+14;(1分)zptr对应实参所存放的存储单元地址:Rebp+18。(1分)(2)函数func的C语言代码如下: void func(int *xptr, int *yptr, int *zptr) (
13、1分)int tempx=*xptr; (1分)int tempy=*yptr; (1分)int tempz=*zptr; (1分)*yptr=tempx; (1分)*zptr = tempy; (1分)*xptr = tempz; (1分)25. 已知函数comp的C语言代码及其过程体对应的汇编代码如图1所示,C语言的if-else语句对应的AT&T汇编代码结构如图2所示。给出每条汇编指令的注释,并说明为什么C代码只有一个if语句而汇编代码有两条条件转移指令。1void comp(char x, int *p)2 3 if (p & x=0,则转.L1执行addb %dl, (%eax) /
14、MReaxMReax+Rdl,即*p+=x.L1: 因为C语言if语句中的条件表达式可以对多个条件进行逻辑运算,而汇编代码中一条指令只能进行一种逻辑运算,并且在每条逻辑运算指令生成的标志都是存放在同一个EFLAGS寄存器中,所以,最好在一条逻辑指令后跟一条条件转移指令,把EFLAGS中标志用完,然后再执行另一次逻辑判断并根据条件进行转移的操作。(4分)26. 图3a与图3b分别表示了一个C语言程序的两个源文件main.c与procl.c 的内容。试分析回答:(1)main.c与procl.c中出现的符号哪些是强符号?哪些是弱符号?各变量的存储空间分配在ELF哪个节中?各占几个字节?(2) 程序
15、执行后的打印结果是什么?分别画出执行第7行的 proc 1 ()函数调用前、后,在地址 &x和 &z 中存放的内容。1 #include 2 unsigned x=3527; 3 short y, z=120 ; 4 void proc1 (void) ; 5 void main () 6 7 proc1() ; 8 printf(x=%u, z=%dn, x, z); 9 return 0;10 1 double x;2 3 void proc1()4 5 x=-2.5;6 图3a main.c 文件 图3b proc1.c 文件(1) main.c 中强符号有x 、z 、main,弱符号有
16、y 和proc1; proc1.c 中的强符号有proc1,弱符号有x 。根据多重定义符号处理规则2 (若一个符号被说明为一次强符号定义和多次弱符号定义,则按强符号定义为准),符号x的定义以main.c 中的强符号x 为准,即在main.o的data 节中分配x,占4个字节,随后是另一个强符号z占两个字节, x 和z 都属于. data节,随后是bss 节,其中只有一个变量y,按4 字节对齐,因此,在z 后面有两个字节空闲,再后面是变量y 的空间。(2)程序执行时,在调用proc1() 函数之前, &x 中存放的是x 的机器数: H,随后两个字节(地址为&z) 存放z,即0002H,再后面两个
17、字节空闲,如图3a 所示。在调用proc l() 函数以后,因为proc1() 中的符号x 是弱符号,所以, x 的定义以main中的强符号x 为准,执行x=-1.5 后,便将-2.5 的机器数BFF80000 H 存放到了&x 开始的8 个字节中。即&x 中为其低32 位的H,&z 中为高32 位的BFF80000H中的低16 位OOOOH,z 后面的两个空闲字节中为高16 位BFF8H,如图3b 所示。因此, 最终打印的结果为x=0,z=0。01230123&z0200&z0000F8BF&x01010000&x00000000图3a) proc1函数执行后图3b) proc1函数执行后专心-专注-专业