第四章家庭作业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 利用所得的汇编代码,用正则表达式去掉相应的“."与无关项之后进行Y86代码替换

涉及格式:g/\.\d; dd

5 将所得的Y86代码与用机器产生的反汇编代码比对,验证准确性

解题过程:

对应对比及修改:

注意事项:

1 对应的指针代码要在能运行与检测的基础上构建,在调用相应的冒泡程序时,因先利用GCC -G后调试一下

带来的问题:在没有可执行的程序做保证的话会由于书写错误或者指代错误等错误因素导致数据意外存储而没有报错,这样无法得到汇编及正确的代码

2 在可执行的C代码汇编版本中:movl指令对应的Y86指令有三个,要注意区分三者后带的参数类型

3 Y86没有相应的乘除法操作,要转换成加减或者与,抑或运算完成,为方便起见,规定的数据不讨论符号,对于乘除法操作,以最优解替换

实验总结:

本次家庭作业相对的难点在于如何利用基本的加减,与等操作完成复杂的移位乘除等复杂算法,对于更好理解机器的运算过程有较好的帮助

时间: 2024-08-07 00:28:39

第四章家庭作业4.45的相关文章

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

4.52以后的题目中的代码大多是书上的,如需使用请联系 [email protected] 流水线部分只写了偶数题号的,这几天太浮躁,落下了好多课... 4.45 A. 不正确,当REG为%rsp时,这样会压入%rsp - 8而非%rsp B. 对于 pushq REG: movq REG, -8(%rsp) subq $8, %rsp 4.46 A. 不正确,当REG为%rsp是,这样会使得%rsp的值为(%rsp) + 8 而非(%rsp) B. 对于popq REG: addq $8, %

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

第四章,简答题4-5,2017-4-6

巫师属性类------- 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 第四章_简答题5.entity 8 { 9 public class Wus 10 { 11 public int SM { get; set; }//生命 12 public int Do {

第三章家庭作业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

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

1.逻辑运算和算术运算有什么区别? 算术运算就是平常我们所用的加减乘除,而逻辑运算是在二进制位上进行非.与.或和异或运算,逻辑运算中的二进制位只有两种状态:0(假)和1(真),结果中的二进制位也只有这两种状态. 4.解释“溢出”这个词. 当我们进行计算机数字中的算术运算时,要记住每个数字和结果应该在分配的二进制位的定义范围之内.若计算结果无法用被分配的二进制位数来正确表示时,该结果出现溢出. 5.在浮点数的加法运算中,怎样调整指数不同的数的表示方法? 在运算中先以某个数的指数为标准,通过去规范化

S2T40.第四章.课后作业.20170407

简答题4:  简答题4效果图如下: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 简答题5: 简答题5效果图如下:

第三章家庭作业

小组成员:20135310陈巧然 20135305姚歌 选题:3.56 分值:2分 题目: 解题思路及答案: A. 寄存器 变量esi    xebx    nedi    resultedx    mask B. result:0x55555555 mask:0x80000000 C. mask !=0 D. 第十行,逻辑右移了n位 E. 第八行,result ^= (mask & x) F. int loop(int x, int n) {    int result = 0x5555555

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

*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