### Demo-Programm für MIPS für die Vorlesung ###
###        "Grundlagen der Informatik"       ###
###               Jörg Roth                  ###
###
### fakultaet: Berechnung von x!
###
### $s0:   Eingabe x
### $s1:   Ergebnis
### $s2:   Konstante 1 zum Dekrementieren von x sowie zum Vergleich, ob x>1

	.text
main:
     li $v0, 5              # Eingabe einlesen
     syscall
     or $s0, $zero, $v0     # $s0 := Eingabe; $s0 ist die Variable, die dekrementiert wird

### Hier beginnt die Berechnung ###

     addi $s1,$zero,1       # $s1 := 1; $s1 ist die Variable die "hochmultipliziert" wird  
     or $s2, $zero,$s1      # $s2 := 1; als Vergleichswert und zum dekrementieren, bleibt konstant auf 1

loop:
     mult $s0, $s1          # 
     mflo $s1               # $s1 := $s0 * $s1;
     sub $s0,$s0,$s2        # $s0 := $s0 - 1;   (Bemerkung: es gibt kein subi)
     bne $s0,$s2,loop       # while ($s0<>1);

### Hier endet die Berechnung ###

     li $v0, 1              # Resultat ausgeben
     or $a0, $zero, $s1     # in $s1 stand das Ergebnis
     syscall


