.data messageSize: .word 20 .align 2 message: .asciiz "Four score and seven" pattern: .word 0x57243C7A # Your code goes below this line dataLine: .asciiz ".data\n" numCodeLine: .asciiz "numCodeWords:\n" codeWordsLine: .asciiz "codeWords:\n" wordLine: .asciiz " .word " newLine: .asciiz "\n" .text main: # prologue subu $sp, $sp, 24 sw $fp, 0($sp) sw $ra, 4($sp) addiu $fp, $sp, 24 # load a counter (0-3) into register $s7 li $s7, 0 # load another counter (0-20) into register $s6 li $s6, 0 # load message into register $s0 la $s0, message # load messageSize into register $s1 la $t0, messageSize lw $s1, 0($t0) # load pattern into register $s2 la $t0, pattern lw $s2, 0($t0) # load a code word counter into register $s5 li $s5, 0 # first loop : loops through the entire message using messageSize # and the 0-20 counter loopBegin: beq $s1, $s6, loopingEnd # load the first four bytes of $s0 into $t3 lw $t3, 0($s0) # xor these bytes and put the result into $t2 xor $t2, $t3, $s2 # store the value into $s0 again sw $t2, 0($s0) # increment the counter by 4 addi $s6, 4 # increment the number of code words counter by 1 addi $s5, 1 # move the address over by 4 bytes addi $s0, 4 # jump back to the beginning j loopBegin loopingEnd: # print out the data part of the output, along with a blank line after it la $a0, dataLine li $v0, 4 syscall la $a0, newLine li $v0, 4 syscall # print out numCodeLines: la $a0, numCodeLine li $v0, 4 syscall # print out wordLine la $a0, wordLine li $v0, 4 syscall # print out the number of code words la $a0, 0($s5) li $v0, 1 syscall # print out two space lines la $a0, newLine li $v0, 4 syscall la $a0, newLine li $v0, 4 syscall # print out codeWordsLine la $a0, codeWordsLine li $v0, 4 syscall # initialize $t6 for the loop counter li $t6, 0 printLoop: beq $t6, $s5, endLoop # load the first four bytes of the message lw $t3, 0($s0) # print out wordLine and then $t3 la $a0, wordLine li $v0, 4 syscall la $a0, 0($t3) li $v0, 1 syscall la $a0, newLine li $v0, 4 syscall # shift the address over 4 bytes addi $s0, 4 # increment the counter by 1 addi $t6, 1 # loop if the loop isn't finished j printLoop endLoop: