1 | #/* Author : Rick van der Zwet
|
---|
2 | # * S-number : 0433373
|
---|
3 | # * Version : $Id: myprog.s 237 2007-09-19 13:19:08Z rick $
|
---|
4 | # * Copyright : FreeBSD Licence
|
---|
5 | # */
|
---|
6 | # space declaration to be used for the printf statement
|
---|
7 | .data
|
---|
8 | .align 4
|
---|
9 | space: .asciiz " "
|
---|
10 | .align 4
|
---|
11 | # array A reservation 80/4 means a 20 in size
|
---|
12 | A: .space 80
|
---|
13 | .align i
|
---|
14 | # array B, same size as array A
|
---|
15 | B: .space 80
|
---|
16 | .align 4
|
---|
17 | # declaration of integer C
|
---|
18 | C: .word C
|
---|
19 | .align 4
|
---|
20 | # declaration of integer i
|
---|
21 | i: .word i
|
---|
22 | .text
|
---|
23 | .align 4
|
---|
24 | .ent main
|
---|
25 | main:
|
---|
26 | # store the content of 1 into the memory location i
|
---|
27 | li $2,0x00000001 # 1
|
---|
28 | sw $2,i
|
---|
29 | $L2:
|
---|
30 | # initiation of the first for loop
|
---|
31 | lw $2,i
|
---|
32 | # the i<=19 condition check
|
---|
33 | slt $3,$2,20
|
---|
34 | # jump to L5 when not done or else exit loop to to L3
|
---|
35 | bne $3,$0,$L5
|
---|
36 | j $L3
|
---|
37 | $L5:
|
---|
38 | #inner part of loop 1
|
---|
39 | lw $2,i
|
---|
40 | #copy the value of $2 -> $3, by using an addition with 0
|
---|
41 | addi $3,$2,0
|
---|
42 | #multiple the value of i by 4 to find the offset address
|
---|
43 | # where the value in array B will be stored
|
---|
44 | sll $2,$3,2
|
---|
45 | #load B (begin array) and add the offset of the array to find the
|
---|
46 | #location it needs to be stored
|
---|
47 | la $3,B
|
---|
48 | addu $2,$2,$3
|
---|
49 | addi $3,$2,0
|
---|
50 | #store the value of i into the the correct location in the B array
|
---|
51 | lw $2,i
|
---|
52 | sw $2,0($3)
|
---|
53 | $L4:
|
---|
54 | # raise the value of i by 1 (by using a tmp value) and jump
|
---|
55 | # to the begin of the loop
|
---|
56 | lw $3,i
|
---|
57 | addu $2,$3,1
|
---|
58 | move $3,$2
|
---|
59 | sw $3,i
|
---|
60 | j $L2
|
---|
61 | $L3:
|
---|
62 | # init of C and i (counter for loop)
|
---|
63 | li $2,0x0000002a # 42
|
---|
64 | sw $2,C
|
---|
65 | li $2,0x00000001 # 1
|
---|
66 | sw $2,i
|
---|
67 | $L6:
|
---|
68 | # inner of loop 2, the for loop condition check, jump to L7 when done
|
---|
69 | # else exec L9
|
---|
70 | lw $2,i
|
---|
71 | slt $3,$2,20
|
---|
72 | bne $3,$0,$L9
|
---|
73 | j $L7
|
---|
74 | $L9:
|
---|
75 | #calculate the offset for array A
|
---|
76 | lw $2,i
|
---|
77 | move $3,$2
|
---|
78 | sll $2,$3,2
|
---|
79 | #set the array of storage in A into $2
|
---|
80 | la $4,A
|
---|
81 | addu $3,$2,$4
|
---|
82 | move $2,$3
|
---|
83 | #calculate offset of B
|
---|
84 | lw $3,i
|
---|
85 | move $4,$3
|
---|
86 | sll $3,$4,2
|
---|
87 | #set initial start to -4 to accomplish i-1
|
---|
88 | la $4,B
|
---|
89 | addi $4,$4,-4
|
---|
90 | addu $3,$3,$4
|
---|
91 | move $4,$3
|
---|
92 | #load value of B and C, compare and store in location in array A
|
---|
93 | lw $3,0($4)
|
---|
94 | lw $4,C
|
---|
95 | addu $3,$3,$4
|
---|
96 | sw $3,0($2)
|
---|
97 | $L8:
|
---|
98 | # same as L4, except the jump goes to L6
|
---|
99 | # raise the value of i by 1 (by using a tmp value) and jump
|
---|
100 | # to the begin of the loop
|
---|
101 | lw $3,i
|
---|
102 | addu $2,$3,1
|
---|
103 | move $3,$2
|
---|
104 | sw $3,i
|
---|
105 | j $L6
|
---|
106 | $L7:
|
---|
107 | # the print statements
|
---|
108 | li $v0,1
|
---|
109 | la $3,A
|
---|
110 | lw $a0,76($3)
|
---|
111 | syscall #print A[19]
|
---|
112 |
|
---|
113 | li $v0, 4 # system call code for print_str
|
---|
114 | la $a0, space # address of string to print
|
---|
115 | syscall # print the string " "
|
---|
116 |
|
---|
117 | li $v0, 1
|
---|
118 | la $3,B
|
---|
119 | lw $a0,76($3)
|
---|
120 | syscall #print B[19]
|
---|
121 |
|
---|
122 | li $v0, 4 #
|
---|
123 | la $a0, space #
|
---|
124 | syscall # print the string " "
|
---|
125 |
|
---|
126 | li $v0,1
|
---|
127 | la $3,i
|
---|
128 | lw $a0,0($3)
|
---|
129 | syscall #print i
|
---|
130 | $L1:
|
---|
131 | .end main
|
---|