-
Notifications
You must be signed in to change notification settings - Fork 0
/
vectorial_1_mp.txt
96 lines (74 loc) · 3.43 KB
/
vectorial_1_mp.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# -----------------------------------------------------------------------------
# vectorial_1_mp.txt
#
# Lab assignment 2: Microprogramming Lab
# Implementation of subroutines addv_1 and seqv_1.
#
# @author Guillermo Escobero & Raul Olmedo
# @date November 2016
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Adds two vectors with the same number of elements and stores the resulting
# vector in the memory.
#
# Returns -1 in the first register if the number of elements provided is not
# correct.
#
# @param Memory address where will be stored the resulting vector
# @param Memory address of the first vector
# @param Memory address of the second vector
# @param Number of elements of the vectors
# -----------------------------------------------------------------------------
addv_1: bge $a3 $0 continue # if(vectorElements <= 0)
li $a0 -1 # return -1;
jr $ra
continue: mv $t0 $a0 # Result Vector (R0)
mv $t1 $a1 # V0
mv $t2 $a2 # V1
li $t6 0 # Counter for loop (i)
li $t7 4 # Offset to iterate through the array
li $t8 1 # Step for the counter
for: bge $t6 $a3 end # Loop condition (i < len(vector))
lw $t3 ($t0) # R0[x]
lw $t4 ($t1) # V0[x]
lw $t5 ($t2) # V1[x]
add $t3 $t4 $t5 # V0[x] + V1[x]
sw $t3 ($t0) # R0[x] = V0[x] + V1[x]
add $t0 $t0 $t7 # R0[x+1]
add $t1 $t1 $t7 # V0[x+1]
add $t2 $t2 $t7 # V1[x+1]
add $t6 $t6 $t8 # i++;
b for # Go to check condition of the loop again
end: jr $ra # return
# -----------------------------------------------------------------------------
# Compares two vectors with the same number of elements. If they are equal, '1'
# is stored in the first register ($a0), if not, '0' is stored.
#
# Returns -1 in the first register if the number of elements provided is not
# correct.
#
# @param Register that will contain the result of the comparison ($a0)
# @param Memory address of the first vector
# @param Memory address of the second vector
# @param Number of elements of the vectors
# -----------------------------------------------------------------------------
seqv_1: bge $a3 $0 continue2 # if(vectorElements <= 0)
li $a0 -1 # return -1;
jr $ra
continue2: mv $t0 $a1 # V0
mv $t1 $a2 # V1
li $t4 0 # Counter for loop (i)
li $t5 4 # Offset to iterate through the array
li $t6 1 # Step for the counter
for2: bge $t4 $a3 end2 # Loop condition (i < len(vector))
lw $t2 ($t0) # V0[x]
lw $t3 ($t1) # V1[x]
bne $t2 $t3 else2 # if(V0[x] == V1[x])
add $t0 $t0 $t5 # V0[x+1]
add $t1 $t1 $t5 # V1[x+1]
add $t4 $t4 $t6 # i++;
b for2 # Go to check condition of the loop again
end2: li $a0 1 # return 1;
jr $ra
else2: li $a0 0 # return 0;
jr $ra