Linux slogan
Visite também: BR-Linux.org · Dicas-L · SoftwareLivre.org · UnderLinux

Linux banner
Linux banner
Linux banner
Linux banner


» Screenshot


Scripts

Linux user

Publicado por Leonardo Weslei Diniz em 10/06/2008    [ 10966 hits ]

Login: leonardoweslei, 121574 pontos

Homepage: http://www.agilesoft.com.br/

Download:



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



Scripts recomendados
   Script Linux recomendado Fatorial de N em Assembly
   Script Linux recomendado GAS "Hello World" o número de vezes definido pelo usuário
   Script Linux recomendado Calcula ano de nascimento - C + Assembly
   Script Linux recomendado Escrita de um número em binário na tela em Assembly Puro para Linux x86 (GNU Assembly)
   Script Linux recomendado Soma dois números lidos da memória

Comentários
[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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.