Skip to content

Instantly share code, notes, and snippets.

@FernandaBernardo
Created January 22, 2014 01:04
Show Gist options
  • Save FernandaBernardo/8551732 to your computer and use it in GitHub Desktop.
Save FernandaBernardo/8551732 to your computer and use it in GitHub Desktop.
.text
.globl main
main:
la $a0, $aviso #armazena a mensagem
li $v0, 4 #chama o print_String
syscall #imprime a mensagem
li $v0, 5 # Serviço 5 : lê inteiro
syscall
jal fator #chama a subrotina
j exit #chama o exit que acaba o programa
imprime:
la $a0, $numZero #armazena a mensagem
li $v0, 4 #chama o print_String
syscall #imprime a mensagem
j exit #chama o exit que acaba o programa
imprime2:
la $a0, $numUm #armazena a mensagem
li $v0, 4 #chama o print_String
syscall #imprime a mensagem
j exit #chama o exit que acaba o programa
fator:
sw $v0, $numero #coloca o inteiro armazenado no v0 n main em número
ld $a1, $numero #guardando o número no registrador a1
beq $a1, 0, imprime #se o número for igual a zero, chama a subrotina imprime
beq $a1, 1, imprime2 #se o número for igual a zero, chama a subrotina imprime
j loop1 #vai para loop1
loop1:
li $a1, 1 #coloca em a1 o valor 1
ld $a2, $aux #coloca em a2 o valor de aux
add $a3, $a2, $a1 #soma a1 com a2 e coloca o resultado em a3
sw $a3, $aux #cloca o valor de a3 em aux (aux++)
ld $a1, $aux #coloca o valor de aux em a1
ld $a2, $numero #guardando o número no registrador a2
bgt $a1, $a2, exit #se o valor se a1 é maior que a2 termina o programa
j loop2 #vai para loop2
loop2:
ld $a1, $aux #coloca o valor de aux em a1
ld $a2, $numero #guardando o número no registrador a2
rem $a0, $a2, $a1 #faz o resto da divisão de a2 com a1 e coloca em a0
bnez $a0, loop1 # se a0 não é igual a 0 volta para loop1
ld $a0, $aux #coloca o valor de aux em a0
li $v0, 1 #chama o print_int
syscall #imprime o número
la $a0, $espaco #coloca o conteúdo de espaço em a0
li $v0, 4 #chama print_String
syscall #imprime o espaço
ld $a1, $numero # coloca o conteúdo de numero em a1
ld $a2, $aux #coloca o conteúdo de aux em a2
divu $a3, $a1, $a2 #faz a divisão inteira de a1 por a2 e coloca o valor em a3
sw $a3, $numero #coloca o valor de a3 em numero
j loop2 #volta para loop2
exit:
li $v0, 10 #termina a execução do programa
syscall
.data
$numero: .word 0
$aux: .word 1
$numZero: .asciiz "Numero zero"
$numUm: .asciiz "Número um"
$espaco: .asciiz " "
$aviso: .asciiz "Digite um numero:"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment