2016-04-25 5 views
2

Ich programmiere ein C++ - Programm, um eine 16-Bit-virtuelle Maschine zu simulieren. Ich habe eine Funktion 'addc', in der ich auf Überlauf prüfen muss. Ich bin ein wenig unter den Bedingungen für Überlauf verloren. Ich weiß, dass Überlauf passiert, wenn Sie 2 positive Zahlen hinzufügen und Sie eine negative Zahl erhalten, oder wenn Sie 2 negative Zahlen hinzufügen, und Sie eine positive Zahl erhalten. In meiner Funktion addc habe ich jedoch drei Zahlen, die ich hinzufügen muss. Komme ich mir das richtig?Überprüfung des Überlaufs für die addc-Funktion

Meine Funktion soll dies tun:

Register destination = registrieren Ziel + Quellbit

(rd = rd + rs + c)

Bisher für Überlauf überprüft, registrieren + tragen Ich habe diesen Code ..

//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 
} 

Meine Verwirrung ist für die sonst wenn Bedingung. C wird immer 0 oder 1 sein, also wird es nie in die else if-Schleife gehen, also gibt es fast keinen Grund, die else if-Schleife zu haben. Mache ich das richtig? Oder müsste ich das Übertragsbit (c) zu einem der Operanden (entweder rd oder rs) hinzufügen, so dass ich nur zwei Operanden zum Vergleichen habe. So was?

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

Antwort

0

Die Tatsache, dass Ihre zweite if Aussage unter dem Eindruck scheint zu arbeiten, die das Übertragsbit möglicherweise negativ sein könnte, wenn der erste Hinweis sein, dass etwas addieren sich nicht (wie Foghorn Leghorn würde sagen: „Hey Ich glaube, ich habe es einfach lustig gemacht! ").

Der richtige Weg, dies zu tun, ist, den Fall einer einzelnen Add-Operation von drei Werten in zwei separate Add-Operationen zu vereinfachen. Fügen Sie zunächst rd und rs hinzu und überprüfen Sie anhand der von Ihnen definierten Bedingungen, ob ein Überlauf vorliegt. Nehmen Sie dann das Ergebnis der ersten Addition und fügen Sie es dem Übertragsbit hinzu und prüfen Sie hier den Überlauf. Die zweite Überlaufprüfung kann sehr einfach sein, vorausgesetzt, dass das Übertragsbit entweder 0 oder 1 ist. Das Endergebnis wird das Überlaufbit setzen, wenn entweder die erste oder die zweite Addieroperation als übergelaufen bestimmt wurde.

Verwandte Themen