第三章家庭作业

小组成员:20135310陈巧然 20135305姚歌

选题:3.56

分值:2分

题目:

解题思路及答案:

A.

寄存器 变量
esi    x
ebx    n
edi    result
edx    mask

B.

result:0x55555555

mask:0x80000000

C.

mask !=0

D.

第十行,逻辑右移了n位

E.

第八行,result ^= (mask & x)

F.

int loop(int x, int n)

{
    int result = 0x55555555;
    int mask;
    for(mask = 0x80000000; mask != 0; mask = mask>>n){
        result ^= (mask & x);
    }
    return result;
}

选题:3.67

分值:3分

题目:

解题思路及答案:

A. 
e1.p: 0
e1.x: 4
e2.y: 0
e2.next: 4

B.
总共需要8个字节。

C.
不难知道,赋值前后都应该是整数。
edx就是参数up(一个指针)。
最后结果是用eax - (edx)得到的,说明(edx)是整数,即up->___ 为整数,肯定是表示的e2.y。
再看看之前的eax,eax是由(eax)所得,说明到第3行后,eax是个指针。
它是由(ecx)得到的,说明ecx在第二行也是个指针。
而ecx是通过*(up+4)得到的,所以ecx是一个union指针next,即up->e2.next;
到第三行,eax为*(ecx),且是一个指针,所以eax在第三行为int* p,即up->e2.next->e1.p。
所以,赋值符号后面的表达式就为  *(up->e2.next->e1.p) - up->e2.y

再看看前面。
最终赋值的地址是 ecx+4,而ecx那时候是一个next指针,而(next+4)必须是一个int,也不难推测它是e1.x。因此前面就为 up->e2.next->e1.x。
结果如下:

void proc(union ele *up)
{
    up->e2.next->e1.x = *(up->e2.next->e1.p) - up->e2.y;
}

时间: 2024-10-22 13:43:47

第三章家庭作业的相关文章

第三章家庭作业3.65

我们可以从题目所给的汇编代码画出结构体变量的栈结构. 我们从汇编代码中可以看到 由变量t和u相差16个地址值可知,short s[B]存放在16个字节中,而一个short型变量在内存中占用2个字节,所以我们可以推断出, B取四的倍数的上整数 = 8. 8+4+ (B*2)取四的倍数的上整数 = 28. 所以B的可选值为8和7. 2*A*B取四的上整数为44,所以A*B的可选值为21和22. 所以 A=3, B=7.

第三章家庭作业 3.65

解: B取四的倍数的上整数 = 8 8+4+ (B*2)取四的倍数的上整数 = 28 ∴ B的可选值为8和7 2*A*B取四的上整数为44 ∴ A*B的可选值为21和22 ∴ A=3, B=7

第四章家庭作业4.45

第四章家庭作业---4.45 题目要求: A 用指针索引的方式编写相同的数组索引的冒泡程序C代码 B 将所得的C程序用Y86程序表述出来 解题思路: 1 将题目所给的数组元素代码转换成指针索引的代码 具体方法为:将指针赋给数组的头地址,然后按位移动指代 C格式:int *data=a; *(data+i); 2 将程序复写,并加入头文件以及主函数使其能正常调用以及相应传参 3 将所得的C程序汇编一下获得相应的汇编代码 格式:gcc -S xxx.c  -o  xxx 4 利用所得的汇编代码,用正

20135223何伟钦—第六章家庭作业

第六章作业 一.家庭作业6.36(20135203&&20135223) (由于题6.36与6.35基本题型一样,只是高速缓存的数据字节不一样,我直接把6.35题目修改后作为6.36题目) 考虑下面的矩阵转置函数: typedef int array[4][4]; void transpose2(array dst,array src) { int i,j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { dst[i][j]=src[j][i]; }

第三章算法作业(求助攻)

3-1.LIS(longest increas sequence)不多说,题目说了要($ O(n^2) $),我还能说什么呢? 相同题目:HDU 1087 super jumping !jumping!jumping! 而且不卡平方的做法 用dp[i]表示以 i 个数结尾的序列的LIS长度,初始化为dp[i] = 1 ($ 1 \leq i \leq n $)下面附一神代码 1 # include <iostream> 2 # include <cstdio> 3 # includ

深入理解计算机系统_3e 第十一章家庭作业 CS:APP3e chapter 11 homework

注:tiny.c csapp.c csapp.h等示例代码均可在Code Examples获取 11.6 A. 书上写的示例代码已经完成了大部分工作:doit函数中的printf("%s", buf);语句打印出了请求行:read_requesthdrs函数打印出了剩下的请求报头,但是要注意书上写的是: void read_requesthdrs(rio_t *rp) { char buf[MAXLINE]; Rio_readlineb(rp, buf, MAXLINE); while

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

*2.91遵循位级浮点编码规则,实现具有如下原型的函数: /* Compute |f|. If f is NaN ,then return f. */ float_bits float_absval (float_bits f); 对于浮点数f,这个函数计算|f|.如果f是NaN,你的函数应该简单地返回f. 测试你的函数,对参数f可以取的所有2^32个值求值,将结果与你使用机器的浮点运算得到的结果相比较. 解题过程 ****2.95遵循位级浮点编码规则,实现具有如下原型的函数: /* Compu

《计算机科学导论》第三章课后作业解答(个人版)

1.说出5种计算机可以处理的数据. 数字.文本.音频.图像和视频. 2.位模式的长度如何与其能表示的符号数量相关? 若位模式的长度为n,则其能表示的符号数量为2n. 3.位图方法是如何以位模式来表示一个图像的? 一张图像由模拟数据组成,数据密度(色彩)因空间变化,意味着数据需要采样.样本被称为像素,换言之,整个图像被分成小的像素,每个像素有单独的密度值,而该值由位模式表示. 4.矢量图方法优先于位图方法的优点是什么?其缺点又是什么? 矢量图图像编码方法并不存储每个像素的位模式.一个图像被分解成几

20135223何伟钦-第二章家庭作业