Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Fatorial em assembly

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Fatorial em assembly

    Recursividade em assembly também é possível!

    Fatorial em assembly.

    [ Download: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ]

    Código:
    #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
    Creditos : Exterminador3 and vivaolinux


X
Working...
X