The following MIPS assembly language program has errors, please help fix it: # MIPS program to correct bad data using Hamming codes .data prompt: .asciiz "Enter a 12-bit Hamming code (in hex): " result: .asciiz "The entered code is correct!" error: .asciiz "The entered code is incorrect. The correct code is: " newline: .asciiz "\n" .text .globl main main: # Display prompt and read input from user li $v0, 4 # syscall code for printing a string la $a0, prompt # load address of prompt string into $a0 syscall # print prompt li $v0, 5 # syscall code for reading an integer syscall # read 12-bit Hamming code into $v0 # Calculate the parity bits move $t0, $v0 # move the code into temporary register $t0 andi $t1, $t0, 0x924 # compute parity bit P1 andi $t2, $t0, 0x492 # compute parity bit P2 andi $t3, $t0, 0x249 # compute parity bit P3 andi $t4, $t0, 0x3f # compute data bits D1-D6 xor $t5, $t1, $t2 # compute parity bit P4 xor $t6, $t3, $t4 # compute parity bit P5 xor $t7, $t5, $t6 # compute parity bit P6 # Check if any bit is incorrect and correct it if necessary beqz $t7, correct # if all parity bits are 0, the code is correct li $t8, 0 # initialize a counter for the incorrect bit beqz $t5, check_p2 # if P1 is correct, check P2 addi $t8, $t8, 2 # bit 2 is incorrect (P1) check_p2: beqz $t6, check_d1 # if P2 is correct, check D1 addi $t8, $t8, 1 # bit 1 is incorrect (P2) check_d1: beqz $t4, check_p4 # if D1 is correct, check P4 addi $t8, $t8, 4 # bit 4 is incorrect (D1) check_p4: beqz $t5, check_p3 # if P4 is correct, check P3 addi $t8, $t8, 8 # bit 8 is incorrect (P4) check_p3: beqz $t3, check_d2 # if P3 is correct, check D2 addi $t8, $t8, 16 # bit 16 is incorrect (P3) check_d2: beqz $t2, check_d3 # if D2 is correct, check D3 addi $t8, $t8, 32 # bit 32 is incorrect (D2) check_d3: beqz $t1, check_d4 # if D3 is correct, check D4 addi $t8,$t8, $t8, 64 # bit 64 is incorrect (D3) check_d4: addi $t8, $t8, 128 # bit 128 is always incorrect (D4) li $t9, 1 # set the correction bit to 1 sll $t9, $t9, $t8 # shift the correction bit to the correct position xor $t0, $t0, $t9 # correct the bit # Display result li $v0, 4 # syscall code for printing a string beqz $t7, print_result # if the code is correct, print result message la $a0, error # load address of error message into $a0 syscall # print error message li $v0, 34 # syscall code for printing an integer in hex move $a0, $t0 # load the corrected code into $a0 syscall # print the corrected code in hex j end # exit the program print_result: la $a0, result # load address of result message into $a0 syscall # print result message end: li $v0, 10 # syscall code for terminating the program syscall # terminate the program Here's the errors: Error in C:\Users\supre\Documents\Downloads\Assignment10.asm line 52 column 5: "addi": Too many or incorrectly formatted operands. Expected: addi $t1,$t2,-100 Error in C:\Users\supre\Documents\Downloads\Assignment10.asm line 56 column 15: "$t8": operand is of incorrect type Assemble: operation completed with errors. Im trying to create a MIPS program that corrects bad data using Hamming codes. The program is to request the user to enter a 12-bit Hamming code and determine if it is correct or not. If correct, it is to display a message to that effect. If incorrect, it is to display a message saying it was incorrect and what the correct data is (the 12-bit Hamming code) again in hex. I will be testing only with single bit errors, so the program should be able to correct my tests just fine. You do not need to worry about multiple bit errors.
The following MIPS assembly language
# MIPS program to correct bad data using Hamming codes
.data
prompt: .asciiz "Enter a 12-bit Hamming code (in hex): "
result: .asciiz "The entered code is correct!"
error: .asciiz "The entered code is incorrect. The correct code is: "
newline: .asciiz "\n"
.text
.globl main
main:
# Display prompt and read input from user
li $v0, 4 # syscall code for printing a string
la $a0, prompt # load address of prompt string into $a0
syscall # print prompt
li $v0, 5 # syscall code for reading an integer
syscall # read 12-bit Hamming code into $v0
# Calculate the parity bits
move $t0, $v0 # move the code into temporary register $t0
andi $t1, $t0, 0x924 # compute parity bit P1
andi $t2, $t0, 0x492 # compute parity bit P2
andi $t3, $t0, 0x249 # compute parity bit P3
andi $t4, $t0, 0x3f # compute data bits D1-D6
xor $t5, $t1, $t2 # compute parity bit P4
xor $t6, $t3, $t4 # compute parity bit P5
xor $t7, $t5, $t6 # compute parity bit P6
# Check if any bit is incorrect and correct it if necessary
beqz $t7, correct # if all parity bits are 0, the code is correct
li $t8, 0 # initialize a counter for the incorrect bit
beqz $t5, check_p2 # if P1 is correct, check P2
addi $t8, $t8, 2 # bit 2 is incorrect (P1)
check_p2:
beqz $t6, check_d1 # if P2 is correct, check D1
addi $t8, $t8, 1 # bit 1 is incorrect (P2)
check_d1:
beqz $t4, check_p4 # if D1 is correct, check P4
addi $t8, $t8, 4 # bit 4 is incorrect (D1)
check_p4:
beqz $t5, check_p3 # if P4 is correct, check P3
addi $t8, $t8, 8 # bit 8 is incorrect (P4)
check_p3:
beqz $t3, check_d2 # if P3 is correct, check D2
addi $t8, $t8, 16 # bit 16 is incorrect (P3)
check_d2:
beqz $t2, check_d3 # if D2 is correct, check D3
addi $t8, $t8, 32 # bit 32 is incorrect (D2)
check_d3:
beqz $t1, check_d4 # if D3 is correct, check D4
addi $t8,$t8, $t8, 64 # bit 64 is incorrect (D3)
check_d4:
addi $t8, $t8, 128 # bit 128 is always incorrect (D4)
li $t9, 1 # set the correction bit to 1
sll $t9, $t9, $t8 # shift the correction bit to the correct position
xor $t0, $t0, $t9 # correct the bit
# Display result
li $v0, 4 # syscall code for printing a string
beqz $t7, print_result # if the code is correct, print result message
la $a0, error # load address of error message into $a0
syscall # print error message
li $v0, 34 # syscall code for printing an integer in hex
move $a0, $t0 # load the corrected code into $a0
syscall # print the corrected code in hex
j end # exit the program
print_result:
la $a0, result # load address of result message into $a0
syscall # print result message
end:
li $v0, 10 # syscall code for terminating the program
syscall # terminate the program
Here's the errors:
Error in C:\Users\supre\Documents\Downloads\Assignment10.asm line 52 column 5: "addi": Too many or incorrectly formatted operands. Expected: addi $t1,$t2,-100
Error in C:\Users\supre\Documents\Downloads\Assignment10.asm line 56 column 15: "$t8": operand is of incorrect type
Assemble: operation completed with errors.
Im trying to create a MIPS program that corrects bad data using Hamming codes. The program is to request the user to enter a 12-bit Hamming code and determine if it is correct or not. If correct, it is to display a message to that effect. If incorrect, it is to display a message saying it was incorrect and what the correct data is (the 12-bit Hamming code) again in hex. I will be testing only with single bit errors, so the program should be able to correct my tests just fine. You do not need to worry about multiple bit errors.
Trending now
This is a popular solution!
Step by step
Solved in 3 steps