Hallo "Otto",
Und den CP3F Befehl "dar" (bei dir ADR / 1110 RRRR) habe ich zugegeben noch nicht 100% verstanden ...
zu dieser Fragestellung arbeite ich derzeit noch an einer möglichst umfassenden Erklärung. Die Schwierigkeit dabei ist, dass es schon bei der binären Subtraktion mehrere Möglichkeiten der Komplementbildung gibt. Beim Einerkomplement werden die Bits einfach invertiert und das höchste Bit gilt als Vorzeichen mit dem Nachteil, dass es dann eine positive und eine negative Null gibt. Der Telefunken Großrechner TR440 rechnete mit dieser Komplementdarstellung. Das ermöglichte es, dass er bei bestimmten Anwendungen deutlich schneller als vergleichbare Rechner war, da man den Betrag einer Zahl besonders einfach ermitteln konnte (Sign-und Magnitude in der Zahlendarstellung getrennt voneinander).
Durchgesetzt hat sich das Rechnen mit dem Zweierkomplement. Dadurch, dass es hier nur eine Null gibt, ist der Wert der negativen Zahlen um eine Zahl größer (positive Zahlen von 0 bis 127, negative von -1 bis -128). Will man hier subtrahieren, muss man für den Subtrahenten den Carry setzen (bei der Addition löschen) und die Zahlen invertieren. Das geht auch bei der BCD-Subtraktion sehr ähnlich. Durch das Invertieren erfolgt die Verschiebung "nach oben", die bei der Addition durch das Addieren von Hex 66 gemacht wurde, automatisch (aus einer Null wird HexF .... aus einer 9 wird Hex6). Damit klappt dann auch die Korrekturaddition beim Dezimal-Additions-Befehl abhängig vom Status des Intermediate-Carrys (zwischen den beiden im Byte abgelegen Ziffern) und dem Carry wieder.
Beim Intel Mikroprozessor 8048 musste man das mit dem Befehl DAA (Dezimal adjust Accumulator) händisch machen. Die Beschreibung dieses Befehls hilft eventuell, die internen Abläufe des CP3F bei der Dezimaladdition zu verstehen.
Leider ist es mit nicht gelungen, das Ganze noch verständlicher darzustellen. Ich werde mir wohl ein paar erklärende anschauliche Beispiele ausdenken müssen. Aber schnell geht das leider nicht.
Ich habe abhängig von der jeweiligen Aufgabe auch noch bei anderen Prozessoren wahlweise im BCD-Format oder binär gerechnet und bei einigen Regelaufgaben sogar auf die Zahlendarstellung im Einerkomplement zurückgegriffen. Bei der Assemblerprogrammierung hat man da ja alle Möglichkeiten.
Viele Grüße
Günter