.text .globl main main: addiu $a0, $zero, 5 # Initialisiere Argumentregister jal fact # Aufruf der Fakultätsprozedur move $a1, $v0 # Fakultätsresultat nach $a1 j ende fact: addi $sp, $sp, -8 # Reserviere Stackplatz für zwei Einträge sw $ra, 4($sp) # Sichere Rücksprungadresse sw $a0, 0($sp) # Sichere Argumentregister slti $t0, $a0, 1 # Teste, ob arg < 1 beq $t0, $zero, L1 # Falls arg >= 1, goto L1 addi $v0, $zero, 1 # return 1 addi $sp, $sp, 8 # Entferne Stackelement jr $ra # Rücksprung L1: addi $a0, $a0, -1 # arg >= 1, dekrementiere um 1 jal fact # rekursiver Aufruf von fact lw $a0, 0($sp) # restauriere $a0 von Stack lw $ra, 4($sp) # restauriere $ra addi $sp, $sp, 8 # Entferne Stackelemente mul $v0, $a0, $v0 # return arg * fact (arg-1) jr $ra # Rücksprung ende: