《深入理解計算機系統》(原書第三版)家庭作業第三章(3.63)解答
阿新 • • 發佈:2019-01-28
原題目:
**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; }