Skip to content

Instantly share code, notes, and snippets.

@stehgold
Created November 19, 2018 18:59
Show Gist options
  • Save stehgold/9ac7a4c06a4190373f3501815f1dd449 to your computer and use it in GitHub Desktop.
Save stehgold/9ac7a4c06a4190373f3501815f1dd449 to your computer and use it in GitHub Desktop.
MIPS Assembler fakultät
.text
main: la $a0, eingabe # Eingabeaufforderung
li $v0, 4
syscall # ausgeben
li $v0, 5
syscall # Integer word von Tastatur einlesen -> v0
sub $s0, $s0, $s0 # s0 = 0
li $s1, 14 # s1 = 14, IN_MAX + 1
add $s0, $v0, $0 # s0 = v0 = eingelesene Zahl
la $a0, newline # Zeilenvorschub
li $v0, 4
syscall # ausgeben
bge $s0, $s1, main # IN_MAX ueberschritten, neue Eingabeaufforderung
move $a0, $s0 # zahl als argument uebergeben
jal fac # call fac
move $s0, $v0 # fakultaet sichern
la $a0, ausgabe # Ausgabetext
li $v0, 4
syscall # ausgeben
move $a0, $s0 # Fakultaet in a0
li $v0, 1
syscall # ausgeben
la $a0, newline
li $v0, 4
syscall
endmain: j endmain
fac: addi $sp, $sp, -12 # Platz auf dem Stack fuer 3 Register
sw $s0, 0($sp) # PUSH s0
sw $s1, 4($sp) # PUSH s1
sw $ra, 8($sp) # PUSH ra
move $s0, $a0 # copy Argument
li $s1, 1 # Base case
beq $s0, $s1, basecase # base case ?
addi $a0, $a0, -1 # argument--
jal fac # call fac
mult $s0, $v0 # Ergebnis mit Argument multiplizieren (Wo kommt v0 her ?)
mflo $v0 # und als Ergebnis zurueckliefern
j endfac
basecase: li $v0, 1 # Basecase = 1
endfac: lw $s0, 0($sp) # POP s0
lw $s1, 4($sp) # POP s1
lw $ra, 8($sp) # POP ra
addi $sp, $sp, 12 # restore SP
jr $ra # return
.data
eingabe: .asciiz "Bitte eine positive Zahl von 1-13 eingeben: "
newline: .asciiz "\n"
ausgabe: .asciiz "Die Fakultaet betraegt: "
maxin: .word 13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment