深入理解计算机系统家庭作业

深入理解计算机系统第二章家庭作业

题目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的更多相关文章

  1. 深入理解计算机系统大作业——程序人生P2P

    程序人生P2P 前言 经过一个学期的快乐学习(折磨),计算机系统终于结课了,自认为对于计算机系统算是有了粗浅的理解.为了庆祝结课,顺带总结自己的学习经历(只是为了完成大作业),便通过一个简单的程序he ...

  2. CSAPP深入理解计算机系统(第二版)第三章家庭作业答案

    <深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...

  3. 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework

    8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +---------------- ...

  4. 深入理解计算机系统_3e 第四章家庭作业(部分) CS:APP3e chapter 4 homework

    4.52以后的题目中的代码大多是书上的,如需使用请联系 randy.bryant@cs.cmu.edu 更新:关于编译Y86-64中遇到的问题,可以参考一下CS:APP3e 深入理解计算机系统_3e ...

  5. 深入理解计算机系统_3e 第九章家庭作业 CS:APP3e chapter 9 homework

    9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +--------------------- ...

  6. 《深入理解计算机系统》【PDF】下载

    <深入理解计算机系统>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382303 内容提要 本书主要介绍了计算机系统的基本概念,包 ...

  7. 读完了csapp(中文名:深入理解计算机系统)

    上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一 ...

  8. 深入理解计算机系统项目之 Shell Lab

    博客中的文章均为meelo原创,请务必以链接形式注明本文地址 Shell Lab是CMU计算机系统入门课程的一个实验.在这个实验里你需要实现一个shell,shell是用户与计算机的交互界面.普通意义 ...

  9. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游

    本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...

随机推荐

  1. Spring、SpringMVC、Mybaitis框架配置

    给大家推荐2个网址,介绍的非常详细 SSM环境搭建 http://blog.csdn.net/zhshulin/article/details/37956105 SSM代码生成工具介绍 http:// ...

  2. 数据库性能优化之SQL语句优化

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等是体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  3. JDK自带工具一览表。妈妈再也不用担心你到处去下载小软件了~~

    原来JDK早早就给我准备好了要用到的工具..反编译,JVM性能监视.诊断. JDK(Java Development Kit)是Java程序员最核心的开发工具,没有之一. JDK是一个功能强大的Jav ...

  4. Python 部署项目(Tomcat 容器)

    此前书写了多实例的 Tomcat 启动等操作的脚本,今天完善 Tomcat 多实例部署(本脚本只提供思路) 脚本内容: #!/usr/bin/env python # _*_coding:utf-8_ ...

  5. 数据结构--AC自动机--hdu 2896

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. jquery中attr和prop的区别(转)

    在网络上看到这样一篇关于jquery中attr和prop的区别文章,觉得不错,所以转载了. 在jQuery 1.6中,.attr()方法查询那些没有设置的属性,则会返回一个undefined.如果你要 ...

  7. POJ 1195 Mobile Phones

    树状数组,开始的时候wa了,后来看看,原来是概率论没学好,以为求(L,B) - (R,T) 矩阵内的和只要用sum(R+1,T+1) - sum(L,B) 就行了,.傻x了.. 必须 sum(R,T) ...

  8. java 19 -14 File类的判断并输出案例

    package zl_file; import java.io.File; import java.io.FilenameFilter; /* 需求: 判断E盘目录下是否有后缀名为.jpg的文件,如果 ...

  9. mysql学习书籍推荐

    1.<MySQL技术内幕:SQL编程>2.<高性能MySQL>3.<MySQL技术内幕>4. mysql技术内幕.innodb存储引擎

  10. <<Effective Java>>之善用组合而不是继承

    使用JAVA这门OO语言,第一要义就是,如果类不是专门设计来用于被继承的就尽量不要使用继承而应该使用组合 从上图2看,我们的类B复写了类A的add喝addALL方法,目的是每次调用的时候,我们就能统计 ...