Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- init:
- ;; Initialisierung:
- ;; ---------------
- nop ;;nop, damit das Programm nicht mit Sprungmarke beginnt
- ini_bcd or.i r1,r0,dual_high ;;setze den oberen Teil der zu wandelnden Dualzahl
- sll.i r1,r1,16 ;;da 16 bit, in obere Hälfte shiften
- or.i r1,r1,dual_low ;;setze den unteren Teil der zu wandelnden Dualzahl
- add.i r9,r0, dualbits ;;setze Laufvariable auf Anzahl der benötigten Bits
- add.i r2,r0,0 ;;aktueller BCD-Wert = 0
- add.i r3,r0,X"f" ;;setze initiale Tetradenmaske(1111)
- add.i r5,r0,5 ;;setze initialen Vergleichswert
- add.i r7,r0,3 ;;setze initialen Korrekturwert
- lw.i r31,disp(r0) ;;setze Display auf 0
- ;; BCD-Korrektur:
- ;; -------------
- bcd:
- sub.i r9,r9,1 ;;Laufvariable dekrementieren
- add.i r10,r0,0-4 ;;setze den Tetradenindex (-4 für initiales Inkrementieren)
- srl r13,r1,r9 ;;shifte um die Laufvariable, auf “höchstes” Bit
- and.i r14,r13,1 ;;momentanes Dualbit ermitteln (and 0000 0001)
- sll.i r2,r2,1 ;;shifte den BCDwert (Platz machen)
- or r2,r14,r2 ;;füge bestimmtes Bit an
- beqz r9,displ ;;Abbruch, wenn fertig
- te_ko:
- add.i r10,r10,4 ;;Tetradenindex inkrementieren
- sub.i r12,r10,(digits-1) * 4 ;;bestimme Abbruchbedingung für die Korrektur
- sll r4,r3,r10 ;;Shifte Tetradenmaske um Tetratenindex(Tetradenfenster)
- sll r6,r5,r10 ;;Shifte Tetradenvergleichswert
- sll r8,r7,r10 ;;Shifte Tetradenkorrekturwert
- and r14,r2,r4 ;;wähle Bitfeld für Korrekturbed.
- slt r11,r14,r6 ;;muss korrigiert werden? (ist die Tetrade > 4)
- beqz r11,plus_3 ;;falls ja füge den Korrekturwert hinzu
- beqz r12,bcd ;;fertig mit dieser Korrekturrunde?
- j te_ko ;;wiederhole Korrektur (Übertrag)
- plus_3:
- add r2,r2,r8 ;;füge den Korrektur-Wert (3 für die jeweilige Tetrade) hinzu
- beqz r12,bcd ;;fertig mit Korrektur?
- j te_ko ;;springe zurück
- displ:
- sw.i zero(r31),r2 ;;speichere die fertige BCD im Displayregister
- ende j ende ;;infloop, damit der Prozessor nicht abstürzt o.ä.
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement