2017-08-12 52 views
-3

CSAPP練習3.18需要用匯編代碼恢復C代碼, 答案書中給出的填充空白處;評論中的答案是我的答案。 Ç代碼如下:從ATT彙編代碼中恢復C代碼的不同答案

int test(int x ,int y) 
{ 
    int val=_x^y__; //x-y 
    if(_x<-3__){ 
     if(_x>y_) val=_x*y_; 
     else val=_x+y; 
      } 
    else if(_x>2_)  //x<=2 
     val=__x-y__; //x^y 
    return val; 
} 

彙編代碼如下:根據前書講述了技能 enter image description here

,我想我的答案是正確的。

回答

2

代碼中的註釋(您的答案)將會產生與實際代碼完全相同的結果,因此它們都是正確的。

如果我們忽略x < -3部分,這兩個版本是:

圖書版本:

int val=x^y; 
if (x>2) 
    val=x-y; 

您的版本:

int val=x-y; 
if (x<=2) 
    val=x^y; 

由於if狀態切換,以及在分配到val,很容易看出在這兩種情況下,val的值將分別爲x^y如果x<=2x-y如果x>2