家庭作业二

家庭作业二(Chapter 3)

P206 3.60

考虑下面的源代码,这里R,S,T都是用#define声明的常数

int A[R][S][T];
int store_ele(int i,int j,int k,int *dest)
{
    *dest=A[i][j][k];
    return sizeof(A);
}

编译这个程序,GCC产生下面的汇编代码:(i at %ebp+8,j at %ebp+12,k at %ebp+16,dest at %ebp+20)

movl 8(%ebp),%ecx
movl 12(%ebp),%eax
leal (%eax,%eax,8),%eax
movl %ecx,%edx
sall $6,%edx
subl %ecx,%edx
addl %edx,%eax
addl 16(%ebp),%eax
movl A(,%eax,4),%edx
movl 20(%ebp),%eax
movl %edx,(%eax)
movl $2772,%eax

A.将等式(3-1)从二维扩展到三维,提供数组元素A[i][j][k]位置的公式

B.根据汇编代码,确定R,S,T的值

对上面的汇编代码逐行翻译,可以得到以下内容:

1:i
2:j
3:9j
4:i
5:64i
6:63i
7:63i+9j
8:63i+9j+k
9:A+4(63i+9j+k)
10:dest
11:将dest指向%edx的内容
12:2772即A[R][S][T]的大小

A.不考虑每个元素的大小,A[i][j]起始地位置是iST+jT;而A[i][j][k]起始的位置就是iST+jT+K。考虑A数组有起始位置并且数组元素也有大小(4),所以真正的地址是A(,iST+j*T+K,4)

B.由第9行的A+4(63i+9j+k)=A(,iST+jT+K,4)可以得到:T=9;ST=63;

再有最后的4RS*T=2772可以得出:

R=11;S=7;T=9

时间: 2024-12-22 23:49:36

家庭作业二的相关文章

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]; }

20135223何伟钦—家庭作业汇总

第二章家庭作业 (当时检查的时候已有同学选了这道题,重复不算,没有登记) 第三章家庭作业 (已到老师办公室检查) 3.54解析:此题较为简单,只要对号入座,即可写出相应的C语言代码int decode2(int x,int y,int z){int r;z-=y;r=z;r<<=15;r>>=15;return r*(z^x);} 3.56解析: (1)由C代码函数的定义可先猜测得%esi=x,%ebx=n;由result.mask初始化以循环表达式的mask的使用可得%edi=r

家长如何检查孩子的家庭作业

小学生需要老师或家长把好检查作业这—关,失去有效的检查,那么孩子的学习能力是难以提高的.家长要学会正确的检查方法,以培养孩子仔细认真.独立思考的能力.下面与大家分享一些做法:1.孩子读—.二年级时,重点检查字迹是否写端正:做完作业时发现有不正确的地方,首先不要指出具体错误之处,而是说出大体范围,如“做得不错,但这个题有些不对的地方,你再看看.”或者在有问题的地方画上—个小圆圈,让孩子自已找出不正确的地方,以改之.若孩子找出来了,就称赞孩子聪明.能干.三年级以后,重点检查孩子做题的思路,算式的列法

家庭作业——第三章

第三章家庭作业    3.69和3.70 3.69 A:long trace(tree_ptr tp)    {        long ret = 0;        while(tp != NULL)        {           ret = tp->val;           tp = tp->left;        }        return ret;    } B:作用是从根一直遍历左子树,找到第一个没有左子树的节点的值. 3.70 A:long traverse(t

day1作业二:多级菜单

    作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置标识符active用来循环: (2)生成存储省市的字典,d1 = {1: '河南', 2: '广东', 3: '湖南'}; (3)用户输入查询编码,如果用户输入q退出循环:如果用户输入小于1或大于3则重新输入:输入编码在range(1,4)中,则输出省,并继续循环; (4)生成存储市的字典d2 =

关于本周家庭作业

本周家庭作业 是仿照老师给的网页图片做像素级还原. 个人认为,其中涉及到的知识点有: 1. 语义化标签的用法: 2. 表单的用法以及其属性的意义: 3. 相对定位的用法: 4. 浮动的操作: 5. 浮动的清除方式: 采用overflow不等于visible的方式 采用clear方式 使用伪类:after方式 6. 无序列表的用法: 7. 二级菜单的制作:(此处不会,只好等着老师来讲解,已查过资料,主要归结为自己太笨……) 8. display各个属性的意义及用法: 9. sprinte图片切割的

信息安全系统设计基础家庭作业

<深入理解计算机系统>家庭作业 * 8.9 答案: 进程对 是否并发 AB 否 AC 是 AD 是 BC 是 BD 是 CD 是 * 8.10 答案: A. 调用一次,返回两次: fork B. 调用一次,从不返回: execve, longjmp C. 调用一次,返回一次或者多次: setjmp * 8.11 答案: 这个程序会输出4个“hello”输出行. 因为Fork()函数的作用是调用一次返回两次.根据条件i<2,当 i = 0 时,输出2个hello,当 i = 1 时,输出2

家庭作业汇总

家庭作业 8.21 首先可以看出不论是先打印子进程还是父进程都必须满足a在c的前面,b在c的前面这两种顺序. 但是由于无法判断子进程和父进程的并发序列,所以会有一下几种输出结果:acbc.abcc.bcac.bacc. 汇总 8.21 两星题 2′           共2′

20135206于佳心-家庭作业3.63

第三章家庭作业 选题:3.63 分值:两分 作业过程: int sum_col(int n,int A[E1(n)][E2(n)],int j) { int i; int result = 0; for(i=0;i<E1(n);i++) result += A[i][j]; return result; } 上面是原来的代码 汇编代码 movl 8(%ebp),%edx ;edx:n leal (%edx,%edx),%eax ;eax:2n leal -1(%eax),%ecx ;ecx:2n