# Problemas 3

# EX1 - by Martim Bento

Resolução

		.data

x:		.word 50
y:		.word 0

# if (x<10) => (if (y<1) => x-=10) ELSE x+=10

		.text

la	x10, x
la	x11, y

lw x12, 0(x10)
lw x13, 0(x11)

li x14, 11
li x15, 1

bge x14, x12, else   #if not x<10 => jump to else
blt x15, x13, success


jal x0, nothing #x<10, but y>=1


else:
addi x12, x12, 10 #x+=10
jal x0, nothing

success:
addi x12, x12, -10

nothing:
sw x12, 8(x10)

li x17, 10

# EX2 - by Martim Bento

- Resolução
#Exerício 2 Corrigido
	.data

var:	.word 0x0F0F

	.text

lw x11, var
li x10, 0
li x12, 32

loop:
	ble x12, zero, end
	andi x13, x11, 1
	add x10, x10, x13
	srli x11, x11, 1
	addi x12, x12, -1
	j loop

end:

li x17, 1
ecall
li x17, 10
ecall

# EX2 - by Rodrigo Coimbra

- Resolução

	.data
x: .word 127

	.text
	lw x12,x
	li x13, 32 
	li x10, 0

for: mv x11, x12
	 andi x11, x11, 1
	 add x10, x11, x10
	 addi x13, x13, -1
	 srli x12, x12, 1
	 blt x0, x13, for

end:
	li x17, 1 
	ecall
	li x17, 10
	ecall
	

# EX3 - by Martim Bento

- Resolução

	.data

n_valores: .word 8
valores:   .word 1, 2, 3, 4, 5, 6, 7, 8

	.text
la x10, n_valores
lw x11, 0(x10)

la x12, valores
lw x13, 0(x12)

li x14, 0

while:
add x14, x14, x13
addi x11, x11, -1
addi x12, x12, 4
lw x13, 0(x12)
bge x11, x0, while

sw x14, 0(x10)
li x17, 0

# EX4 - by Martim Bento

- Resolução

	.data

	.text

li x10, 10
li x11, 4

addi x2, x2, -8
sw x10, 4(x2)
sw x11, 0(x2)

lw x10, 0(x2)
lw x11, 4(x2)
addi x2, x2, 8

li x17, 10

# EX5 - by Martim Bento

- Resolução
   .data
x:    .word 4
y:    .word 7
z:    .word 7
w:    .word 3

    .text

#5a)

#Salvaguarda dos valores de x, y, z e w
addi sp, sp, -16
lw x10, x
sw x10, 12(sp)
lw x10, y
sw x10, 8(sp)
lw x10, z
sw x10, 4(sp)
lw x10, w
sw x10, 0(sp)

jal x1, Soma3
jal x1, Subtrai
addi sp, sp 12

#Guardar valor final
sw x10, 0(sp)
jal x0, EOF


#5b) ??

#Soma(a,b)
Soma:
add x10, x10, x11
jalr x0, x1, 0

Soma3:
#salvaguarda de x1
addi x2, x2, -4
sw x1, 0(x2) 

#colocar em x10 e x11 os valores dos operandos
lw x10, 16(sp)
lw x11, 12(sp)
jal Soma

#selecionar o proximo operando
lw x11, 8(sp)
jal Soma

#Repor x1
lw x1, 0(x2)
addi x2, x2, 4
jalr x0, x1, 0

Subtrai:

#Selecionar operando
lw x11, 0(sp)
sub x10, x10, x11
jalr x0, x1, 0

#Final
EOF:

li x17, 1
ecall
li x17, 10
ecall

#5c) No ponto maximo tem 5 palavras guardadas: x, y, z, w e x1.
#     No final do programa so tem o resultado guardado.

# EX5 - by Tomás Martins

Resolução
.data
a: .word 4
b: .word 7
c: .word 7 
d: .word 3
.text
#subtrai(soma3(4,7,7),3)
	addi sp, sp, -12
	lw x11,a
	sw x11,8(sp)
	lw x11,b
	sw x11,4(sp)
	lw x11,c
	sw x11, 0(sp)
	jal x1,soma3
	#lw x10,0(sp)=a+b+c
	addi sp,sp,-4
	lw x11,d
	sw x11,0(sp)
	jal x1,sub
	addi sp,sp,8


	li x17,1
	ecall

	li x17,10
	ecall

sub: 
	lw x10,4(sp)
	lw x11,0(sp)
	sub x10,x10,x11
	ret

soma:
	add x10,x10,x11
	ret

soma3:
	addi sp,sp, -4
	sw x1,0(sp)
	lw x10, 12(sp)
	lw x11, 8(sp) 
	jal x1,soma
	lw x11, 4(sp)
	add x10,x10,x11
	lw x1,0(sp)
	addi sp,sp,12
	sw x10, 0(sp)
	ret

# EX7 - by Martim Bento

- Resolução
#Exercício 7
.data
.text
li x10, 7
jal fatorial
li x17, 1
ecall
li x17, 10
ecall
fatorial:
	ble x10, zero, end #if (i==0) return 1;
	#salvaguarda de contexto
	addi sp, sp, -8
	sw x1, 4(sp)
	sw x18, 0(sp) #x18 � um saved register
mv x18, x10
addi x10, x10, -1
jal fatorial
mul x10, x10, x18
	#reposi��o de contexto
	lw x18, 0(sp)
	lw x1, 4(sp)
	addi sp, sp, 8
	ret
end:
li x10, 1
ret
#para poder voltar a funcao mae

# EX8 - by Martim Bento

- Resolução
.data
.text
li x10, 7
li x11, 5
jal power
li x17, 1
ecall
li x17, 10
ecall
power:
addi sp, sp, -16
sw x1, 12(sp)
sw x18, 8(sp) #i
sw x19, 4(sp) #y
sw x20, 0(sp) #x
li x19, 1
mv x18, x11
mv x20, x10
loop:
ble x18, zero, end
mv x10, x19
mv x11, x20
jal multiplica
mv x19, x10
addi x18, x18, -1
j loop
end:
	lw x1, 0(sp)
	lw x18, 4(sp) #i
	lw x19, 8(sp) #y
	lw x20, 12(sp) #x
	addi sp, sp, 16
	ret
multiplica:
	mul x10, x10, x11
	ret
Last Updated: 6/27/2021, 11:11:21 PM