您好,歡迎來電子發(fā)燒友網! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網>電子百科>電腦硬件>臺式機>

溢出,溢出的檢測方法有哪些?

2010年04月13日 11:02 srfitnesspt.com 作者:佚名 用戶評論(0
關鍵字:溢出(7256)
溢出,溢出的檢測方法有哪些?
  
  在定點小數機器中,數的表示范圍為|x|<1. 在運算過程中如出現大于1的現象,稱為“溢出”。在定點機中,正常情況下溢出是不允許的。

  [例12] x=+0.1011, y=+0.1001,求x+y。
  
  [解:]
  
  [x]=0.1011 [y]=0.1001
  
  [x]   ? 0.1011
  
  +[y]    0.1001
  --------------------
  [x+y]  1.0100
  
  兩個正數相加的結果成為負數,這顯然是錯誤的。
  
  [例13] x=-0.1101, y=-0.1011,求x+y。
  
  [解:]
  
  [x]=1.0011 [y]=1.0101
  
  [x]   ? 1.0011
  
  +[y]??  ?1.0101
  --------------------
  [x+y] ? 0.1000
  
  兩個負數相加的結果成為正數,這同樣是錯誤的。

之所以發(fā)生錯誤,是因為運算結果產生了溢出。兩個正數相加,結果大于機器所能表示的最大正數,稱為上溢。而兩個負數相加,結果小于機器所能表示的最小負數,稱為下溢。
  
  為了判斷“溢出”是否發(fā)生,可采用兩種檢測的方法。第一種方法是采用雙符號位法,這稱為“變形補碼”或“模4補碼”,從而可使模2補碼所能表示的數的范圍擴大一倍。變形補碼定義為
  
  ????????????????????????? (2.22)
  
  或用同余式表示為
  
  [x]=4+x   (mod 4)
  
  下式也同樣成立:
  
  [x]+[y]=[x+y]??? (mod 4)
  
  為了得到兩數變形補碼之和等于兩數之和的變形補碼,同樣必須:
  
  1. 兩個符號位都看作數碼一樣參加運算
  
  2. 兩數進行以4位模的加法,即最高符號位上產生的進位要丟掉。
  
  采用變形補碼后,如果兩個數相加后,其結果的符號位出現“01或“10兩種組合時,表示發(fā)生溢出。這是因為兩個絕對值小于1的數相加,其結果不會大于或等于2,所以最高符號位永遠表示結果的正確符號。
  
  [例14] x=+0.1100, y=+0.1000,求x+y。
  
  [解:]
  
  [x]=00.1100, [y]=00.1000
  
  [x]   00.1100
  
 ?。玔y]  00.1000
  -------------------
????????????????01.0100
  
  兩個符號位出現“01”,表示已溢出,即結果大于+1。

[例15] x=-0.1100, y=-0.1000,求x+y。
  
  [解:]
  
  [x]=11.0100, [y]=11.1000
  
  [x]   11.0100
  
 ?。玔y]  11.1000
  -------------------
  ?????????? ?10.1100
  
  兩個符號位出現“10”,表示已溢出,即結果小于-1。
  
  由此可以得出如下結論:
  
  1. 當以模4補碼運算,運算結果的二符號位相異時,表示溢出;相同時,表示未溢出。故溢出邏輯表達式為V=Sf1⊕Sf2,其中Sf1和Sf2分別為最高符號位和第二符號位。此邏輯表達式可用異或門實現。
  
  2. 模4補碼相加的結果,不論溢出與否,最高符號位始終指示正確的符號。
  
  第二種溢出檢測方法是采用單符號位法。從例1和例2中看到,當最高有效位產生進位而符號位無進位時,產生上溢;當最高有效位無進位而符號位有進位時,產生下溢。故溢出邏輯表達式為V=Cf⊕Co,其中Cf為符號位產生的進位,Co為最高有效位產生的進位。此邏輯表達式也可用異或門實現。
  
  在定點機中當運算結果發(fā)生溢出時,機器通過邏輯電路自動檢查出溢出,并進行中斷處理。

非常好我支持^.^

(510) 97.7%

不好我反對

(12) 2.3%

( 發(fā)表人:admin )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?