2016-04-25 54 views
2

我正在編寫一個C++程序來模擬一個16位虛擬機。我有一個函數'addc',我必須檢查溢出。我有點失去了溢出的條件。我知道當你添加2個正數並且你得到一個負數時,或者當你添加2個負數時你會得到一個正數。但是,在我的addc函數中,我必須添加3個數字。我正確地處理這個問題嗎?檢查溢出的addc函數

我的功能應該這樣做:

目標寄存器=目標寄存器+寄存器源+進位

(RD = RD + RS + C)

到目前爲止,檢查溢出,我有這個代碼..

//Check when adding positive numbers gives negative result 
//My carry bit is always positive (either 0 or 1) 
if(rd >= 0 and rs >= 0 and c >= 0) and ((rd + rs + c) < 0)){ 
    //set overflow bit 
} 
else if(rd < 0 and rs < 0 and c < 0) and (rd + rs + c) > 0)){ 
    //set overflow bit 
} 

我的困惑是爲其他條件。 C總是0或1,所以它永遠不會進入else if循環,所以幾乎沒有理由擁有else if循環。我做對了嗎?或者我必須將進位位(c)加到其中一個操作數(rd或rs),所以我只有兩個操作數進行比較。喜歡這個?

else if(rd < 0 and ((rs + c) < 0)) and (rd + (rs + c)) > 0)){ 
    //set overflow bit 
} 

回答

0

你的第二if聲明似乎印象下操作的進位也可能會被否定應該是第一條線索的東西並不加起來(如警告號角里窩那會說,「嘿事實,我想我只是搞笑了!「)。

正確的做法是將三個值的單個添加操作簡化爲兩個單獨的添加操作。首先,添加rdrs,並使用您已定義的條件檢查溢出。然後,取第一個加法的結果,並將其添加到進位位,並在此檢查溢出。第二次溢出檢查可以非常簡單,因爲進位位將爲0或1.

如果確定第一個或第二個add操作已經溢出,最終結果將設置溢出位。