Você está na página 1de 2

LSDI 2014/15 Trabalho laboratorial 7 Parte 2

Programao em assembly MIPS


Folha de preparao

Miguel Campos Pinto Coelho de Aguiar MIEEC05


1. Vetor Soma
sumV: # coloque o seu cdigo a partir daqui...
add $s0, $a0, 0
# DIM
la $t1, 0($a1)
# aponta para vetor A
la $t2, 0($a2)
# aponta para vetor B
cycle0:beqz $s0, end0
# Se percorreu vetor, vai para end0
lw $s3, 0($t1)
# $s3 <- Ai
lw $s2, 0($t2)
# $s2 <- Bi
add $s1, $s3, $s2
# $s1 <- Ai + Bi
sw $s1, 0($t1)
addi $t1, $t1, 4
# Salta para prximo elemento de A
addi $t2, $t2, 4
# Salta para prximo elemento de B
addi $s0, $s0, -1
# Decrementa $s0
j cycle0
# Volta para cycle0
end0: jr $ra
# para retornar ao programa que chamou esta rotina

2. Produto Interno
prodInt:
# coloque o seu
move $v0, $zero
add $s0, $a0, 0
la $t1, 0($a1)
la $t2, 0($a2)
cycle2:beqz $s0, end1
lw $s3, 0($t1)
lw $s2, 0($t2)
mul $s1, $s3, $s2
add $v0, $v0, $s1
AiBi)
addi $t1, $t1, 4
addi $t2, $t2, 4
addi $s0, $s0, -1
j cycle2
end1: jr $ra

cdigo a partir daqui...


#
#
#
#
#
#
#
#

DIM
aponta para vetor A
aponta para vetor B
Se percorreu vetor, vai para end1
$s3 <- Ai
$s2 <- Bi
$s1 <- AiBi
$v0 <- $v0 + $s1 (somatrio dos produtos

#
#
#
#

Salta para
Salta para
Decrementa
Volta para

prximo elemento de A
prximo elemento de B
$s0
cycle2

3. Mximo Relativo
maxRel:
# coloque o seu cdigo a partir daqui...
add $v0, $zero, $zero # $v0 = 0
move $k1, $zero
move $k0, $zero
sum1: add $s0, $a0, $zero # colocar em $s0 o valor da dimenso do vetor
la $t1, 0($a1)
# aponta para vetor A
s1: beqz $s0, sum2
# vai para sum2 se $s0 == 0
lw $s1, 0($t1)
# coloca em $s1 o elemento do vetor
add $k0, $s1, $k0
# $k0 o valor de Sn
addi $t1, $t1, 4
addi $s0, $s0, -1
# decrementar $s0
j s1
sum2: add $s0, $a0, $zero
la $t1, 0($a2)
s2: beqz $s0, avg
lw $s1, 0($t1)

#
#
#
#

colocar em $s0 o valor da dimenso do vetor


aponta para vetor B
vai para avg se $s0 == 0
coloca em $s1 o elemento do vetor

add $k1, $s1, $k1


addi $t1, $t1, 4
addi $s0, $s0, -1
j s2

# $k1 o valor de Sn
# decrementar $s0

avg: rem $s1, $k1, $a0


div $k1, $k1, $a0
mul $s1, $s1, 2
slt $s3, $a0, $s3
beqz $s3, next
addi $k1, $k1, 1
next: rem $s1, $k1, $a0
div $k0, $k0, $a0
mul $s1, $s1, 2
slt $s3, $a0, $s3
beqz $s3, compare
addi $k0, $k0, 1

#
#
#
#
#
#
#
#
#
#
#
#

calcula resto da diviso


$k1 a mdia dos elementos do v. B
aumenta $s1 para o dobro
se o dobro do resto > divisor, $s3 = 1
se $s3 == 0, termina
se 2*resto > divisor, incrementa a mdia
calcula resto da diviso
$k0 a mdia dos elementos do v. A
aumenta $s1 para o dobro
se o dobro do resto > divisor, $s3 = 1
se $s3 == 0, termina
se 2*resto > divisor, incrementa a mdia

compare:
bgt $k1, $k0, next1
la $t1, 0($a1)
j max
next1:la $t1, 0($a2)

#
#
#
#
#

# # # # # # # # # # # # # # # # # # #
Compara as mdias:
O endereo do vetor com maior mdia
carregado para $t1
# # # # # # # # # # # # # # # # # # #

max: addi $s0, $a0, -1


cycle:lw $s1, 0($t1)
lw $s2, 4($t1)
bgt $s2, $s1, update
volta:
addi $s0, $s0, -1
beqz $s0, end2
addi $t1, $t1, 4
j cycle
update: move $v0, $s2
j volta

#
#
#
#
#
#
#

DIM-1
Ai
Ai+1
Se Ai+1 > Ai, $v0 <- Ai+1
Decrementa $s0
Se percorreu vetor acaba
Salta para prximo elemento

end2: jr $ra

4. Nmero de Elementos Iguais


com: # coloque o seu cdigo
move $s0, $a0
#
move $k0, $a0
#
move $v0, $zero
la $t1, 0($a1)
#
la $t2, 0($a2)
#
load: lw $s1, 0($t1)
#
lw $s2, 0($t2)
#
beq $s1, $s2, updt
#
getback:addi $s0, $s0, -1 #
addi $t2, $t2, 4
bnez $s0, load
new: addi $k0, $k0, -1
#
addi $t1, $t1, 4
#
la $t2, 0($a2)
#
move $s0, $a0
bnez $k0, load
jr $ra

a partir daqui...
DIM
DIM
Aponta para v. A
Aponta para v. B
$s1 <- Ai
$s2 <- Bi
Se os elementos forem iguais vai para updt
Decrementa $s0
caso tenha comparado Ai com todos os Bn, #
salta para Ai+1 e volta a comparar com B #
at percorrer todo o vetor A
#

updt: addi $v0, $v0, 1# Incrementa $v0


j getback

Você também pode gostar