最新复旦大学计算机体系结构期末考试B卷.docx
- 文档编号:25151016
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:15
- 大小:19.59KB
最新复旦大学计算机体系结构期末考试B卷.docx
《最新复旦大学计算机体系结构期末考试B卷.docx》由会员分享,可在线阅读,更多相关《最新复旦大学计算机体系结构期末考试B卷.docx(15页珍藏版)》请在冰豆网上搜索。
最新复旦大学计算机体系结构期末考试B卷
(1)考虑下面这个for循环的汇编代码
looper:
pushl%ebp
movl%esp,%ebp
subl$16,%esp
movl$0,-8(%ebp)
movl$0,-4(%ebp)
jmp.L2
.L4:
movl-4(%ebp),%eax
sall$2,%eax
addl12(%ebp),%eax
movl(%eax),%eax
cmpl-8(%ebp),%eax
jle.L3
movl-4(%ebp),%eax
sall$2,%eax
addl12(%ebp),%eax
movl(%eax),%eax
movl%eax,-8(%ebp)
.L3:
addl$1,-8(%ebp)
addl$2,-4(%ebp)
.L2:
movl-4(%ebp),%eax
cmpl8(%ebp),%eax
jl.L4
movl-8(%ebp),%eax
leave
ret
根据以上的汇编代码,完成相应的for循环C程序代码(注意该程序有返回值)。
intlooper(intn,int*a)
{
inti;
intx=0;
for(i=0;i {______________________________________ if(a[i]>x)//2分 x=a[i];//2分 x++;//1分 }______________________________________ returnx;//1分 } (2) 根据已有的结构(structure)和联合(union)的声明以及C函数voidtest(inti,s2*bp)的IA32汇编代码,推断出结构s1的完整声明和s2中CNT的值;之后再根据推断结果以及IA32汇编代码,推断补齐相应的C程序代码。 下面是要使用到的结构和联合的声明,函数voidtest(inti,s2*bp)及其IA32汇编代码。 structs1{structs2{unionu1{ intleft;structs1*h; s1a[CNT];structs2*i; intright;charj; };unionu1b;}; charc; }; voidtest(inti,s2*bp) { intn=bp->left+bp->right; s1*ap=&bp->a[i]; ap->x[ap->idx]=n; } 其IA32汇编代码为: test: pushl%ebp movl%esp,%ebp subl$16,%esp movl12(%ebp),%eax movl(%eax),%edx movl12(%ebp),%eax movl184(%eax),%eax leal(%edx,%eax),%eax movl%eax,-4(%ebp) movl12(%ebp),%eax leal4(%eax),%ecx movl8(%ebp),%edx movl%edx,%eax sall$2,%eax addl%edx,%eax sall$2,%eax leal(%ecx,%eax),%eax movl%eax,-8(%ebp) movl-8(%ebp),%eax movl(%eax),%edx movl-8(%ebp),%eax movl-4(%ebp),%ecx movl%ecx,4(%eax,%edx,4) leave ret 1.CNT=___9_____//2分 2.写出s1的完整声明。 ____structs1{ intidx;//2分 intx[4];//2分 ___}____________________________________ _______________________________________ _______________________________________ 3.对于下面左边的每个IA32汇编代码,请在右边补全相应的C程序代码。 (请注意下面的函数都需要返回值) A.proc1: pushl%ebp movl%esp,%ebp movl8(%ebp),%eax movzbl188(%eax),%eax popl%ebp ret charproc1(structs2*x) { ______________________________ returnx->b.j; (4分) ______________________________ ______________________________ ______________________________ } B.proc2: pushl%ebp movl%esp,%ebp subl$16,%esp movl8(%ebp),%eax movl188(%eax),%eax movl(%eax),%eax movl%eax,-4(%ebp) movl8(%ebp),%eax movl188(%eax),%eax movl184(%eax),%eax addl%eax,-4(%ebp) movl-4(%ebp),%eax leave ret C.proc3: pushl%ebp movl%esp,%ebp subl$16,%esp movl8(%ebp),%eax movl(%eax),%eax movl188(%eax),%eax movzbl192(%eax),%eax movb%al,-1(%ebp) movl8(%ebp),%eax movl(%eax),%eax movzbl188(%eax),%eax andb%al,-1(%ebp) movzbl-1(%ebp),%eax leave ret intproc2(structs2*x) { ______________________________ inta=x->b.i->left;//2分 a+=x->b.i->right;//3分 returna; (3分) ______________________________ ______________________________ } charproc3(unionu1*x) { ______________________________ chara=x->i->b.i->c;//2分 a&=x->i->b.j//3分 returna; (3分) ______________________________ ______________________________ } (3)PentiumIII的算术操作性能如下: 操作 执行时间 发射时间 整数加法 1 1 整数乘法 4 1 整数除法 36 36 浮点加法 3 1 浮点乘法 5 2 浮点除法 38 38 加载或存储(高速缓存命中) 1 1 考虑如下程序: intloop(int*a,intx,intn) { inty=x*x; inti; for(i=0;i { x=y*a[i];取i,取y,再发射,共3个时钟周期;这里没迭代。 returnx*y; } } 用GCC进行编译,得到如下汇编代码: .L2: movl%ecx,%eax imull(%esi,%edx,4),%eax incl%edx cmpl%ebx,%edx jl.L2 1.每次循环需要的时钟周期数是多少? 3.0//4分 2.通过使用编译选项-funroll-loops,我们可以在编译时进行4路循环展开,此方法可以加快loop的运行,解释原因。 程序的循环次数变少,降低了循环的开销。 即减少了y和a[i]的load需要的1个时钟周期。 //6分 (4) 考虑如下一段程序: intcounter=2; voidhandler(intsig) { counter++; } intcount() { signal(SIGCHLD,handler); inti,status; for(i=1;i<=2;i++) { counter++; if(fork()>0) { counter++; while(waitpid(-1,&status,0)>0); returncounter; } counter+=i; } returncounter; } intmain() { printf("counter=%d\n",count()); exit(0); } 问: 1.程序是否总是有相同输出? 是//6分 2.如果第一问答案为”是”,给出此固定输出,如果答案为”否”,则列出所有可能输出。 counter=7 counter=7 counter=5//4分 (5)请写出一段代码,父进程利用fork()函数创建一个子进程之后挂起,子进程什么也不做,睡眠5s后通过kill函数发送SIGALRM信号给父进程,再睡眠3s,然后以状态1退出。 父进程在信号处理程序中,回收子进程,打印子进程的退出状态,之后以状态0退出。 注意程序中用到的系统调用函数不必进行错误检查,用到的头文件已经给出。 #include #include #include #include #include voidhandler(intsig) { intstatus; waitpid(-1,&status,0); printf("%d\n",WEXITSTATUS(status)); exit(0); } intmain() { pid_tpid; signal(SIGALRM,handler); if(fork()==0) { pid=getppid(); sleep(5); kill(pid,SIGALRM); sleep(3); exit (1); } pause(); } sigal()-handler()2分 fork()1分 kill()1分 waitpid()1分 sleep()1分 WEXITSTATUS1分 exit()1分 程序结构2分 (6) 下面这个问题考察你如何将虚拟地址翻译成物理地址。 我们做出如下假设: 这个存储器是按字节寻址的; 存储器访问是针对1字节的字的(不是4字节的字); 虚拟地址是16位长的; 物理地址是13位长的; 页面大小是1024字节; TLB是八路组相联,总共16个条目; 缓存是物理寻址、直接映射的,行大小为4字节,2路相联总共16个组。 在下面的表格中,所有的数字均为16进制。 TLB的内容和页表的前32页如下: TLB Index TagPPNValid 0 0941 1221 1001 0351 0571 1310 1030 1830 1 0410 0C10 1200 0810 0670 0310 0750 0220 PageTable VPNPPNValid VPNPPNValid 0061 0150 0231 0341 0420 0571 0610 0730 0851 0940 0A30 0B20 0C50 0D60 0E11 0F00 1001 1150 1221 1340 1460 1520 1640 1760 1811 1920 1A50 1B70 1C60 1D20 1E30 1F10 2-waySetAssociativeCache Index TagValid Byte0123 TagValid Byte0123 0 1 2 3 4 5 6 7 191 150 1B1 060 §8-4情境因素与消费者行为2004年3月20日070 0D1 110 161 调研课题: 99112311 根本不知道□4F22EC11 00020408 8406B29C 1.www。 cer。 net/artide/2004021313098897。 shtml。 436D8F09 3、你是否购买过DIY手工艺制品? 36320078 A2376831 (一)大学生的消费购买能力分析11C21133 3、消费“多样化”000 我们长期呆在校园里,没有工作收入一直都是靠父母生活,在资金方面会表现的比较棘手。 不过,对我们的小店来说还好,因为我们不需要太多的投资。 2F1 据调查,大学生对此类消费的态度是: 手工艺制品消费比“负债”消费更得人心。 0B1 二、资料网址: 120 050 1E1 001 1E1 99112311 55590B41 01030507 8406B29C 436D8F09 A1B2C4DE BB773300 00C00F00 1. (1)下面需要你描述虚拟地址的格式。 请在表格下方标注出下列符号的表示范围。 如果其中有符号在本题中不需要用到,请不要标注。 VPO虚拟页面偏移 VPN虚拟页号 TLBITLB索引号 TLBTTLB标记 1514131211109876543210 VPN: [15-10]VPO: [9-0]//2分 TLBT: [15-11]TLBI: [10]//1分 (2)下面需要你描述物理地址的格式。 请在表格下方标注下列符号的表示范围。 PPO物理页面偏移 PPN物理页号 CO缓冲块内的字节偏移量 CI高速缓存索引 CT高速缓存标记 1211109876543210 PPN: [12-10]PPO: [9-0]//2分 CT: [12-5]CI: [4-2]CO: [1-0]//2分 2.对于给定的虚拟地址,请你指出被访问的TLB条目,相对应的物理地址,以及返回的高速缓存字节值(用16进制表示)。 并且请指出是否发生了LTB不命中,是否发生了缺页,是否发生缓存不命中。 如果发生缓存不命中,在“返回的缓存字节”一栏中填“-”。 如果发生缺页,在“PPN”栏中填入“-”并且空着C和D部分。 (1)虚拟地址: 0x81B6 A.虚拟地址格式(每格填一个bit) 1514131211109876543210//1分 1 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 B.地址翻译//各1分 参数 值 VPN 0x20 TLB索引 0x0 TLB标记 0x10 TLB命中? (Y/N) Y 缺页? (Y/N) N PPN 0x0 C.物理地址格式(每格填一个bit)//1分 1211109876543210 0 0 0 0 1 1 0 1 1 0 1 1 0 D.物理存储器引用//各1分 参数 值 字节偏移 0x2 缓存索引 0x5 缓存标记 0x0D 缓存命中? (Y/N) Y 返回的缓存字节 0x00 第七题 1.双层循环//10分, 2.//10分 算法改进//5分 循环展开等方法//5分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 复旦大学 计算机体系结构 期末考试
![提示](https://static.bdocx.com/images/bang_tan.gif)