Overflow-und Carry-flags auf Z80

Habe ich so Runde um die Umsetzung der ADD A,r Satz von opcodes, die auf meinem Z80 Kern. Ich hatte ein wenig Verwirrung über das carry-und overflow-flags, die ich glaube, ich habe genagelt, aber ich wollte es der community, um zu überprüfen, dass ich im Recht bin.

Grundsätzlich von dem, was ich sehen kann, ist die ALU in der Z80 kümmert sich nicht darum, signed/unsigned-Operationen, es fügt nur bits. Dies bedeutet, dass, wenn zwei 8-bit-Werte addiert und zu einem 9-bit-Wert als Ergebnis Ihrer addition das carry-flag gesetzt wird. Dieser Zusatz enthält zwei negative zweier-Komplement-zahlen von beispielsweise -20 (11101100) und -40 (11011000), denn obwohl das Ergebnis -60 (11000100), das Ergebnis ist eigentlich ein 9-bit-Wert 1 1100 0100. Diese sicherlich bedeutet, wenn das hinzufügen zwei negative Zweierkomplement Werte, das carry-flag wird immer gesetzt, auch wenn es keine überlauf - habe ich Recht?

Zweitens, habe ich beschlossen, dass zur Erkennung von überlauf in dieser Anleitung, würde ich XOR bit 7 der beiden Operanden, und wenn das Ergebnis war 10000000, dann ist es auf jeden Fall keine überlauf - wenn das Ergebnis dies ist 00000000 dann könnte es ein überlauf, da die Anzeichen sind die gleichen, und daher würde ich XOR bit 7 des Ergebnisses der addition mit bit 7 von entweder operand ist, und wenn das Ergebnis ist 10000000 dann ein überlauf aufgetreten ist und ich die P/V overflow-flag. Bin ich hier richtig auch?

Sorry für so eine verwickelte Frage, ich bin mir ziemlich sicher, dass ich Recht habe, aber muss ich wissen, bevor ich auf unzählige weitere Anweisungen basierend auf dieser Logik. Vielen Dank.

Schreibe einen Kommentar