• 3_58 csapp 第三版的答案


    参考代码了http://blog.csdn.net/scf0920/article/details/77543294

    3.58##

    看汇编写c代码
    long decode(long x, long y,long z){
    z-=y;
    int ret=z*x;
    z>>=63;
    z<<=63;
    ret^=z;
    return ret;
    }

    3_59##

    现将一个参数进行符号扩展
    cqto
    对rax进行符号扩展 ,置于rdx rax 中

    然后用 符号>>63 可以得到另外一个参数的高64位
    低位乘高位 高位乘低位 再相加,
    最后低位乘低位(使用扩展乘法 只有一个参数的imulq指令)

    3_60##

    这个题和第二版出入较大

    #include<stdio.h>
    long loop(long x,int n){
    	long result=0;
    	long mask;
    	for(mask=1;mask!=0;mask=mask<<n){
    		result!=mask&x; 
    	}
    	return result;
    }
    

    这里要注意%cl 是%ecx的低位,

    3_61##

    这里要注意如果使用条件传送指令就会预先计算好,各个分支的值,只要保证直接结算分支不会出错就可以

    long creadalt(long *xp){
    int t;
    int *p=xp? xp: &t;
    return *p;
    }

    3_62##

    汇编代码的翻译

    case MODE_A:
        result = *p2;
        action = *p1;
        *p2 = action;
        break;
    case MODE_B:
        result = *p1 + *p2;
        *p1 = result;
        break;
    case MODE_C:
        *p1 = 59;
        result = *p2;
        break;
    case MODE_D:
        result = *p2;
        *p1 = result;
        result = 27;
        break;
    case MODE_E:
        result = 27;
        break;
    default:
        result = 12;
    

    3_63##

    long switch_porb(long x,long n){
    	long result=x;
    	switch(n){
    		case 65:
    			x*=x;
    		case 61:
    			result=x+0x4b;
    			break;
    		case 63:
    			result=x>>3;
    			break;
    		case 64:
    			x*=15;
    			result=x;
    			break;
    		default:
    			result=x*8; 
    	}
    	return result;
    }
    
    

    参考代码在这里有问题
    多个选项指向一个区域意味着这个指针是default跳转的地方,哪里处理的不好

    3_71##

    void good_echo(){
    	char s[SIZE];
    	char *p=fgets(s,SIZE,stdin);
    	if(p==NULL){
    		return;
    	}
    	puts(p);
    }
    

    虽然fgets函数接受一个chars 再把他返回,但是这种用p接受是很有必要的,因为并不是所有的情况都会把s原样返回

  • 相关阅读:
    spring学习(一)IOC&AOP
    MongoDB 写入数据的安全性
    MongoDB MapReduce
    MongoDB 原子操作
    MongoDB 文档间的关系
    MongoDB Java
    MongoDB 持久化
    MongoDB 聚合函数 aggregate
    MongoDB 索引
    MongoDB 文档操作
  • 原文地址:https://www.cnblogs.com/sfzyk/p/7701221.html
Copyright © 2020-2023  润新知