Skip to content

Instantly share code, notes, and snippets.

@williaanlopes
Last active November 28, 2017 13:58
Show Gist options
  • Save williaanlopes/628e0a6944070a6b8f2b7011fda8ae58 to your computer and use it in GitHub Desktop.
Save williaanlopes/628e0a6944070a6b8f2b7011fda8ae58 to your computer and use it in GitHub Desktop.
Multiplicando dois números em MIPS - Compilador MARS 4.5
.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