1、1第一题 选择题(每小题2分,共34分)(每小题有一个或多个正确答案)(ch2, kaigui)1、变量x的值为0x01234567,地址 unsigned y = 0x00000001;int z = 0x80000001;以下表达式正确的是( )A. (-x) yC. (z 1.00y = 1.01100 half way and up1.102(ch3, yingfei)4、在完成Bomb Lab的时候,通常先执行gdb bomb启动调试,然后执行 _ explode_bomb命令以防引爆炸弹,之后在进行其他必要的设置后,最后执行_命令以便开始执行程序。上述两个空格对应的命令是( )A.
2、 st, ru B. br, go C. br, ru D. st, go答案:c说明:根据之前的讨论,出一道题目检查同学们是否自己做过lab(ch3, yingfei)5、已知函数int x( int n ) return n*_; 对应的汇编代码如下:lea (%rdi, %rdi, 4), %rdilea (%rdi, %rdi, 1), %eaxretq请问横线上的数字应该是( )A. 4 B. 5 C. 2 D. 10答案:D说明:此题目考察对于乘法的转换,难度较低,适合出选择题。还可以把乘法换成除法,就可以出大题或者简答题。(ch3, Guangyu)6、32位x86计算机、Win
3、dows操作系统下定义的一个structure S包含三个部分: double a,int b, char c, 请问S在内存空间中最多和最少分别能占据多少个字节(32位Windows系统按1、4、8的原则对齐char、int、double)?答:( )A. 16, 13B. 16, 16C. 24, 13D. 24, 16答案:D 考虑对齐,windows double按8字节对齐,最长 c, a, b,最短 a,b,c(ch3, Guangyu)7、x86体系结构的内存寻址方式有多种格式,请问下列哪些指令是正确的:( )A. movl $34, (%eax)B. movl (%eax),
4、%eaxC. movl $23, 10(%edx, %eax)D. movl (%eax), 8(%ebx)答案:ABC,寻址不支持内存到内存的访问(ch3, Guangyu)8、 x86体系结构中,下面哪些选项是错误的?答:( )A. leal指令只能够用来计算内存地址B. x86_64机器可以使用栈来给函数传递参数C. 在一个函数内,改变任一寄存器的值之前必须先将其原始数据保存在栈内D. 判断两个寄存器中值大小关系,只需要SF(符号)和ZF(零)两个conditional code答案:ACD3(ch4, Jiangfang)9、下面对RISC和CISC的描述中,错误的是:( )A. CI
5、SC指令系统中的指令数目较多,有些指令的执行周期很长;而RISC指令系统中通常指令数目较少,指令的执行周期都较短。B. CISC指令系统中的指令编码长度不固定;RISC指令系统中的指令编码长度固定,这样使得RISC机器可以获得了更短的代码长度。C. CISC指令系统支持多种寻址方式,RISC指令系统支持的寻址方式较少。D. CISC机器中的寄存器数目较少,函数参数必须通过栈来进行传递;RISC机器中的寄存器数目较多,可以通过寄存器来传递参数,避免了不必要的存储访问。答案:BD(ch4, Jiangfang)10、下面对流水线技术的描述,正确的是:( )A. 流水线技术不仅能够提高执行指令的吞吐
6、率,还能减少单条指令的执行时间。B. 不断加深流水线级数,总能获得性能上的提升。C. 流水级划分应尽量均衡,吞吐率会受到最慢的流水级影响。D. 指令间的数据相关可能会引发数据冒险,可以通过数据转发或暂停流水线来解决。答案:CD(ch4, Junlin)(11-13)、在教材所描述的流水线处理器(the PIPE processor)上分别运行如下四段Y86程序代码。请分析其中数据冒险的具体情况,并回答后续3个小题。#Program 1:mrmovl 8(%ebx), %edxrmmovl %edx, 16(%ecx) #Program 2:mrmovl 8(%ebx), %edxnoprmmo
7、vl %edx, 16(%ecx)#Program 3:mrmovl 8(%ebx), %edxnopnoprmmovl %edx, 16(%ecx) #Program 4:mrmovl 8(%ebx), %edxnopnopnoprmmovl %edx, 16(%ecx)11、对于每段程序,请指出是否会因为数据冒险导致流水线停顿(Stall)。Program 1:( ),Program 2:( ),Program 3:( ),Program 4:( );A. Stall B. No-Stall答案: A, B, B, B12、对于每段程序,请指出流水线处理器内是否会产生数据转发(Forwar
8、ding)。Program 1:( ),Program 2:( ),Program 3:( ),Program 4:( );A. Forwarding B. No-Forwarding答案: A,A,A,B13、对于每段程序,请指出流水线处理器内使用哪个信号进行数据转发,如果不进行数4据转发,则用none表示。Program 1:( ),Program 2:( ),Program 3:( ),Program 4:( );A. m_valM B. W_valM C. none答案: A,A,B,C(ch5, Guangyu)14、下面哪些选项是错误的?答:( )A. 同一个任务采用时间复杂度为O
9、(logN)算法一定比采用复杂度为O(N)算法的执行时间短B. 编译器进行程序优化时,总是可以使用算数结合律来减少计算量C. 增大循环展开(loop unrolling)的级数,有可能降低程序的执行性能(即增加执行时间)D. 分支预测时,“总是预测不跳转”(branch not taken)一定比“总是预测跳转”(branch taken)预测准确率高答案:ABD(ch5, Guangyu)15、以下哪些程序优化编译器总是可以自动进行?(假设int i, int j, int AN, int BN, int m都是局部变量,N是一个整数型常量,int foo(int) 是一个函数)答:( )优
10、化前 优化后A. for (j = 0 ; j y, then -x v, then -u -v答案True or false 原因或举出反例if x y, then -x v, then -u -v F U=2, v=12)请按IEEE浮点标准的单精度浮点数表示下表中的数值,首先写出形如(-1)s M2E的表达式,然后给出十六进制的表示。(每格1分)注:单精度浮点数的字段划分如下:符号位(s):1-bit;阶码字段(exp):8-bit;小数字段(frac):23-bit;偏置值(bias):127。Value (-1)s M2E,1* Based on the shift-and-subt
11、ract algorithm for computing integer* square root from Guy L. Steele.*/* int_sqrt - rough approximation to sqrt* x: integer of which to calculate the sqrt* A very rough approximation to the sqrt() function.*/unsigned long int_sqrt(unsigned long x) unsigned long b, m, y = 0;if (x = 1;if (x = b) x -=
12、b;y += m;m = 2;return y;1)在64位的机器上BITS_PER_LONG的定义为long类型的二进制位数,它是多少位?2)填写下面反汇编中的缺失的内容::4004c4: push %rbp4004c5: mov %rsp,%rbp4004c8: mov %rdi,-0x28(%rbp)4004cc: movq (1) ,-0x8(%rbp)4004d4: cmpq $0x1,-0x28(%rbp)4004d9: ja (2) 4004db: mov -0x28(%rbp),%rax4004df: jmp (3) 4004e1: movl $0x0,-0x10(%rbp)4
13、004e8: movl (4) ,-0xc(%rbp)4004ef: jmp (5) 4004f1: mov -0x10(%rbp),%rax74004f5: mov -0x8(%rbp),%rdx4004f9: lea (6) ,%rax4004fd: mov %rax,-0x18(%rbp)400501: shrq -0x8(%rbp)400505: mov -0x28(%rbp),%rax400509: cmp -0x18(%rbp),%rax40050d: jb (7) 40050f: mov -0x18(%rbp),%rax400513: sub %rax,-0x28(%rbp)40
14、0517: mov -0x10(%rbp),%rax40051b: add %rax,-0x8(%rbp)40051f: shrq (8) ,-0x10(%rbp)400524: cmpq $0x0,-0x10(%rbp)400529: jne (9) 40052b: mov -0x8(%rbp), (10)40052f: leaveq400530: retq答案:1、 答:642、:4004c4: push %rbp4004c5: mov %rsp,%rbp4004c8: mov %rdi,-0x28(%rbp)4004cc: movq $0x0,-0x8(%rbp)4004d4: cmpq
15、 $0x1,-0x28(%rbp)4004d9: ja 4004e1 4004db: mov -0x28(%rbp),%rax4004df: jmp 40052f 4004e1: movl $0x0,-0x10(%rbp)4004e8: movl $0x40000000,-0xc(%rbp)4004ef: jmp 400524 4004f1: mov -0x10(%rbp),%rax4004f5: mov -0x8(%rbp),%rdx4004f9: lea (%rdx,%rax,1),%rax4004fd: mov %rax,-0x18(%rbp)400501: shrq -0x8(%rbp
16、)400505: mov -0x28(%rbp),%rax400509: cmp -0x18(%rbp),%rax40050d: jb 40051f 40050f: mov -0x18(%rbp),%rax400513: sub %rax,-0x28(%rbp)400517: mov -0x10(%rbp),%rax40051b: add %rax,-0x8(%rbp)40051f: shrq $0x2,-0x10(%rbp)400524: cmpq $0x0,-0x10(%rbp)400529: jne 4004f1 40052b: mov -0x8(%rbp),%rax40052f: le
17、aveq400530: retq8(ch3 Xuetao)第四题(10分)阅读下面的汇编代码::4004c4: push %rbp4004c5: mov %rsp,%rbp4004c8: sub $0x10,%rsp4004cc: mov %edi,-0x4(%rbp)4004cf: cmpl $0x1,-0x4(%rbp)4004d3: ja 4004dc 4004d5: mov $0x1,%eax4004da: jmp 40052d 4004dc: mov -0x4(%rbp),%eax4004df: and $0x1,%eax4004e2: test %eax,%eax4004e4: j
18、ne 4004f5 4004e6: mov 0x200440(%rip),%eax # 60092c 4004ec: add $0x1,%eax4004ef: mov %eax,0x200437(%rip) # 60092c 4004f5: mov -0x4(%rbp),%eax4004f8: and $0x1,%eax4004fb: test %al,%al4004fd: je 40050e 4004ff: mov 0x20042b(%rip),%eax # 600930 400505: add $0x1,%eax400508: mov %eax,0x200422(%rip) # 60093
19、0 40050e: mov -0x4(%rbp),%eax400511: sub $0x1,%eax400514: mov %eax,%edi400516: callq 4004c4 40051b: mov 0x20040f(%rip),%edx # 600930 400521: lea (%rax,%rdx,1),%edx400524: mov 0x200402(%rip),%eax # 60092c 40052a: lea (%rdx,%rax,1),%eax40052d: leaveq40052e: retq1)程序main() unsigned int n;for (n=1; n4-1
20、728-169-01)如果Cache的结构是directedmapped(S=4,E=1),如下图所示,请在下图空白处填入,访问上述数据序列访问后Cache的状态。(注:TAG使用二进制格式,V=1代表数据有效,用A-B表示地址A到B之间对应的数据)(4分)V TAG DATA1 00 M0-11 00 M2-31 00 M4-502)如果cache的结构如下图所示既(S=2,E=2), 请填入访问后的状态 (2分)V TAG DATA V TAG DATA1 000 M0-1 1 010 M8-91 000 M2-3 0在这种情况下,数据访问一共产生了多少次Miss_6_ (1分)(顺序 M-M-M-M-M-H-H-M)3)如果cache的结构变成 (S=1, E=4),最终存储在Cache里面的数据有那些(注:只需要填写数据部分,顺序不限)?_, _, _, _ (2分)M0-1, M8-9, M16-17, M2-3说明:1-4-1728-169-0 (后四个不重复数据)