Created
January 22, 2014 01:04
-
-
Save FernandaBernardo/8551732 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.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