Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. .data
  2. buf: .space 12
  3. .align 2
  4.  
  5. .text
  6. main: # Programmbeginn A4a
  7. lw a0, 0x230(zero) # Auszugebende Zahl laden
  8. add a1, zero, buf # Adresse des Ausgabepuffers
  9. jal int2str # Unterprogramm aufrufen
  10. # danach steht in a0 die Länge der
  11. # Zeichenkette
  12.  
  13. # String ausgeben
  14. add a2, zero, a0 # Länge steht in a0
  15. add a0, zero, 1 # stdout
  16. add a1, zero, buf # Adresse des Puffers
  17. add a7, zero, 64 # syscall 64: write
  18. scall
  19.  
  20. # Programm beenden
  21. add a0, zero, 0 # exit code 0
  22. add a7, zero, 93 # sycall 93: exit
  23. scall
  24.  
  25. int2str:
  26. add t0, zero, 10
  27. add t3, zero, 1
  28. beq a0, zero, _int2str_max # Spezialfall: "0" ausgeben
  29. add t3, zero, 10 # t3= Maximale Länge der Ausgabe
  30. lui t1, 0x3b9ad # t1= 0x3b9ad000
  31. add t1, t1, -0x600 # t1= 0x3b9ad000-0x600=0x3b9aca00
  32. # = 1000000000 = 10^9
  33. bltu t1, a0, _int2str_max # Alle 10 Stellen ausgeben
  34.  
  35. _int2str_getlen: # Anzahl der Stellen ermitteln
  36. add t3, t3, -1 # Länge der Ausgabe reduzieren
  37. div t1, t1, t0
  38. bltu a0, t1, _int2str_getlen
  39.  
  40. _int2str_max:
  41. add t2, t3, a1 # t2= Zeiger auf Ende des Puffers
  42.  
  43. _int2str_loop:
  44. remu t1, a0, t0
  45. divu a0, a0, t0
  46. add t1, t1, 48 # Zahl 0-9 in ASCII-Code '0'-'9' umwandeln
  47. add t2, t2, -1
  48. sb t1, 0(t2)
  49. blt a1, t2, _int2str_loop
  50.  
  51. add a0, zero, t3 # Länge aus t3 zurückliefern
  52. ret # kehre zum Aufrufer zurück
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement