第四章家庭作业---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没有相应的乘除法操作,要转换成加减或者与,抑或运算完成,为方便起见,规定的数据不讨论符号,对于乘除法操作,以最优解替换
实验总结:
本次家庭作业相对的难点在于如何利用基本的加减,与等操作完成复杂的移位乘除等复杂算法,对于更好理解机器的运算过程有较好的帮助