Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. init:
  2. ;; Initialisierung:
  3. ;; ---------------
  4. nop ;;nop, damit das Programm nicht mit Sprungmarke beginnt
  5. ini_bcd or.i r1,r0,dual_high ;;setze den oberen Teil der zu wandelnden Dualzahl
  6. sll.i r1,r1,16 ;;da 16 bit, in obere Hälfte shiften
  7. or.i r1,r1,dual_low ;;setze den unteren Teil der zu wandelnden Dualzahl
  8.  
  9. add.i r9,r0, dualbits ;;setze Laufvariable auf Anzahl der benötigten Bits
  10. add.i r2,r0,0 ;;aktueller BCD-Wert = 0
  11. add.i r3,r0,X"f" ;;setze initiale Tetradenmaske(1111)
  12. add.i r5,r0,5 ;;setze initialen Vergleichswert
  13. add.i r7,r0,3 ;;setze initialen Korrekturwert
  14. lw.i r31,disp(r0) ;;setze Display auf 0
  15. ;; BCD-Korrektur:
  16. ;; -------------
  17. bcd:
  18. sub.i r9,r9,1 ;;Laufvariable dekrementieren
  19. add.i r10,r0,0-4 ;;setze den Tetradenindex (-4 für initiales Inkrementieren)
  20. srl r13,r1,r9 ;;shifte um die Laufvariable, auf “höchstes” Bit
  21. and.i r14,r13,1 ;;momentanes Dualbit ermitteln (and 0000 0001)
  22. sll.i r2,r2,1 ;;shifte den BCDwert (Platz machen)
  23. or r2,r14,r2 ;;füge bestimmtes Bit an
  24. beqz r9,displ ;;Abbruch, wenn fertig
  25. te_ko:
  26. add.i r10,r10,4 ;;Tetradenindex inkrementieren
  27. sub.i r12,r10,(digits-1) * 4 ;;bestimme Abbruchbedingung für die Korrektur
  28. sll r4,r3,r10 ;;Shifte Tetradenmaske um Tetratenindex(Tetradenfenster)
  29. sll r6,r5,r10 ;;Shifte Tetradenvergleichswert
  30. sll r8,r7,r10 ;;Shifte Tetradenkorrekturwert
  31. and r14,r2,r4 ;;wähle Bitfeld für Korrekturbed.
  32. slt r11,r14,r6 ;;muss korrigiert werden? (ist die Tetrade > 4)
  33. beqz r11,plus_3 ;;falls ja füge den Korrekturwert hinzu
  34. beqz r12,bcd ;;fertig mit dieser Korrekturrunde?
  35. j te_ko ;;wiederhole Korrektur (Übertrag)
  36. plus_3:
  37. add r2,r2,r8 ;;füge den Korrektur-Wert (3 für die jeweilige Tetrade) hinzu
  38. beqz r12,bcd ;;fertig mit Korrektur?
  39. j te_ko ;;springe zurück
  40. displ:
  41. sw.i zero(r31),r2 ;;speichere die fertige BCD im Displayregister
  42. ende j ende ;;infloop, damit der Prozessor nicht abstürzt o.ä.
  43. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement