### Demo-Programm für MIPS für die Vorlesung ###
###        "Grundlagen der Informatik"       ###
###               Jörg Roth                  ###
###
### inttoascii: Umwandeln einer positiven ganzen Zahl in die entsprechende Zeichenkette
### - Es wird nicht überprüft, ob die eingegebene Zahl positiv ist
### - Das Programm funktioniert auch bei Eingabe der 0
### - Die resultierende Zeichenkette wird von hinten nach vorne zusammengebaut
###
### [str]: Speicherbereich für die resultierende Zeichenkette
### $s0:   Eingegebene Zahl
### $s1:   Zeiger auf das nächste Zeichen der Zeichenkette (wandert von hinten nach vorne)
### $s2:   Konstante 10 zur Division
### $s3:   Konstante 48 zur Umrechnung der ASCII-Ziffern in Ganzzahl-Werte
### $s4:   hält das aktuelle Zeichen der Zeichenkette

        .data
str:    .space 100          # Platz für die Zeichenkette - wird von hinten nach vorne gefüllt
strend: .byte 0             # Die 0-Terminierung der Zeichenkette

	.text
main:
     li $v0, 5              # Eingabe einlesen
     syscall
     or $s0, $zero, $v0     # $s0 := Eingabe; 

### Hier beginnt die Berechnung ###

     la $s1,strend          # $s1 := &str; hier wird der Zeiger auf das nächste Zeichen gehalten
     addi $s2,$zero,10      # $s2 := 10; hier steht konstant die 10 zur Division
     addi $s3,$zero,48      # $s3 := 48; hier steht konstant die 48, um den Wert 0 in die ASCII '0' umzuwandeln

loop:
     addi $s1,$s1,-1        # $s1 := $s1 -1; wandere im String nach vorne
     div $s0,$s2
     mfhi $s4               # $s4 := $s0 mod 10
     mflo $s0               # $s0 := $s0 div 10
     add $s4,$s4,$s3        # Bilde Integer-Wert [0..9] auf ASCII-Ziffer ['0'...'9'] ab
     sb $s4,($s1)           # Speicher Zeichen in String
     bgtz $s0,loop          # Wenn Zahl noch nicht komplett dargestellt, wiederhole

### Hier endet die Berechnung ###

     li $v0, 4              # Resultat ausgeben
     or $a0,$zero,$s1       # $s1 zeigt auf das erste Zeichen
     syscall
