Pular para o conteúdo

Fatorial em assembly

Recursividade em assembly também é possível!

Fatorial em assembly.
Leonardo Weslei Diniz leonardoweslei
Hits: 22.587 Categoria: C/C++ Subcategoria: Assembly
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Recursividade em assembly também é possível!

Fatorial em assembly.
Download fatorial_exterminador3.s Enviar nova versão

Esconder código-fonte

#By Exterminador3
.data
   str1: .asciiz "\n\tDigite um valor : "
.text
.globl main.            #main()
main:         # Ponto de entrada...
      li $v0,4      # Pede ao utilizador o valor N
      la $a0,str1
      syscall            
      li $v0,5
      syscall             
      addi $a0,$v0,0   # Valor lido fica em a0
      jal fact      # call fact(n)
      addi $a0,$v0,0   # Escreve o resultado
      li $v0,1      
      syscall
      li $v0,10      # Fim...
      syscall

fact:
      sub $sp,$sp,8   # Ajusta a stack para 2 items
      sw $ra, 4($sp)   # Guarda endereço de retorno
      sw $a0, 0($sp)   # Guarda argumento n

      slt $t0,$a0,1   # testa se n < 1
      beq $t0,$zero,L1   # Se n >= 1, vai fazer outra chamada

      li $v0,1      # Se não for devolve 1
      add $sp,$sp,8   # liberta o espaço da stack antes de
      jr $ra      # retornar

L1:   sub $a0,$a0,1   # Nova chamada: novo argumento (n - 1)
      jal fact      # call fact com (n - 1)

         # Ponto de retorno da chamada recursiva:
      lw $a0, 0($sp)   # Recupera o argumento passado
      lw $ra, 4($sp)   # Recupera o endereço de retorno
      add $sp,$sp,8   # Liberta o espaço da stack

      mul $v0,$a0,$v0   # Calcula n * fact (n - 1)
      jr $ra            # Retorna com o resultado

Árvore binária de busca em Assembler 8086

Ano bissexto em assembly

Escrita de um número em hexadecimal na tela em Assembly Puro para Linux 64 bits (GNU Assembly

Inverter uma string, Assembly8086

ToUpperCase em Assembler 8086

#1 Comentário enviado por albertguedes em 11/06/2008 - 00:33h
Ai Leonardo. Cê não tem idéia de como tem gente carente de aprender assembler decentemente aqui no VOL.
Você é um dos poucos que publicaram isso, e faço votos pela sua iniciativa.
Tive medo de faltar comentários no código, que em assembler, código sem coments é o mesmo que não ler nada do código.
Só me diz uma coisa, esse código é pra 'nasm' mesmo ?
#2 Comentário enviado por leonardoweslei em 11/06/2008 - 13:38h
Cara eu só testei msm no Spim e no Xspim, e nos dois funciona direitinho.OK
#3 Comentário enviado por HelioCampos em 12/06/2008 - 08:01h
Como assembler é dependente de máquina e sistema operacional.
Seria bom vc dar as configurações e o sistema operacional em que vc está escrevendo a rotina.
#4 Comentário enviado por leonardoweslei em 12/06/2008 - 10:24h
Tem um programa chamado SPIM (para windows, para linux é XSPIM) ele roda programas em assembler MIPS.

Contribuir com comentário

Entre na sua conta para comentar.