zoukankan      html  css  js  c++  java
  • 深入理解计算机系统(第三版) csapp 第三章部分答案

    3.63

    (gdb) x/6gx 0x4006f8
    //相邻地址相差8字节
    0x4006f8: 0x00000000004005a1  //对应n=0
    0x400700: 0x00000000004005c3  //对应n=1
    0x400708: 0x00000000004005a1  //对应n=2 如此类推
    0x400710: 0x00000000004005aa  
    0x400718: 0x00000000004005b2
    0x400720:  0x00000000004005bf
    //因此当n=0或者n=2时候对应0x4005a1
     1 <switch_prob>:
     2     400590: 48 83 ee 3c    sub $0x3c, %rsi  //减去60 n=n-60
     3     400594: 48 83 fe 05    cmp $0x5, %rsi  
     4     400598: 77 29          ja  4005c3 <switch_prob+0x33>
     5     //判断n是否大于5 如果大于5则跳转到4005c3 处
     6     40059a: ff 24 f5 f8 06 40 00   jmpq *0x4006f8(,%rsi,8)
     7     // 跳到跳转表对应的位置,假设跳转表对应数组a[x],那么分别跳到a[0x4006f8+8*n]处
     8     4005a1: 48 8d 04 fd 00 00 00   lea  0x0(,%rdi,8),%rax
     9     //当n为0或者2时跳转到此处
    10     4005a8: 00
    11     400593: c3             retq
    12     4005aa: 48 89 f8       mov %rdi, %rax//当n为3时跳转到此处
    13     4005ad: 48 c1 f8 03    sar $0x3, %rax
    14     4005b1: c3             retq
    15     4005b2: 48 89 f8       mov %rdi, %rax//当n=4时跳转到此处
    16     4005b5: 48 c1 e0 04    shl $0x4, %rax
    17     4005b9: 48 29 f8       sub %rdi, %rax
    18     4005bc: 48 89 c7       mov %rax, %rdi
    19     4005bf: 48 0f af ff    imul %rdi, %rdi //当n=5会跳到此处
    20     4005c3: 48 8d 47 4b    lea 0x4b(%rdi), %rax//其他情况跳转到这里
    21     4005c7: c3             retq     

    最后C语言代码:

    long switch_prob(long x, long n){
        long result = x;
        switch(n):{
            case 60:
            case 62:
                result = x * 8;
                break;
            case 63:
                result = result >> 3;
                break;
            case 64:
                result = (result << 4) - x;
                x = result;
            case 65:
                x = x * x; 
            default:  //61在默认情况中
                result = x + 0x4b;
        }
    }

    3.64

    对于三维数组A[i][j][k],我一直以为i,j,k是行,列,层,其实应该是层,行,列。高维度应该写在前面

    所以对于一个数组A[3][2][2]  

    第一层为:

    A[0][0][0] 

    A[0][0][1]

    A[0][1][0] 

    A[0][1][1]

    第二层为:

    A[1][0][0] 

    A[1][0][1]

    A[1][1][0] 

    A[1][1][1]

    第三层为:

    A[2][0][0] 

    A[2][0][1]

    A[2][1][0] 

    A[2][1][1]

    所以根据数组首地址求的最后一个元素的地址=首地址+(目标元素的那一层下面的所有元素个数+加目标元素所在层除了目标元素外的所有行的所有元素+目标元素所在行除自己外的所有元素)*单个元素大小

    A.

      所以公式 &A[i][j][k] = Xa +8*(i*S*T+j*T+k)  

    B.

      根据汇编得 &A[i][j][k] = Xa +8*(65i+13j+k)  

      S*T =65

      T=13

      size(A) = 3640 =R*S*T

    所以R=7,S=5,T=13

    暂时发两题剩下的过几天补上

  • 相关阅读:
    企业级分布式应用服务EDAS_企业云计算解决方案-阿里云
    研发协同RDC,云上企业级一站式智能研发协同平台。
    信息系统项目管理师论文-论项目风险管理
    项目风险管理浅析|论文
    x
    项目管理师论文考试准备总结
    项目沟通管理电子书-免费在线阅读全文_代宏坤-超星读书
    管理沟通:领导者的必备软技能_图文_百度文库
    edp_百度百科
    xxx
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/9544400.html
Copyright © 2011-2022 走看看