20135223何伟钦-第三章家庭作业
2015-10-27 17:05
316 查看
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=result,%edx为mask,即是:
寄存器 变量
esi x
ebx n
edi result
edx mask
(2)
将十进制数$1431655765转化为十六进制数
result:0x55555555
将十进制数$-21474836648转化为十六进制数
mask:0x80000000
(3)
test %edx,%edx
jne .L2
可以得出循环条件表达式为
mask !=0
(4)
汇编代码第十行:(shrl %cl,%ecx)可以看出逻辑右移了n位
(5)
汇编代码第7行和第八行代码可得
result ^= (mask & x)
(6)
int loop(int x, int n)
{
int result = 0x55555555;//或者$1431655765
int mask;
for(mask = 1<<31; mask != 0; mask = ((unsigned)mask>>n)
{
result ^= (mask & x);
}
return result;
}
3.62解析:
(1)M的值:M = 76 / 4 = 19
(2)由cmpl = %edi,%ecx;
jl .L3;
意思是:比较%edi和%ecx的值,如果(%ecx-%edi)< 0 ,将继续进入L3循环;
根据题目所给代码的内循环条件表达式for(;j<i;)(即循环条件为(j-i)<0),可以确定%edi保存i,%ecx保存j.
(3)
int transpose(int M, int A[M][M])
{
int i,j;
for(i=0; i<M; ++i)
{
int *a = &A[i][0];
int *b = &A[0][i];
for(j=0; j<i; ++j)
{
int t = *a;
*a = *b;
*b = t;
++a;
b += M;
}
}
}
相关文章推荐
- 【Python】Python-skier游戏[摘自.与孩子一起学编程]
- Ehcache(05)——缓存的查询
- 001.FKPerson 类的接口文件
- 002.FKPerson 类的实现文件
- 基因检测-基因系统聚类
- 【adb】adb root报错“adbd cannot run as root in production builds”
- 遇到 scp报错:not a regular file 解决 so easy!!!
- unity 关于模型的边界框bounds
- 如何阻止SELECT * 语句
- 存储过程
- c++ switch case
- 4000 堆排序(C#)
- 第九周 项目2 对称矩阵压缩存储的实现与应用
- 003.main 主函数文件
- 编写测量矩阵代码需要用到的几个常见函数
- 网页中植入媒体播放器
- 004androidStudio ndk开发环境
- 10.27
- Oracle批量导出AWR报告
- iOS—dictionary写入文件出现的几个问题