+1 (315) 557-6473 

Computing exponential values in MIPS assembly homework help

The assignment is divided into two parts. The first part deals with implementing a program to calculate the power of size to a given exponent module 17. Our MIPS homework help solvers have created a program that receives the exponent value and saves the result in some predefined positions in memory. The second part deals with determining the smallest Hamming distance between the elements of a given array.
Table Of Contents
  • Receiving and Saving Exponential Values in an Array

Receiving and Saving Exponential Values in an Array

.data P: .word 8 R: .word -1 # R will be stored here .text addi $11, $0, 0x2000 # load start address of data in $11 addi $8, $0, 1 sw $8, 4($11) # save a 1 in the result lw $9, 0($11) # load exponent in $9 addi $10, $0, 6 # load base (6) in $10 addi $11, $0, 17 # load a 17 in $11 for the modulus calculations loop1: beq $9, $0, end # if exponent is zero, end andi $12, $9, 1 # else, get lowest bit value beq $12, $0, next # if the bit is zero, go to next add $16, $0, $8 # multiply current value of R by current base power of 2 add $17, $0, $10 jal multiply add $8, $0, $18 next: add $16, $0, $10 # elevate the base to next power of 2 add $17, $0, $10 jal multiply add $10, $0, $18 jal mod17 # calculate the modulus of current power exponent srl $9, $9, 1 # advance to next bit in exponent j loop1 # repeat #calculate the multiplication of $16 and $17, return result in $18 multiply: addi $18, $0, 0 beq $16, $0, mulret # if $16 is zero, result is zero loop2: beq $17, $0, mulret # if $17 is zero, return add $18, $18, $16 # add $16 addi $17, $17, -1 j loop2 # repeat while $17 is not zero mulret: jr $31 #calculate the modulus 17 of register $10, returns modulus in $10 mod17: slt $12, $10, $11 # if num < 17, it's already the modulus bne $12, $0, return sub $10, $10, $11 # subtract num = num - 17 j mod17 # repeat return: jr $31 end: add $10, $0, $8 # calculate modulus 17 of result jal mod17 addi $9, $0, 0x2004 # load address of R in $9 sw $10, 0($9) # save result .data T: .word 12 best_matching_score: .word -1 # best score = ? within [0, 32] best_matching_count: .word -1 # how many patterns achieve the best score? Pattern_Array: .word 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20 Score_Array: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text addi $11, $0, 0x2000 # load start address of data in $11 addi $8, $11, 0xC # load address of array in $8 lw $9, 0($11) # load word to match in $9 lw $10, 4($11) # load best matching score in $10 addi $11, $0, 20 # number of words in array in $11 loop1: lw $12, 0($8) # load word from array xor $12, $12, $9 # compare the word to match with a word from an array add $13, $0, $0 # we will count the bits in $13 (hamming distance) count: beq $12, $0, endcount andi $14, $12, 1 # test the rightmost bit add $13, $13, $14 # if it's 1, count one more bit next: srl $12, $12, 1 # move next bit to the right j count # repeat endcount: addi $14, $0, 32 sub $14, $14, $13 # calculate score = 32 - hamming distance slt $13, $14, $10 # if the score is below the best, skip bne $13, $0, skip add $10, $0, $14 # else, save as best score skip: sw $14, 80($8) # save the score in the score array addi $8, $8, 4 # advance to next position in array addi $11, $11, -1 # repeat for all words in array bne $11, $0, loop1 addi $8, $0, 0x2004 # load address of best score in $8 sw $10, 0($8) # save best score addi $8, $0, 0x205C # save start address of score array in $8 addi $9, $0, 20 # number of words in array in $9 addi $11, $0, 0 # we will count the number of highest scores with $11 loop2: lw $12, 0($8) # load score from array bne $10, $12, nxtpos # if it's not equal to the best score, go to next position addi $11, $11, 1 # if they are equal, increment number of highest scores nxtpos: addi $8, $8, 4 # advance to next position in array addi $9, $9, -1 # repeat for all words in array bne $9, $0, loop2 addi $8, $0, 0x2008 # load address of best count in $8 sw $11, 0($8) # save best count