Division 36/18 = 18 Bit und Carry
Division von 36/18 Bit ohne Vorzeichen
Operanden | high | low |
Dividend | r12 | r13 |
Divisor | r15 | |
Ergebniss | high | low |
Quotient | r12 | |
Rest | r13 | |
Carry | r14 |
; ; Dividieren von 36 Bit Werten durch 18 Bit Werte ohne Vorzeichen ; div3618: ; im Aufruf intern ; Dividend : R12 | R13 R4 | R5 (High | Low) ; Divisor : R15 R7 ; Quotient : R12 R4 ; Rest: R13 R5 ; Carry: R14 R6 ; ; Anzahl der Zyklen laden movi r15, 18+1 ; Übertrag Dividend löschen xor r8, r8 ; Quotient löschen xor r10, r10 ; 1. Kopie von Dividend bilden MOV R12, R4 MOV R13, R5 ; 2. Differenz High Dividend und Divisor bilden divz: mov r9, r8 ; ist immer teilbar wenn Dividend Übertrag hatte bnez r8, ydiv SLTU R12, R7 ; teilbar ? Ja -> cc = 0 movi r9, 0 ; r9 = 1 wenn teilbar bnezc nodiv movi r9, 1 ; r9 = 1 wenn teilbar ydiv: SUBU R12, R7 ; Differenz bilden wenn teilbar nodiv: addi r15, -1 ; Zyklenzahl - 1 ; Ergebnis in den Quotient schieben slli r10, 1 movs2i r6, SFR_CC ; r6 = höchtes Bit des Quotient ist Carry addu r10, r9 ; Divisionsergebnis addieren beqz r15, divend ; Dividend low linksschieben slli r13, 1 movs2i r9, SFR_CC ; Übertrag merken ; Dividend high linksschieben slli r12, 1 movs2i r8, SFR_CC ; Übertrag merken addu r12, r9 ; Übertrag low einfügen ; j divz ; divend: mov r4, r10 ; Quotient mov r5, r12 ; Rest jrs r11 ;
Testprogramm: Ass-Quelle, Liste, Protokoll
SPHO-Format Start mit "G" im Monitor.
Include Datei für das Programm: spartan_equ.inc
UP d361818 als Macro
Include Dateien für das Macro: d361818um.incTestprogramm: Ass-Quelle, Liste, SPHO-Format Start mit "G" im Monitor.