深入理解计算机系统家庭作业汇总 20135301&&20135328
深入理解计算机系统家庭作业
深入理解计算机系统第二章家庭作业
题目2.64
题目要求
判断二进制数偶数位是否有任意一位位为1,有的话返回1,否则返回0
解题过程
int any_even_one(unsigned x)
{
	return !!(x & (0x55555555));
}
题目2.65
题目要求
写出代码实现如下函数:
int even_ones(unsigned x);
解题过程
分析:因为本题受12次操作的限制,故不能按位计算是否该位为1。考虑到本题只需要判断1的个数的奇偶性,而并不需要计算一共有多少个1。那么我们考虑到如果能去掉偶数个1对结果并不会产生影响,这需要快速的去掉偶数个1。因为异或运算恰好可以把同为1时变成0。然后在利用分治的方法,整体异或来减少操作次数。
操作:
1.前16和后16位对齐后异或,那么这时候原来32位的奇偶性和目前异或出来的16位的结果一致。
2.同理前8位和后8位对齐异或。
3.同理前4位和后4位对齐异或。
4.同理前2位和后2位对齐异或。
5.同理前1位和后1位对齐异或。
最后只需要判断最后那一位上是1还是 0即可。
int even_ones(unsigned x)
{
	unsigned  y = x >> 16; x ^= y;
	y = x >> 8; x ^= y;
	y = x >> 4; x ^= y;
	y = x >> 2; x ^= y;
	y = x >> 1; x ^= y;   
	return !(x & 1);  
}
深入理解计算机系统第三章家庭作业
题目3.66
题目要求
你负责维护一个大型的C 程序时,遇到如下代码:
 1 typedef struct {
 2   int left;
 3   a_struct a[CNT];
 4   int right;
 5 } b_struct;
 6
 7 void test(int i, b_struct *bp)
 8 {
 9   int n = bp->left + bp->right;
10   a_struct *ap = &bp->a[i];
11   ap->x[ap->idx] = n;
12 }
通过反汇编代码得出CNT的值和a_struct的完整声明:
 1 000000 <test>:
 2 0:55push   				%ebp
 3 1:89 e5 					mov%esp,%ebp
 4 3:53						push   %ebx
 5 4:8b 45 08  				mov0x8(%ebp),%eax ;%eax=i
 6 7:8b 4d 0c  				mov0xc(%ebp),%ecx ;%ecx=bp
 7 a:8b d8 1c  				imul   	$0x1c,%eax,%ebx ;%ebx=i*28
 8 d:8d 14 c5 00 00 00 00   lea0x0(,%eax,8),%edx ;%edx=8i;
 9 14:29 c2					sub%eax,%edx ;%edx=7i;
10 16:03 54 19 04  			add0x4(%ecx,%ebx,1),%edx ;%edx=7i+[bp+28i+4]
11 1a:8b 81 c8 00 00 00		mov%0xc8(%ecx),%eax ;%eax=right
12 20:03 01					add(%ecx),%eax  ;%eax=right+left
13 22:89 44 91 08  			mov%eax,0x8(%ecx,%edx,4) ;[bp+4*7i+4*[bp+28i+4]+0x8]=%eax
14 26:5b   					pop%ebx
15 27:5d   					pop%ebp
16 28:c3   					ret
解题过程
A CNT=7
B
    struct a_struct
	{
   		int idx;
   		int x[6];
    }
下面是简单的分析
5 i -->eax
6 bp -->ecx
7 28i-->ebx
8 8i-->edx
9 7i-->edx
10(28i+bp+4)+7i-->edx 对于C中第10行,我觉得这一行有点难理解,(28i+bp+4)是直接计算出了ap->idx的值,因为a_struct只包含7个int值,所以加7i,就计算出了ap->x[ap->idx]距离a[CNT]的起始地址有多少个int
11 *(bp+0xc8)-->eax
12 bp+(bp+0xc8) -->eax 对应C第9行
13 eax-->(edx4+bp+8) 对应C第11行。
3.68
解题过程
void good_echo()
{
char c;
int x = 0;
while( x=getchar(), x!='\n' && x!=EOF)
{
putchar(x);
}
}
深入理解计算机系统第六章家庭作业
6.35
解题过程
对于写分配的高速缓存,每次写不命中时,需要读取数据到高速缓存中。
该高速缓存只有2个组,对于相同的i,j,src[i][j]和dst[i][j]对应相同的组。
src[0] src[2] 对应组0;
src[1] src[3] 对于组1。
dst同src。
dst数组
 	列0	列1	列2	列3
行0	m	h	m	h
行1	m	m	h	m
行2	m	h	m	h
行3	m	m	h	m
src数组
 	列0	列1	列2	列3
行0	m	m	m	m
行1	m	m	m	m
行2	m	m	m	m
行3	m	m	m	m
6.36
解题过程
缓存能完全容得下两个数组,所以只会出现冷不命中。
dst数组
 	列0	列1	列2	列3
行0	m	h	h	h
行1	m	h	h	h
行2	m	h	h	h
行3	m	h	h	h
src数组
 	列0	列1	列2	列3
行0	m	h	h	h
行1	m	h	h	h
行2	m	h	h	h
行3	m	h	h	h
参考资料
1.esp和ebp的区别:http://blog.csdn.net/running_noodle/article/details/2838679
2.寄存器详解:http://wenku.baidu.com/link?url=m0isHkEhemZjFVVi46QzXgfkBdBUaF3FBMTpblEV1bSuWNjgjVHiDjXHXK330-4JuysvJFZE0tSybe6UgP7sQFtjfWDSMAAlrF4gj833uOW
3.http://wenku.baidu.com/link?url=ZwLOIG3ha7OK1EYU1n3jLKR9zD158bEgXEBu5RteaqhyFa_rntWK5pJ5CjIQoR-bhKNZRjBsHtrEq8JlZeSoSfeXD8bwMJBa4MLGd1Qbiam
4.http://blog.csdn.net/yang_f_k/article/details/9007303
深入理解计算机系统家庭作业汇总 20135301&&20135328的更多相关文章
- 深入理解计算机系统大作业——程序人生P2P
		
程序人生P2P 前言 经过一个学期的快乐学习(折磨),计算机系统终于结课了,自认为对于计算机系统算是有了粗浅的理解.为了庆祝结课,顺带总结自己的学习经历(只是为了完成大作业),便通过一个简单的程序he ...
 - CSAPP深入理解计算机系统(第二版)第三章家庭作业答案
		
<深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...
 - 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework
		
8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +---------------- ...
 - 深入理解计算机系统_3e 第四章家庭作业(部分) CS:APP3e chapter 4 homework
		
4.52以后的题目中的代码大多是书上的,如需使用请联系 randy.bryant@cs.cmu.edu 更新:关于编译Y86-64中遇到的问题,可以参考一下CS:APP3e 深入理解计算机系统_3e ...
 - 深入理解计算机系统_3e 第九章家庭作业 CS:APP3e chapter 9 homework
		
9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +--------------------- ...
 - 《深入理解计算机系统》【PDF】下载
		
<深入理解计算机系统>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382303 内容提要 本书主要介绍了计算机系统的基本概念,包 ...
 - 读完了csapp(中文名:深入理解计算机系统)
		
上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一 ...
 - 深入理解计算机系统项目之 Shell Lab
		
博客中的文章均为meelo原创,请务必以链接形式注明本文地址 Shell Lab是CMU计算机系统入门课程的一个实验.在这个实验里你需要实现一个shell,shell是用户与计算机的交互界面.普通意义 ...
 - 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游
		
本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...
 
随机推荐
- JMeter源码集成到Eclipse
			
由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具或对于想了解JMeter插件开发或二次开发的童鞋们来说,读读JMeter的源码估计是必不可少的,所 ...
 - 一个人的Scrum之准备工作
			
在2012年里,我想自己一人去实践一下Scrum,所以才有了这么一个开篇. 最近看了<轻松的Scrum之旅>这本书,感觉对我非常有益.书中像讲述故事一样描述了在执行Scrum过程中的点点滴 ...
 - Oracle定义varchar2()类型存储汉字的长度问题
			
varchar2最大是4000字节,那么就看你的oracle字符集:(select userenv('language') from dual;)如果字符集是16位编码的,ZHS16GBK,那么每个字 ...
 - JavaScript Patterns 4.1 Functions Background
			
Functions are first-class objects and they provide scope. • Can be created dynamically at runtime, d ...
 - ThinkPHP 获取get post参数与I方法
			
传统方式获取变量 $id = $_GET['id']; // 获取get变量 $name = $_POST['name']; // 获取post变量 $value = $_SESSION['var'] ...
 - cocos2d-x之Action特效
			
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...
 - html标题_段落_换行_水平线_特殊字符
			
标题 <h1>一级标题</h1> <h2 align="对齐方式">二级标题</h2> 对齐方式有left,center,right ...
 - hdu 3635 Dragon Balls(并查集)
			
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
 - 手机号码js正则验证
			
手机号码js正则验证 var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; if (!myreg.test($(" ...
 - A python tool to static sim.log duration time
			
When working ALU IMS Patch team, we need to static the SU duration to add it to the patch report, th ...