Advertisement
Guest User

Factorial MIPS

a guest
Oct 18th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data  
  2. entrada:     .asciiz "Introduzca un número por teclado: "  
  3. salida: .asciiz "\nEl factorial es: "
  4.  
  5. .globl main
  6.  
  7. .text      
  8.  
  9. main:
  10.  
  11.  li $v0, 4    
  12.  la $a0, entrada
  13.  syscall      # imprime la cadena 'entrada'
  14.  
  15.  li $v0, 5    # Llamada al sistema que lee un entero de teclado
  16.  syscall
  17.  move $a0, $v0 # Pasamos el entero leído a $a0 (argumento de la función fact)
  18.  
  19.  jal fact   # Llamada a la función fact
  20.  move $t0, $v0  
  21.  
  22.  li $v0, 4    
  23.  la $a0, salida
  24.  syscall      # imprime la cadena 'salida'
  25.  
  26.  move $a0, $t0  # Llamada al sistema que imprime un entero (resultado)
  27.  li $v0, 1
  28.  syscall
  29.  
  30.  li $v0, 10   # Llamada al sistema para finalizar la ejecución
  31.  syscall      # (fin de la función main)
  32.  
  33. fact:
  34.  beqz $a0, base # Si es el 0 es el caso base
  35.  
  36.  # Como el entero no era el 0...
  37.  addi $sp, $sp, -4 # Se apila el $ra para no perder la dirección
  38.  sw $ra, ($sp)  # de retorno
  39.  addi $sp, $sp, -4 # Se apila el argumento (n).
  40.  sw $a0, ($sp)  #
  41.  
  42.  addi $a0, $a0, -1 # $a0 = n-1
  43.  jal fact  # Llamada recursiva a la función para que calcule
  44.    # el fact de n-1
  45.  lw $a0, ($sp)  # Desapilamos el valor n que habíamos guardado
  46.  addi $sp, $sp, 4
  47.  lw $ra, ($sp)  # Desapilamos el $ra que habíamos guardado
  48.  addi $sp, $sp, 4
  49.  
  50.  mult $a0, $v0  # Multiplicamos $a0 por $v0, es decir: n*(n-1)!
  51.  mflo $v0  # En $v0 tenemos el fact de n
  52.  jr $ra   # Fin de la función fact
  53.  
  54.   base:   # A esta parte se llega si el argumento es 0
  55.  li $v0, 1  # El fact de 0 es 1. El resultado se
  56.  jr $ra   # devuelve en $v0 y se sale de la función.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement