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



» Screenshot
Linux: AfterStep no Red Hat
Por dlr
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

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

Login: leonardoweslei, 115745 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 Escrita de número em binário em Assembly Puro para Linux 64 bits (Nasm - Netwide Assembler)
   Script Linux recomendado Calcula ano de nascimento - C + Assembly
   Script Linux recomendado ToUpperCase em Assembler 8086
   Script Linux recomendado Hora do sistema
   Script Linux recomendado Escrita de um número em decimal na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembly)

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.