-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathfatRecursive.asm
More file actions
43 lines (33 loc) · 912 Bytes
/
fatRecursive.asm
File metadata and controls
43 lines (33 loc) · 912 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
.data
msg1: .asciiz "Digite um numero:\n"
msg2: .asciiz "O fatorial do número digitado é:\n"
.text
li $v0, 4 #Printa a mensagem 1
la $a0, msg1
syscall
li $v0, 5 #Lê o número
syscall
move $a1, $v0 #a1 armazena o valor digitado
jal fatorial #Chama a função fatorial
mul $a1, $a1, $s0 #última multiplicação
li $v0, 4
la $a0, msg2 #Printa a mensagem 2
syscall
li $v0, 1 #Printa a resposta
move $a0, $a1
syscall
li $v0, 10 #Encerra o programa
syscall
fatorial:
subi $sp, $sp, 8 #Aloca espaço na pilha e empilha
sw $a1, 4($sp)
sw $ra, 0($sp)
beq $a1, 1, base #Se chegou no valor 1, pula para o caso base
sub $a1, $a1, 1 #Subtrai 1 e chama a função fatorial de novo
jal fatorial
mul $a1, $a1, $s0 #Multiplica o valor anterior com o atual
base:
lw $s0, 4($sp) #Caso base, desempilha e volta na recursão
lw $ra, 0($sp)
addi $sp, $sp, 8
jr $ra