Addition von 36 Bit mit Overflow und Carry

Addition von 36 Bit

Operandenhighlow
Summand1r12r13
Summand2r14r15
Ergebnisshighlow
Summer12r13
Carry r14
Overflow r15


Durch die Bereitstellung von Carry und Overflow kann das Programm auch auf 72 Bit kaskadiert werden.

;
; UP ADD36
;
add36:
;
; Addieren von 36 Bit Werten mit Vorzeichen
;
; (Wird eine feste Anzahl von Bit addiert, so sind im Ergebnis diese Bits nur dann
; >= einem der beiden Summanden, wenn kein Übertrag entstanden ist!)
;
;                  im Aufruf        intern  
; Summand 1:       R12 | R13        R4 | R5  (High | Low)
; Summand 2:       R14 | R15        R6 | R7
;                  Rückgabe         intern
; Ergebnis : R14 | R12 | R13   R6 | R4 | R5
; Overflow : R15               R7
;
        ADDU    R5,     R7              ; Summe Low
        ADD     R4,     R6              ; Summe High
        movs2i  r10,    SFR_CC          ; Overflow bei Summe High
        SLTU    R4,     R6              ; Übertrag bei High ? -> cc = 1
        movs2i  r8,     SFR_CC          ; r8 = Übertrag bei high
        SLTU    R5,     R7              ; Übertrag bei Low  ? -> cc = 1
        movs2i  r9,     SFR_CC          ; r9 = Übertrag bei low
        add     r4,     r9              ; low Übertrag auf high addieren
        movs2i  r7,     SFR_CC          ; Overflow bei Summe High + Übertrag low
        SLTU    R4,     r9              ; Übertrag dabei    ? -> cc = 1
        movs2i  r6,     SFR_CC          ; r6 = Übertrag bei add low Übertrag
        ADDU    R6,     R8              ; Gesamtübertrag von High bilden
        xor     r7,     r10             ; Overflow gesamt.
        jrs     r11
;
;

Testprogramm: Ass-Quelle, Liste, Protokoll
SPHO-Format Start mit "G" im Monitor.

Include Datei für das Programm: spartan_equ.inc

UP add36 als Macro

Include Dateien für das Macro: add36m.inc

Testprogramm: ASS-Quelle, Liste SPHO-Format Start mit "G" im Monitor.


SpartanMC