Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- buf: .space 12
- .align 2
- .text
- main: # Programmbeginn A4a
- lw a0, 0x230(zero) # Auszugebende Zahl laden
- add a1, zero, buf # Adresse des Ausgabepuffers
- jal int2str # Unterprogramm aufrufen
- # danach steht in a0 die Länge der
- # Zeichenkette
- # String ausgeben
- add a2, zero, a0 # Länge steht in a0
- add a0, zero, 1 # stdout
- add a1, zero, buf # Adresse des Puffers
- add a7, zero, 64 # syscall 64: write
- scall
- # Programm beenden
- add a0, zero, 0 # exit code 0
- add a7, zero, 93 # sycall 93: exit
- scall
- int2str:
- add t0, zero, 10
- add t3, zero, 1
- beq a0, zero, _int2str_max # Spezialfall: "0" ausgeben
- add t3, zero, 10 # t3= Maximale Länge der Ausgabe
- lui t1, 0x3b9ad # t1= 0x3b9ad000
- add t1, t1, -0x600 # t1= 0x3b9ad000-0x600=0x3b9aca00
- # = 1000000000 = 10^9
- bltu t1, a0, _int2str_max # Alle 10 Stellen ausgeben
- _int2str_getlen: # Anzahl der Stellen ermitteln
- add t3, t3, -1 # Länge der Ausgabe reduzieren
- div t1, t1, t0
- bltu a0, t1, _int2str_getlen
- _int2str_max:
- add t2, t3, a1 # t2= Zeiger auf Ende des Puffers
- _int2str_loop:
- remu t1, a0, t0
- divu a0, a0, t0
- add t1, t1, 48 # Zahl 0-9 in ASCII-Code '0'-'9' umwandeln
- add t2, t2, -1
- sb t1, 0(t2)
- blt a1, t2, _int2str_loop
- add a0, zero, t3 # Länge aus t3 zurückliefern
- ret # kehre zum Aufrufer zurück
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement