Subtraktion von 36 bit mit Overflow und Carry
Subtraktion von 36 Bit
Operanden | high | low |
Minuend | r12 | r13 |
Subtrahend | r14 | r15 |
Ergebniss | high | low |
Differenz | r12 | r13 |
Carry | r14 | |
Overflow | r15 |
Durch die Bereitstellung von Carry und Overflow kann das Programm auch auf 72 Bit kaskadiert werden.
; ; Subtrahieren von 36 Bit Werten mit Vorzeichen als UP ; sub36: ; ; (Bei einer Subtraktion entsteht immer dann ein Übertrag, wenn ; ein größerer Wert von einem kleineren subtrahiert wird!) ; ; im Aufruf intern ; Minuend : R12 | R13 R4 | R5 (High | Low) ; Subtrahend : R14 | R15 R6 | R7 ; Rückgabe intern ; Differenz : R12 | R13 R4 | R5 ; Übertrag36: R14 R6 ; Overflow : R15 R7 ; ; 1. Differenz High mit Vorzeichen bilden SLTU R4, R6 ; Übertrag bei High ? -> cc = 1 movs2i r8, SFR_CC ; r8 = Übertrag bei high SUB R4, R6 ; Differenz High mit OV movs2i r9, SFR_CC ; r9 = OV bei high ; 2. Differenz Low ohne Vorzeichen bilden SLTU R5, R7 ; Übertrag bei Low ? -> cc = 1 movs2i r10, SFR_CC ; r10 = Übertrag bei low SUBU R5, R7 ; Differenz Low ; 3. Übertrag bei Low von High mit Vorzeichen abziehen SLTU R4, R10 ; Übertrag dabei ? -> cc = 1 movs2i r6, SFR_CC ; r6 = Übertrag bei sub low Übertrag von high SUB R4, R10 ; Übertrag Low noch von High mit OV abziehen movs2i r7, SFR_CC ; r7 = OV bei high - Übertrag Low ; 4. Übertrag und Overflow für das Ergebnis bilden ADDU R6, R8 ; Gesamtübertrag von High bilden xor r7, r9 ; OV bei SUB36 2* hebt sich auf. jrs r11 ;
Testprogramm: Ass-Quelle, Liste, Protokoll
SPHO-Format Start mit "G" im Monitor.
Include Datei für das Programm: spartan_equ.inc
UP sub36 als Macro
Include Dateien für das Macro: sub36m.incTestprogramm: Ass-Quelle, Liste, SPHO-Format Start mit "G" im Monitor.