zoukankan      html  css  js  c++  java
  • 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=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;
    }
    }
    }

  • 相关阅读:
    tomcat请求流程浅解
    jdk8为啥lambda表达式建议你用冒号形式调用方法
    打印目录树形结构
    类斐波那契数列的java实现
    sping boot 如何将外部引入的jar包打到fat jar里面
    java多线程之生产者消费者
    Hadoop、Hbase、ZooKeeper的搭建
    java 静态代码块、构造代码块、构造函数调用顺序
    MyBatis的 or 和and 问题
    mysql
  • 原文地址:https://www.cnblogs.com/20135223heweiqin/p/4914814.html
Copyright © 2011-2022 走看看