Question

Please comment the MIPS code to help me understand.

Here is what the code accomplishes.

Background A square matrix A is symmetric if where AT is the transpose of the matrix A. That is, a for all values of indices i and j (where aij represents entries in A). For example, matrix A below is symmetric but B is not. 1 17 23 B-5 2 7 A- 5 2 7 Project Objective Our objective in this project is to check if a given Matrix is symmetric or not. We perform this with the following two steps. . Given a square Matrix, we first compare if aj aji for all entries. If they are equal we write O for those entries. If not we write 1. So if all the elements of a Matrix are O then it is a symmetric matrix. Note that the diagonal would always end up as O. We write back to the same matrix location. E.g.: For the above Matrices A and B the final result would be A- 0 0 0 B- 1 0 0 We also aim at measuring the asymmetry. So we will be counting the number of entries in a matrix which are not equal to its mirror entry. Basically define a counter and increment the counter by 1 if aj # aji. For the above Matrix B, the value of counter would 2 as two elements are different. .

Here is the code, partially commented.

.data

Matrix: .word 41,45,5, 34,8, 15,16,23,44,48,12,32,18,47,22,8,22

.word 46,40,42,33,13,38,27,6, 29,25,18,40,47,22,26,14,3

.word 7, 48,35,9, 43,38,9, 49,28,25,42,5, 44,10,5, 38,14

.word 46,33,16,6, 13,20,31,1, 8, 17,1, 47,28,46,14,28,7

.word 32,2, 48,25,41,29,14,39,43,46,3, 39,32,49,41,28,46

.word 5, 43,2, 48,13,4, 33,41,32,19,9, 25,30,22,2, 9, 40

.word 14,47,22,18,47,3, 35,44,18,6, 33,22,11,6, 47,50,4

.word 28,34,20,30,18,27,38,5, 26,40,37,23,16,13,37,8,7

.word 48,38,39,12,10,39,23,20,21,20,33,16,24,21,25,3,46

.word 49,38,40,38,13,47,5, 13,4, 13,23,26,12,30,29,29, 3

.word 8, 20,10,13,31,7, 12,41,12,21,28,26,43,14,35,10,19

.word 49,33,25,26,24,29,46,22,7, 5, 15,41,10,31,19,41,27

.word 48,9, 23,35,18,24,8, 46,10,7, 38,40,12,36,12,22,16

.word 25,36,33,45,42,1, 42,10,12,48,10,33,9, 12,6,15, 16

.word 41,2, 36,48,30,17,27,14,21,48,35,19,12,6, 27,12,25

.word 8, 14,38,28,28,9, 50,8, 3, 29,10,41,22,15,12,6, 33

.word 22,3, 14,7, 46,40,4, 7, 46,3, 19,27,16,16,25,33,41

.text

.globl __start # main program starts in the next line

__start: addi $s0,$zero,0 # outer loop counter

addi $s1,$zero,0 # inner loop counter

la $t0,Matrix #load the matrix address

addi $t6,$zero,17 # number of columns

addi $t7,$zero,17 # number of rows

addi $s6,$zero,0

sll $t1,$t6,2

ext_loop: addi $s1,$s0,0 # reset the inner loop counter

inn_loop: mult $s0,$t1

mflo $t2 # calculate the low byte offset

sll $t3,$s1,2

add $t4,$t0,$t2 # add row offset

add $s2,$t4,$t3 # add column offset

lw $s3,0($s2) # load this element

mult $s1,$t1 # Repeat the offset calcluation for mirror element

mflo $t2

sll $t3,$s0,2

add $t4,$t0,$t2

add $s4,$t4,$t3

lw $s5,0($s4)

beq $s3,$s5,jump_equal

addi $s7,$zero,1 # write ones if different

sw $s7,0($s2)

sw $s7,0($s4)

add $s6,$s6,1 # increment the counter

j jump_unequal

jump_equal: addi $s7,$zero,0

sw $s7,0($s2)

sw $s7,0($s4)

jump_unequal:

addi $s1,$s1,1 # increment the inner loop

blt $s1,$t7,inn_loop # next inner loop

addi $s0,$s0,1 # increment the outer loop

blt $s0,$t6,ext_loop # next outer loop

.end

0 0
Add a comment Improve this question Transcribed image text
Answer #1

.data
Matrix: .word 41,45,5, 34,8, 15,16,23,44,48,12,32,18,47,22,8,22 #row1 element
.word 46,40,42,33,13,38,27,6, 29,25,18,40,47,22,26,14,3#row2 element
.word 7, 48,35,9, 43,38,9, 49,28,25,42,5, 44,10,5, 38,14# so on
.word 46,33,16,6, 13,20,31,1, 8, 17,1, 47,28,46,14,28,7
.word 32,2, 48,25,41,29,14,39,43,46,3, 39,32,49,41,28,46
.word 5, 43,2, 48,13,4, 33,41,32,19,9, 25,30,22,2, 9, 40
.word 14,47,22,18,47,3, 35,44,18,6, 33,22,11,6, 47,50,4
.word 28,34,20,30,18,27,38,5, 26,40,37,23,16,13,37,8,7
.word 48,38,39,12,10,39,23,20,21,20,33,16,24,21,25,3,46
.word 49,38,40,38,13,47,5, 13,4, 13,23,26,12,30,29,29, 3
.word 8, 20,10,13,31,7, 12,41,12,21,28,26,43,14,35,10,19
.word 49,33,25,26,24,29,46,22,7, 5, 15,41,10,31,19,41,27
.word 48,9, 23,35,18,24,8, 46,10,7, 38,40,12,36,12,22,16
.word 25,36,33,45,42,1, 42,10,12,48,10,33,9, 12,6,15, 16
.word 41,2, 36,48,30,17,27,14,21,48,35,19,12,6, 27,12,25
.word 8, 14,38,28,28,9, 50,8, 3, 29,10,41,22,15,12,6, 33
.word 22,3, 14,7, 46,40,4, 7, 46,3, 19,27,16,16,25,33,41
.text
.globl __start # main program starts in the next line
__start: addi $s0,$zero,0 # outer loop counter
addi $s1,$zero,0 # inner loop counter
la $t0,Matrix #load the matrix address
addi $t6,$zero,17 # number of columns (i)
addi $t7,$zero,17 # number of rows (j)
addi $s6,$zero,0 #initializing the counter to count A(ij) != A(ji)
sll $t1,$t6,2 # to address the word we multiply by 4 or shift it by 2 to get actual size of row
ext_loop: addi $s1,$s0,0 # reset the inner loop counter (j = 0)
inn_loop: mult $s0,$t1 # to calculate the row offset we mult by $s0(counter of row number)
mflo $t2 # calculate the low byte offset
sll $t3,$s1,2 # to address the word we mult by 4 or shift it by 2 to get actual col offset
add $t4,$t0,$t2 # add row offset
add $s2,$t4,$t3 # add column offset
lw $s3,0($s2) # load this element A(ij)
mult $s1,$t1 # Repeat the offset calcluation for mirror element
mflo $t2 # get the row offset from multiply of $s1(col number counter)
sll $t3,$s0,2 # to get the actual col offset
add $t4,$t0,$t2 # adding row offset
add $s4,$t4,$t3 # adding col offset
lw $s5,0($s4) # load this element A(ji)
beq $s3,$s5,jump_equal # if A(ij) == A(ji) jumps to jump_equal label
addi $s7,$zero,1 # write ones if different
sw $s7,0($s2) # store the 1 to A(ij)
sw $s7,0($s4) # store the 1 to A(ji)
add $s6,$s6,1 # increment the counter of A(ij) != A(ji)
j jump_unequal # jump to jump_unequal
jump_equal: addi $s7,$zero,0 # write 0 if equal
sw $s7,0($s2) # writes 0 to A(ij)
sw $s7,0($s4) # writes 0 to A(ji)
jump_unequal:
addi $s1,$s1,1 # increment the inner loop
blt $s1,$t7,inn_loop # next inner loop
addi $s0,$s0,1 # increment the outer loop
blt $s0,$t6,ext_loop # next outer loop
.end

# calculating the row offset and column offset is bit tricky
# first you have to multiply the row num couter to 17(num rows)*4 and then add the (4*col num counter)(col offset)
# which is done in above code two times first by $s1 * 17 * 4 for A[j][i] and $s0 * 17 * 4 for A[i][j]

Add a comment
Know the answer?
Add Answer to:
Please comment the MIPS code to help me understand. Here is what the code accomplishes. Here...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • MIPS Insertion program.........I could really use some help ASAP

    I have this MIPS program and I'm having trouble with it. This program is user inputs numbers until zero and sorts and print the numbers in order. Please soove this issue. You can use any sorting algorithm except bubble sort.  Need it as soon as possible. Here is the code:.datanum: .word 0space: .byte ' ' .text main:  # la $t0, val # loads val into a register  # li $t1, 0      #keeps track of how many numbers entered  la $a0,...

  • im trying to complete mips program code about a calculator program that can calculate integer addition...

    im trying to complete mips program code about a calculator program that can calculate integer addition / subtraction written using the MIPS assembler. im having hard times to debug this. The input is given to the array of Formula char (base address $ s0) in the form of a formula. The null character (\ 0, ASCII code 0) is placed at the end. The calculation result is given to the register $ s1 and the overflow is ignored. For example,...

  • 2.4 For the MIPS assembly instructions below, what is the corresponding C statement? Assume that the...

    2.4 For the MIPS assembly instructions below, what is the corresponding C statement? Assume that the variables f, g, h, i, and j are assigned to registers $s0, $s1, $s2, $s3, and $s4, respectively. Assume that the base address of the arrays A and B are in registers $s6 and $s7, respectively. sll $t0, $s0, 2               # $t0 = f * 4 add $t0, $s6, $t0         # $t0 = &A[f] sll $t1, $s1, 2               # $t1 =...

  • what is the output of the following assembly code ? .data A: .word 84 111 116 97 108 32 105 115 32 . text main:​li $v0, 1l ​li $s0,0 ​la $s1, A ​li $t3, 0 loop: ​slti $t0, $s0, 17   ​be...

    what is the output of the following assembly code ? .data A: .word 84 111 116 97 108 32 105 115 32 . text main:​li $v0, 1l ​li $s0,0 ​la $s1, A ​li $t3, 0 loop: ​slti $t0, $s0, 17   ​beq: $t0, $zero, end ​sll $t1, $s0 2 ​add $t2 $s1 $t1   ​syscall ​addi $s0, $s0, 1 ​j loop end: ​li $v0, 1 ​add $a0, $zero, $t3 ​syscall

  • 1. For the MIPS assembly instructions below, what is the corresponding C statement? max:                    lw        &

    1. For the MIPS assembly instructions below, what is the corresponding C statement? max:                    lw          $t0, 0($a0)         #load the first array value into $t0 addi      $t1, $0, 1            #intialize the counter to one loop:                   beq       $t1, $a1, exit     #exit if we reach the end of the array addi      $a0, $a0, 4         #increment the pointer by one word addi      $t1, $t1, 1          #increment the loop counter lw          $t2, 0($a0)         #store the next array value into $t2 slt          $t3, $t0, $t2       beq      ...

  • Question 4) (12 Marks) This question is based on the MIPS assembly code shown below. data...

    Question 4) (12 Marks) This question is based on the MIPS assembly code shown below. data the Array: space 160 main: li $t6, 1 li $17, 4. sw $17, the Array($0) sw $17, theArray($17) li $t0, 8 loop: addi $t3, $t0, -8 addi $t4, $t0, -4 lw 1, the Array($t3) lw $12, the Array(St4) add $15, $t1, $t2 sw $15, theArray($to) addi $t0, $t0, 4 blt $t0, 160, loop jr Sra. Question 4 Assembly code a) what is the contents...

  • .data A: .word 84 111 116 97 108 32 105 115 32 . text main:​li $v0,...

    .data A: .word 84 111 116 97 108 32 105 115 32 . text main:​li $v0, 1l ​li $s0,0 ​la $s1, A ​li $t3, 0 loop: ​slti $t0, $s0, 17   ​beq: $t0, $zero, end ​sll $t1, $s0 2 ​add $t2 $s1 $t1   ​syscall ​addi $s0, $s0, 1 ​j loop end: ​li $v0, 1 ​add $a0, $zero, $t3 ​syscall /// whats the output of above assembly program

  • please trace this is sort program and base address s0, number of element s1 please also complete the program(..) explai...

    please trace this is sort program and base address s0, number of element s1 please also complete the program(..) explain the program too thanks sit $t4, $t1, $to beq $t4, $zero, Skip sll $s1, $s1, 2 add $s2, $s0, $s1 addi $t2, $so, 0 Skip: oopl: addi $t3, $t2, 0 oopJ: addi $t3, $t3, 4 beq $t3, $s2, NextI Iw $to, 0($t2) lw NextI: addi $t2, $t2, 4 End: 配列の昇順ソートベースアドレス$50, 空欄を埋めてプログラムを完成させよ。 要素数$51 sit $t4, $t1, $to beq $t4, $zero, Skip...

  • MIPS MIPS MIPS PLEASE INCLUDE COMMENTS AND OUTPUT Sort array using Bubble sort algorithm. 1) First...

    MIPS MIPS MIPS PLEASE INCLUDE COMMENTS AND OUTPUT Sort array using Bubble sort algorithm. 1) First ask the user how many elements of his/her array. 2) Then, read the integer array elements as input from the User. 3) Then, print out the array before the sorting 4) Apply Bubble sort algorithm on your array 5) Print out the array after the sorting 6) Print some welcome text to th user 7) Add comments to your code to describe how is...

  • I AM POSTING MY QUESTION 3RD TIME . FIRST TWO TIMES I DIDNOT GET THE PROPER...

    I AM POSTING MY QUESTION 3RD TIME . FIRST TWO TIMES I DIDNOT GET THE PROPER ANSWER. PLEASE DO ALL STEPS BY LABELING THE EACH STEP. THIS IS THE ASSIGNMENT IN WHICH THE EACH STEP SHOULD BE LABEL . I MEAN EVERY THING SHOULD BE WRITTEN WHAT WE HAVE DONE IN OUR PROGRAM THIS IS THE REQUIREMENT OF TEACHER , PLEASE DO IT PROPERLY   1) MIPS to C. Assume that the variables f, g, h, i, and j are assigned...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT