Advertisement
Guest User

Raiz en MIPS

a guest
Oct 18th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #Arreglos realizado por:
  2. #Luis Jimenez R
  3. #Sebastian Quiroga R
  4. #Andres Sanchez C
  5.  
  6.  
  7. # Algoritmo
  8. #############################
  9. #                           #
  10. #       Text Segment        #
  11. #                           #
  12. #############################
  13.  
  14.     .text
  15.    .globl main
  16.  
  17.  
  18.  
  19.  
  20. main:                # comienzo del programa
  21.  
  22.  
  23.     li $v0, 4        # llama al servicio de imprimir una cadena
  24.     la $a0, prompt_indice    # carga como argumento la cadena
  25.     syscall            # imprime la cadena
  26.  
  27.     li $v0, 5        # llama al servicio de leer un entero
  28.     syscall            # lee un entero
  29.     move $t0, $v0        # carga el ?ndice de la ra?z
  30.  
  31.     li $v0, 4        # llama al servicio de imprimir una cadena
  32.     la $a0, prompt_radi    # carga como argumento la cadena
  33.     syscall            # imprime la cadena
  34.  
  35.     li $v0, 6        # llama al servicio de leer un flotante
  36.     syscall            # lee un flotante
  37.     mov.s $f12, $f0        # guarda el radicando en $f12
  38.    
  39.     move $a0, $t0        # carga el indice de la raiz
  40.  
  41.     rem $t0, $a0, 2        # calcula el modulo
  42.    
  43.  
  44.     beqz $t0, comprobar_neg    # si el indice es par, hay que comprobar si el radicando
  45.                # es negativo
  46.     j cont_radi        # si no es negativo contin?a el proceso
  47.  
  48. comprobar_neg:            # si el ?ndice es par, comprueba si el radicando es
  49.                # negativo
  50.  
  51.     l.s   $f1, flot1        # carga 0.0 en $f1 para hacer la comprobaci?n
  52.    
  53.     c.lt.s $f12, $f1    # comprueba si $f12 es negativo
  54.  
  55.     bc1t, imaginaria    # si es negativo, sale del algoritmo, porque la soluci?n es
  56.                # imaginaria
  57.  
  58. cont_radi:
  59.  
  60.     mov.s $f1, $f12        # guarda el radicando (argumento) en $f1
  61.  
  62.     l.s $f0, flot2        # carga 1.0 en $f0
  63.     c.eq.s $f1, $f0        # comprueba si el flotante a radicalizar es igual que 1
  64.     bc1t inm        # si es igual que 1, sale devolviendo 1
  65.  
  66.     l.s $f0, flot1        # carga 0.0 en $f0
  67.     c.eq.s $f1, $f0        # comprueba si el flotante a radicalizar es igual que 0
  68.     bc1t inm        # si es igual que 0, sale devolviendo 0
  69.    
  70.     l.s $f0, flot2        # carga $f0 con 1.0 si el numero es menor que 1
  71.     l.s $f2, flot3        # carga $f2 con 2.0
  72.     j raiz_loop        # salta a calcular la raiz para un numero menor que 1
  73.  
  74.  
  75.  
  76. #            ***** CALCULAR LA RAIZ *****
  77.  
  78. raiz_loop:            # bucle que va comprobando si un n?mero es el que estamos
  79.                # buscando
  80.  
  81.     add.s $f3, $f1, $f0    # carga en $f3 la suma de $f1 y $f0
  82.  
  83.    
  84.     div.s $f4, $f3, $f2    # carga en $f4 la distancia media entre $f3 y $f2
  85.  
  86.     mul.s $f5, $f4, $f4    # guarda en $f5 el cuadrado de la media entre $f1 y $f0
  87.     move $t0, $a0        # carga
  88.  
  89. comprobar_indice:        # si el ?ndice es distinto de 2
  90.  
  91.     beq $t0, 2, seguir    # cuando se haya multiplicado el posible radicando por si
  92.                # mismo tantas veces como indique el ?ndice, se sigue el
  93.                # proceso de determinar si ese radicando es el que buscamos
  94.     mul.s $f5, $f5, $f4    # multiplica el radicando por si mismo
  95.     sub $t0, $t0, 1        # decrementa el ?ndice
  96.     j comprobar_indice    # vuelve a multiplicar el posible radicando por si mismo
  97.  
  98. seguir:                # contin?a con la comprobaci?n del posible radicando
  99.  
  100.     c.eq.s $f5, $f12    # comprueba si el radicando elevado al ?ndice $a0 es el que
  101.                # buscamos
  102.     bc1t encontrado        # si es el que buscamos, no comprobamos mas, saltamos a
  103.                # encontrado
  104.  
  105.     c.eq.s $f0, $f4        # comprobamos que no estamos comprobando el mismo n?mero
  106.                # que el anterior (error de precisi?n)
  107.     bc1t encontrado        # si se ha llegado al l?mite de precisi?n, el resultado
  108.                # (aproximado) es $f4
  109.     c.eq.s $f1, $f4        # comprobamos que no estamos comprobando el mismo n?mero
  110.                # que el anterior (error de precisi?n)
  111.     bc1t encontrado        # si se ha llegado al l?mite de precisi?n, el resultado
  112.                # (aproximado) es $f4
  113.  
  114.     c.lt.s $f5, $f12    # si el posible radicando que hemos analizado elevado al
  115.                # ?ndice es menor que $f12
  116.     bc1t menor        # analizamos un numero mayor
  117.     j mayor            # si no, analizamos un n?mero menor
  118.  
  119. menor:                # si el t?rmino que hemos analizado es menor que el que
  120.                # estamos buscando
  121.  
  122.     c.lt.s $f1, $f0        # determina si $f1 es menor que $f0
  123.     bc1t guardar_f0        # guarda el t?rmino mayor (que est? en $f0)
  124.     j guardar_f1        # guarda el t?rmino mayor (que est? en $f1)
  125.  
  126. mayor:                # si el t?rmino que hemos analizado es mayor que el que
  127.                # estamos buscando
  128.  
  129.     c.lt.s $f1, $f0        # determina si $f1 es menor que $f10
  130.     bc1t guardar_f1        # guarda el t?rmino menor (que est? en $f1)
  131.     j guardar_f0        # guarda el t?rmino menor (que est? en $f10)
  132.  
  133. guardar_f0:            # guarda $f0
  134.  
  135.     mov.s $f1, $f4        # guarda en $f1 $f4 para hacer la siguiente comprobaci?n
  136.     j raiz_loop        # comprueba el siguiente n?mero
  137.  
  138. guardar_f1:            # guarda $f1
  139.  
  140.     mov.s $f0, $f4        # guarda en $f0 $f4 para hacer la siguiente comprobaci?n
  141.     j raiz_loop        # comprueba el siguiente n?mero
  142.  
  143. #            ***** RESULTADOS INMEDIATOS *****
  144.  
  145. inm:                # si son raices inmediatas (0 ? 1) con cualquier ?ndice
  146.  
  147.     li $v0, 2        # llama al servicio de imprimir un flotante
  148.     syscall            # imprime el resultado
  149.  
  150.     li $v0, 10        # llama al servicio de terminar programa
  151.     syscall            # termina el programa
  152.  
  153.  
  154.  
  155. #            ***** MOSTRAR EL RESULTADO *****
  156.  
  157.  
  158.  
  159. encontrado:            # si ha encontrado ya la ra?z, o ha encontrado un resultado
  160.                # aproximado
  161.  
  162.     li $v0, 4        # llama al servicio de imprimir una cadena
  163.     la $a0, prompt_result    # carga como argumento la cadena ("\nEl resultado es: ")
  164.     syscall            # imprime la cadena
  165.    
  166.  
  167.    
  168.     li $v0, 2        # llama al servicio de imprimir un flotante
  169.     mov.s $f12, $f4        # carga $f4 como argumento
  170.     syscall            # imprime la ra?z del n?mero
  171.  
  172.     li $v0, 10        # llama al servicio de terminar programa
  173.     syscall            # termina el programa
  174.  
  175. imaginaria:
  176.  
  177.     la $v0, 4        # llama al servicio de imprimir una cadena
  178.     la $a0, prompt_imagin    # carga la cadena ("\nel resultado es imaginario")
  179.     syscall            # imprime la cadena
  180.  
  181.     li $v0, 10        # llama al servicio de terminar el programa
  182.     syscall            # termina el programa
  183.  
  184.     .data
  185.  
  186. prompt_indice:    .asciiz "Introduzca el indice de la raiz: "
  187. prompt_radi:    .asciiz "\nIntroduzca el argumento: "
  188. prompt_result:    .asciiz "\nEl resultado es: "
  189. prompt_imagin:    .asciiz "\nel resultado es imaginario"
  190. flot1: .float 0.0
  191. flot2: .float 1.0
  192. flot3: .float 2.0
  193.  
  194. #
  195. # fin de algoritmo de radicalizaci?n 1.0.asm
  196. #
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement