Last active
November 28, 2017 13:58
-
-
Save williaanlopes/628e0a6944070a6b8f2b7011fda8ae58 to your computer and use it in GitHub Desktop.
Multiplicando dois números em MIPS - Compilador MARS 4.5
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
.data | |
# primeiro numero | |
valorA: .asciiz "\nDigite Multiplicalicando: " | |
# segundo numero | |
valorB: .asciiz "Digite Multiplicalicador: " | |
# resposta | |
resposta: .asciiz "Resposta da Multiplicalicacao: " | |
# pula uma linha a cada saida na tela | |
.text | |
main: | |
#le o Multiplicando | |
li $v0,4 | |
la $a0,valorA # valorA | |
syscall # chama o sistema | |
#carrega Multiplicalicando | |
li $v0,5 # le o valor do Multiplicando | |
syscall # chama o sistema | |
move $s0,$v0 # move o valor de $v0 para $s0 | |
#le Multiplicador | |
li $v0,4 | |
la $a0,valorB # valorB | |
syscall # chama o sistema | |
#carrega Multiplicalicador | |
li $v0,5 # le o valor do Multiplicador | |
syscall # chama o sistema | |
move $s1,$v0 # move o valor de $v0 para $s1 | |
jal Multiplica # (jump and link) salto para o endereco especificado, salvando o endereço da proxima instrucao em $ra | |
j finaliza # desvio incondicional para um endereço de memoria "finaliza" | |
# fim main | |
# multiplica | |
Multiplica: | |
move $s3, $zero # | |
move $s4, $zero # | |
beq $s1, $zero, sai # desvia o programa para sai se $s1 == $zero | |
beq $s0, $zero, sai # desvia o programa para sai se $s0 == $zero | |
loop: | |
andi $t0, $s0, 1 # pega o bit menos significativo de $s0 e coloca em $t0 | |
beq $t0, $zero, vfq # vfq fazer tratamento do carry | |
addu $s3, $s3, $s1 # incrementa | |
sltu $t0, $s3, $s1 # captura carry-out | |
addu $s4, $s4, $t0 # incrementa | |
addu $s4, $s4, $s2 # incrementa | |
vfq: | |
srl $t0, $s1, 31 # deslocamento logico para a direita ( desloca um numero de bits a direita ) | |
sll $s1, $s1, 1 # desvio logico a esquerda ( desloca numero de bits para a esquerda ) | |
sll $s2, $s2, 1 # desvio logico a esquerda ( desloca numero de bits para a esquerda ) | |
addu $s2, $s2, $t0 # | |
srl $s0, $s0, 1 # deslocamento logico para a direita ( desloca um numero de bits a direita ) | |
bne $s0, $zero, loop # desvia o programa para loop se $s0 != $zero | |
sai: | |
jr $ra # desvio incondicional para endereço guardado em $ra | |
# fim multiplica | |
# imprime resposta e finaliza | |
finaliza: | |
# imprite na tela | |
li $v0,4 # imprime uma string (resposta) | |
la $a0,resposta # imprime uma string | |
syscall | |
li $v0,1 # imprime valor resposta | |
move $a0,$s3 # put resposta in $a0 | |
syscall | |
li $v0,10 # sai | |
syscall # fim do programa |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment