1. 程式人生 > >《深入理解計算機系統》(原書第三版)家庭作業第三章(3.63)解答

《深入理解計算機系統》(原書第三版)家庭作業第三章(3.63)解答


原題目:

**3.63 虛擬碼分析:

x rdi ;n  rsi
n=n-0x3c(60);
if(n>5){-->4005c3
}
else{
goto:*(8n+0x4006f8)
n=0 : 0x4006f8  -->0x4005a1
n=1 : 0x400700  -->0x4005c3
n=2 : 0x400708  -->0x4005a1
n=3 : 0x400710  -->0x4005aa
n=4 : 0x400718  -->0x4005b2
n=5 : 0x400720  -->0x4005bf
}

0x4005a1{
result = 8x;
return result;
}

0x4005aa{
result = x>>3;
return result;
}

0x4005b2{
x=[(x<<4)-x]*[(x<<4)-x];(x=225x;)
result = x+0x4b;(75)
return result;
}

0x4005bf{
x=x*x;
result = x+0x4b;(75)
return result;
}

4005c3{
result = x+0x4b
return result;
} 



答案:
long switch_prob(long x,long n)
{
    long result = x;
    switch(n) {
    case 60:
    case 62:
        result = 8*x;
        break;
    case 61:
        result = x+0x4b;
        break;
    case 63:
        result = x>>3;
        break;
    case 64:
        x=225x;//[(x<<4)-x]*[(x<<4)-x]
        result = x+0x4b;
        break;
    case 65:
        x=x*x;
        result = x+0x4b;
        break;
    default:
        result = x+0x4b;
        break;
    }
    return result;
}