Konvertierung 36 Bit BIN zu 11 Stellen BCD
Konvertierung bin2bcd für 36 bit
Operanden | high | low |
binärer Wert | r12 | r13 |
Ergebniss | high | low |
Stellen 10+9 in bcd | r13 | |
Stellen 8-0 in bcd | r14 | r15 |
Zur Nutzung des Unterprogramm sind auch die Unterprogramme sub36 und div361836 notwendig.
; ; UP Konvertierung bin nach bcd für 36 Bit ; bin2bcd: ; ; im Aufruf intern ; Wert Bin: R12 | R13 R4 | R5 (High | Low) ; Rückgabe intern ; Wert BCD: R13 R5 Stellen [10:9] ; R14 | R15 R6 | R7 Stellen [8:0] ; ; 2^36 = 68719476736 ; Größter Subtrahend damit: ; Dezimal: 10000000000 ; HEX: 0x2540BE400 (Assembler kann nur 32 Bit!) ; xor r10, r10 ; Stellen [10:9] xor r6, r6 ; Stellen [8:0] high xor r7, r7 ; Stellen [8:0] low lhi r8, 0x2540BE40 >> 23 ori r8, (0x2540BE40 >> 14) & 0x1ff lhi r9, (0x2540BE40 >> 5) & 0x1ff ; ; Altes Ergebnis um 4 Bit nach links schieben ; dez_zyk: mov r12, r10 mov r13, r6 movi r14, 4 ; eine Stelle links trap 25 ; sll36 mov r10, r12 ; nur Stellen [10:9] mov r12, r6 mov r13, r7 movi r14, 4 ; eine Stelle links trap 25 ; sll36 mov r6, r12 ; Stellen [8:0] high mov r7, r13 ; Stellen [8:0] low ; ; Test auf Ende der Konvertierung bei r8|r9 = 1 ; mov r12, r8 or r12, r9 seqi r12, 1 mov r12, r4 bnezc dez_end ; ; Nächste Stelle Ermitteln ; mov r13, r5 stelle: mov r14, r8 mov r15, r9 jals sub36 ; 10 Potenz abziehen bnez r14, fertig ; liess sich nicht mehr abziehen mov r4, r12 mov r5, r13 addi r7, 1 j stelle ; ; 10 Potenz durch 10 und Ende bei 1 ; fertig: mov r12, r8 mov r13, r9 movi r15, 10 jals div3618 mov r8, r12 mov r9, r13 j dez_zyk ; ; Einer Stelle aus r5 noch in r7 eiblenden ; dez_end: addu r7, r5 mov r5, r10 jrs r11 ;
Testprogramm: Ass-Quelle, Liste, Protokoll
SPHO-Format Start mit "G" im Monitor.
Include Datei für das Programm: spartan_equ.inc
UPs bin2bcd, d361836u, sub36, mulu18 und addu36 als Macro
Include Dateien für die Macros: bin2bcdm.inc, d361836um.inc, sub36m.inc, mulu18m.inc, addu36m.incTestprogramm: Ass-Quelle, Liste, SPHO-Format Start mit "G" im Monitor.