复旦大学计算机体系结构期末考试B卷_第1页
复旦大学计算机体系结构期末考试B卷_第2页
复旦大学计算机体系结构期末考试B卷_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、。 PAGE 10(1)考虑下面这个for循环的汇编代码looper:pushl%ebpmovl%esp, %ebp subl$16, %esp movl$0, movl$0, jmp.L2.L4:movl-4(%ebp), sall$2, %eaxaddl12(%ebp), movl(%eax), %eax cmpl-8(%ebp), jle.L3movl-4(%ebp), sall$2, %eaxaddl12(%ebp), movl(%eax), %eax movl%eax, .L3:addl$1, addl$2, .L2:movl-4(%ebp), cmpl8(%ebp), %eax j

2、l .L4movl-8(%ebp), %eaxleave ret根据以上的汇编代码,完成相应的for循环C程序代码(注意该程序有返回值)。int looper(int n, int *a)int i; int x=0;for(i=0;ix)/2分x=ai;/ 2分x+;/1分 return x;/ 1分(2)根据已有的结构(structure)和联合C函数voidtest(int i,s2*bp)的IA32 汇编代码,推断出结构s1的完整声明和s2中CNT根据推断结果以及IA32汇编代码,推断补齐相应的C程序代码。下面是要使用到的结构和联合的声明,函数voidtest(inti, s2 IA3

3、2汇编代码。struct s1 struct s2 int left; s1 aCNT;int right;union u1 b;union;u1 struct s1 *h; struct s2 *i; char j;char c;void test(int i, s2 *bp)int n=bp-left+bp-right; s1 *ap=&bp-ai;ap-xap-idx=n;其IA32汇编代码为:test:pushl%ebpmovl%esp, subl$16, %espmovl12(%ebp), %eax movl(%eax), %edx movl12(%ebp), %eax movl18

4、4(%eax), leal(%edx,%eax), movl%eax, -4(%ebp) movl12(%ebp), %eax leal4(%eax), %ecx movl8(%ebp), %edx movl%edx, %eaxsall$2, %eax addl%edx, sall$2, %eaxleal(%ecx,%eax), movl%eax, -8(%ebp) movl-8(%ebp), %eax movl(%eax), %edxmovl movl movl leave ret-8(%ebp), %eax-4(%ebp), %ecx%ecx, 4(%eax,%edx,4)1. CNT=9

5、/2分写出s1的完整声明。 struct s1int idx;/2分int x4;/2分 对于下面左边的每个IA32C程序代码(意下面的函数都需要返回值)proc1:pushl%ebpchar proc1(struct s2 *x)movl%esp, %ebp movl8(%ebp), %eaxreturnx-b.j;movzbl 188(%eax), %eax(4分)popl ret%ebp proc2:pushl%ebpmovl%esp, %ebp subl$16, %esp movl8(%ebp), movl188(%eax), movl(%eax), %eax movl%eax, -4

6、(%ebp) movl8(%ebp), %eax movl188(%eax), movl184(%eax), addl%eax, -4(%ebp) movl-4(%ebp), %eax leaveretproc3:pushl%ebpmovl%esp, %ebpint proc2(struct s2 *x)int a = x-b.i-left;/2分a += x-b.i-right;/3分return a;(3分)subl movlmovl$16, %esp 8(%ebp), (%eax), %eaxchar proc3(union u1 *x)movl188(%eax), %eax movzb

7、l192(%eax), %eaxmovb%al, -1(%ebp)char a = x-i-b.i-c;/2分movl8(%ebp), %eaxa &= x-i-b.j/3分return a;movl(%eax), %eax(3分)movzbl188(%eax), %eax andb%al, -1(%ebp) movzbl-1(%ebp), %eaxleaveret(3)Pentium III的算术操作性能如下:操作整数加法执行时间1发射时间1整数乘法41整数除法3636浮点加法31浮点乘法52浮点除法3838加载或存储(高速缓存命中)考虑如下程序:11int loop(int *a, int

8、 x, intn)int y=x*x; int i;for(i=0;in;i+)x=y*ai;取i,取y,再发射,共3个时钟周期;这里没迭代。return x*y;用GCC进行编译,得到如下汇编代码:.L2:movl %ecx,%eaximull (%esi,%edx,4),%eax incl %edxcmpl %ebx,%edx jl .L2每次循环需要的时钟周期数是多少?3.0/4分通过使用编译选项-funroll -loops,我们可以在编译时进行4方法可以加快loop的运行,解释原因。y和ai的load需要的1钟周期。/6分(4)考虑如下一段程序:int counter=2;void

9、handler(int sig)counter+;int count()signal(SIGCHLD, inti, status;for(i=1; i0)counter+;while (waitpid(-1,&status,0)0); return counter;counter+=i;return counter;int main()printf(counter =%dn, count(); exit(0);问:是/6分如果第一问答案为”是”,给出此固定输出,如果答案为”否”输出。counter7counter7 counter5/4分请写出一段代码,父进程利用fork()函数创建一个子进程

10、之后挂起,子进程什么也不做,睡眠5s后通过kill函数发送SIGALRM信号给父进程,再睡眠3s,然后以状态1退出。父进程在信号处理程序中,回收子进程,打印子进程的退出状态,之后以状态0退出。注意程序中用到的系统调用函数不必到的头文件已经给出。#include #include #include #include #include void handler(int sig)int status;waitpid(-1,&status,0); printf(%dn,WEXITSTATUS(status); exit(0);int main()pid_t pid; signal(SIGALRM, i

11、f(fork()=0)pid=getppid(); sleep(5); kill(pid,SIGALRM); sleep(3);exit(1);pause();sigal()-handler()2分fork() 1分kill()1分waitpid()1sleep()1分。0WEXITSTATUS 1分exit() 1分程序结构 2分(6)下面这个问题考察你如何将虚拟地址翻译成物理地址。我们做出如下假设: 这个存储器是按字节寻址的;存储器访问是针对1字节的字的(不是4字节的字虚拟地址是16位长的;物理地址是13页面大小是1024TLB 是八路组相联,总共16个条目;缓存是物理寻址、直接映射的,行

12、大小为4字节,2路相联总共16个组。在下面的表格中,所有的数字均为16进制。TLBIndexTLBIndexTagPPN094Valid1Page TableVPNPPNValidVPNPPNValid01122122110010351057113101030183004100C10120008100670031007500220006110010150115002311221034113400420146005711520061016400730176008511811094019200A301A500B201B700C501C600D601D200E111E300F001F10。 PAGE

13、 4IndexTag ValidByte0123TagValidByte01230191991123110009911231111504F22EC112F155590B4121B1000204080B10103050730608406B29C1208406B29C4070436D8F09050436D8F0950D1363200781E1A1B2C4DE6110A2376831001BB773300716111C211331E100C00F2-way Set Associative Cache00(1)2-way Set Associative Cache00VPOVPN虚拟页面偏移虚拟页号T

14、LBITLBTLBTTLB1514131211109876543210VPN: 15-10VPO: 9-0/2分TLBT: 15-11TLBI: 10/1分(2)围。PPOPPN物理页面偏移物理页号CO 缓冲块内的字节偏移量CI高速缓存索引CT高速缓存标记1211109876543210PPN: 12-10PPO: 9-0/2分CT: 12-5CI: 4-2 CO: 1-0/2分TLB(用16进制表示LTB是否发生了缺页,是否发生缓存不命中。如果发生缓存不命中,在“返回的缓存字节”一栏中填“-”。如果发生缺页,在“PPN”栏中填入“-”CD(1) 虚拟地址: 0 x81B6虚拟地址格式(bit)1514131211109876543210101000000110110110地址翻译/各1分参数参数值VPN0 x20TLB索

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论