Advertisement
Victor_Queiroz

Numero de ouro a partir da sequencia de fibonacci

May 4th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #  Univercidade Federal Rural do Rio de Janeiro - Ciência da Computação
  2.  
  3. # Victor Baéssa de Queiroz
  4.  
  5. .data
  6.     nFibo1:     .double 1
  7.     nFibo2:     .double 1
  8.     nFibo3:     .double 0
  9.     residuo:    .double 1
  10.     precisao:   .double 0.00001
  11.     ndOuro:     .double 1.6
  12.     ndOuroAnt:  .double 1
  13.     zero:       .double 0.0
  14.     menos1:     .double -1.0
  15.     mensagem:       .asciiz "\nNumero de ouro: "
  16.     mensagem1:      .asciiz "\n"
  17.  
  18. .text
  19.     main:
  20.         # Inicia as variaveis
  21.        
  22.         ldc1 $f2,  nFibo1
  23.         ldc1 $f4,  nFibo2
  24.         ldc1 $f6,  nFibo3
  25.         ldc1 $f8,  residuo
  26.         ldc1 $f10, precisao
  27.         ldc1 $f12, ndOuro
  28.         ldc1 $f14, ndOuroAnt
  29.         ldc1 $f16, zero
  30.         ldc1 $f18, menos1
  31.                
  32.     while:
  33.        
  34.         mov.d $f14, $f12        # Faz com que o numero de ouro anterior receba o numero de ouro atual
  35.            
  36.         div.d $f12, $f4, $f2        # Gera um novo numero de ouro a partir da sequencia de fibonacci
  37.        
  38.         sub.d $f8, $f12, $f14       # Gera um novo residuo para verificação da precisão
  39.        
  40.         c.lt.d  $f8, $f16       # Verifica se o residuo é negativo
  41.        
  42.         bc1t resNegativo        # Caso o residuo seja negativo, vai para o label resNegativo
  43.        
  44.                         # Caso o residuo não seja negativo
  45.         mov.d $f6, $f2          # O registrador que armazena nFibo3 recebe o valor de nFibo1
  46.        
  47.         mov.d $f2, $f4          # O registrador que armazena nFibo1 recebe o valor de nFibo2
  48.        
  49.         add.d $f4, $f2, $f6     # O registrador que armazena nFibo2 recebe a soma de nFibo1 e nFibo3
  50.        
  51.         c.lt.d $f10, $f8        # Verifica se a precisão é mmenor que o residuo, se sim da um jump para o label while
  52.        
  53.         bc1f exit
  54.        
  55.         j while             # Se precisão é maior ou igual ao residuo, dá um jump para o label exit
  56.            
  57.      resNegativo:              
  58.        
  59.         mul.d $f8, $f8,$f18     # O residuo é multiplicado por -1, para que volte a ser positivo
  60.        
  61.         mov.d $f6, $f2          # O registrador que armazena nFibo3 recebe o valor de nFibo1
  62.        
  63.         mov.d $f2, $f4          # O registrador que armazena nFibo1 recebe o valor de nFibo2
  64.        
  65.         add.d $f4, $f2, $f6     # O registrador que armazena nFibo2 recebe a soma de nFibo1 e nFibo3
  66.                
  67.         j while             # Dá um jump para o label while
  68.      
  69.      exit:
  70.      
  71.         li $v0, 4
  72.        
  73.         la $a0, mensagem
  74.        
  75.         syscall
  76.        
  77.         li $v0, 3
  78.        
  79.         syscall
  80.        
  81.         li $v0, 4
  82.        
  83.         la $a0, mensagem1
  84.  
  85.         syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement