.data maze: .asciiz “n##########n#*1342171#n#01#####1#n#84#19224#n####1####

.data
maze: .asciiz “n##########n#*1342171#n#01#####1#n#84#19224#n####1####

.data
maze: .asciiz “n##########n#*1342171#n#01#####1#n#84#19224#n####1#####n#11#12561#n#16#####1#n#64131281#n##1#######n#2647893E#n##########n”
win_msg: .asciiz “You win!n”
prompt: .asciiz “Enter move (w/a/s/d): ”
invalid_move: .asciiz “Invalid move!n”
current_sum_msg: .asciiz “Current Sum: ”
correct_answers_msg: .asciiz “Correct Answers: ”
final_sum_msg: .asciiz “Final Sum: ”
final_correct_answers_msg: .asciiz “Total Correct Answers: ”
time_msg: .asciiz “Time taken (seconds): ”
newline: .asciiz “n”
sum_prompt: .asciiz “What is the sum of ”
question_mark: .asciiz “?n”
debug_msg: .asciiz “Debug: Reached En”
debug_start_time_msg: .asciiz “Debug: Start time: ”
debug_end_time_msg: .asciiz “Debug: End time: ”
fireworks1: .asciiz “n* * *n * * *n *n * * *n* * *n”
fireworks2: .asciiz “n *n ***n *****n*******n *****n ***n *n”
fireworks3: .asciiz “n *n * *n * *n* *n * *n * *n *n”
beep6: .byte 77
duration6: .byte 500
instrument6: .byte 83
volume6: .byte 100
input_buffer: .space 20
maze_width: .word 10
maze_height: .word 10
player_x: .word 1
player_y: .word 1
current_sum: .word 0
correct_answers: .word 0
start_time: .word 0
end_time: .word 0
.text
main:
# Initialize player position
la $t0, player_x
la $t1, player_y
li $t2, 1
sw $t2, 0($t0)
sw $t2, 0($t1)
# Initialize game stats
la $t3, current_sum
sw $zero, 0($t3)
la $t3, correct_answers
sw $zero, 0($t3)
# Get start time
li $v0, 30
syscall
la $t4, start_time
sw $v0, 0($t4)
# Debug start time
la $a0, debug_start_time_msg
li $v0, 4
syscall
lw $a0, start_time
li $v0, 1
syscall
# Print newline
la $a0, newline
li $v0, 4
syscall
# Print initial maze
la $a0, maze
li $v0, 4
syscall
# Display initial sum and correct answers
jal display_stats
game_loop:
# Load player position
lw $t0, player_x
lw $t1, player_y
# Calculate player position in the maze string
la $t9, maze
li $t4, 11 # Each row is 11 characters including newline
mul $t5, $t0, $t4 # Row offset
add $t5, $t5, $t1 # Column offset
add $t5, $t5, $t9 # Final address in maze string
# Restore original maze character (if not starting position)
bne $t0, 1, not_starting_pos
bne $t1, 1, not_starting_pos
j skip_restore
not_starting_pos:
li $t6, ‘ ‘ # Assuming empty space
sb $t6, 0($t5)
skip_restore:
# Prompt for move
la $a0, prompt
li $v0, 4
syscall
# Read user input
li $v0, 12
syscall
move $t3, $v0
# Validate user input
li $t7, ‘w’
li $t8, ‘a’
li $t9, ‘s’
li $t0, ‘d’
beq $t3, $t7, process_input
beq $t3, $t8, process_input
beq $t3, $t9, process_input
beq $t3, $t0, process_input
j invalid
process_input:
# Calculate new position based on input
lw $t0, player_x
lw $t1, player_y
move $t4, $t0
move $t5, $t1
beq $t3, ‘w’, move_up
beq $t3, ‘a’, move_left
beq $t3, ‘s’, move_down
beq $t3, ‘d’, move_right
move_up:
sub $t4, $t0, 1
j validate_move
move_down:
add $t4, $t0, 1
j validate_move
move_left:
sub $t5, $t1, 1
j validate_move
move_right:
add $t5, $t1, 1
j validate_move
validate_move:
# Check boundaries
lw $t6, maze_width
lw $t7, maze_height
bltz $t4, invalid
bltz $t5, invalid
bge $t4, $t7, invalid
bge $t5, $t6, invalid
# Calculate maze index
li $t8, 11 # Each row is 11 characters including newline
mul $t8, $t8, $t4 # Row offset
add $t8, $t8, $t5 # Column offset
# Check maze value at new position
la $t9, maze
add $t9, $t9, $t8
lb $t9, 0($t9)
# Debug print to show the character at the new position
move $a0, $t9
li $v0, 11 # Print character at new position
syscall
# Check if move is valid
beq $t9, ‘#’, invalid
# Update player position
sw $t4, player_x
sw $t5, player_y
# Check if player reached the end
beq $t9, ‘E’, win
# Prompt for sum input if moving to a number
sub $t6, $t9, ‘0’ # Convert character to number
bltz $t6, skip_update
bgt $t6, 9, skip_update
# Display the question “What is the sum of X?”
la $a0, sum_prompt
li $v0, 4
syscall
# Display the number
move $a0, $t6
add $a0, $a0, ‘0’ # Convert to ASCII character
li $v0, 11
syscall
# Display the question mark
la $a0, question_mark
li $v0, 4
syscall
# Read sum input as a string
la $a0, input_buffer
li $a1, 20
li $v0, 8
syscall
# Parse and evaluate the input
la $t0, input_buffer
# Read first number
lb $t1, 0($t0)
sub $t1, $t1, ‘0’ # Convert ASCII to integer
# Skip ‘+’ character
lb $t2, 1($t0)
beq $t2, ‘+’, skip_plus
j invalid
skip_plus:
# Read second number
lb $t2, 2($t0)
sub $t2, $t2, ‘0’ # Convert ASCII to integer
# Calculate the sum of the input numbers
add $t3, $t1, $t2
# Check if the sum is correct
lw $t8, current_sum
add $t8, $t8, $t6
bne $t3, $t6, invalid
# Update current sum and correct answers if correct
sw $t8, current_sum
lw $t7, correct_answers
addi $t7, $t7, 1
sw $t7, correct_answers
# Play sound for correct answer
la $a0, beep6
la $a1, duration6
la $a2, instrument6
la $a3, volume6
# Load the value of “beep” into $a0
lb $a0, 0($a0)
lb $a1, 0($a1)
lb $a2, 0($a2)
lb $a3, 0($a3)
# Make the system call to play the sound
li $v0, 31
syscall
# Display fireworks
jal display_fireworks
skip_update:
# Calculate the new position in the maze string
la $t9, maze
lw $t0, player_x
lw $t1, player_y
li $t4, 11 # Each row is 11 characters including newline
mul $t5, $t0, $t4 # Row offset
add $t5, $t5, $t1 # Column offset
add $t5, $t5, $t9 # Final address in maze string
# Update the player’s position in the maze
li $t6, ‘*’
sb $t6, 0($t5)
# Print maze
la $a0, maze
li $v0, 4
syscall
# Display current sum and correct answers
jal display_stats
j game_loop
invalid:
la $a0, invalid_move
li $v0, 4
syscall
j game_loop
win:
# Get end time
li $v0, 30
syscall
la $t4, end_time
sw $v0, 0($t4)
# Debug end time
la $a0, debug_end_time_msg
li $v0, 4
syscall
lw $a0, end_time
li $v0, 1
syscall
# Print newline
la $a0, newline
li $v0, 4
syscall
# Debug message to indicate we have reached the win condition
la $a0, debug_msg
li $v0, 4
syscall
# Display win message
la $a0, win_msg
li $v0, 4
syscall
# Display final sum
la $a0, final_sum_msg
li $v0, 4
syscall
lw $a0, current_sum
li $v0, 1
syscall
# Print newline
la $a0, newline
li $v0, 4
syscall
# Display final correct answers count
la $a0, final_correct_answers_msg
li $v0, 4
syscall
lw $a0, correct_answers
li $v0, 1
syscall
# Print newline
la $a0, newline
li $v0, 4
syscall
# Calculate and display time taken
la $t4, start_time
lw $t0, 0($t4)
la $t4, end_time
lw $t1, 0($t4)
sub $t2, $t1, $t0 # Calculate elapsed time
la $a0, time_msg
li $v0, 4
syscall
move $a0, $t2
li $v0, 1
syscall
# Print newline
la $a0, newline
li $v0, 4
syscall
j end_game
display_stats:
# Display current sum
la $a0, current_sum_msg
li $v0, 4
syscall
lw $a0, current_sum
li $v0, 1
syscall
# Display correct answers count
la $a0, correct_answers_msg
li $v0, 4
syscall
lw $a0, correct_answers
li $v0, 1
syscall
# Print newline
la $a0, newline
li $v0, 4
syscall
jr $ra
display_fireworks:
# Generate a random number
li $v0, 42 # Random number syscall
syscall
# Make sure the random number is positive
abs $v0, $v0 # Absolute value
# Ensure the random number is within bounds
li $t1, 3
rem $t0, $v0, $t1 # Get a value between 0 and 2
beq $t0, 0, fireworks1_display
beq $t0, 1, fireworks2_display
j fireworks3_display
fireworks1_display:
la $a0, fireworks1
li $v0, 4
syscall
j fireworks_end
fireworks2_display:
la $a0, fireworks2
li $v0, 4
syscall
j fireworks_end
fireworks3_display:
la $a0, fireworks3
li $v0, 4
syscall
fireworks_end:
jr $ra
end_game:
# End the game by exiting the program
li $v0, 10
syscall
i have this code is a maze game project i add a sound code and whenit ask me the sum of number and i answer it i get error
but if i take the sound code of it works. CAN YOU FIX THE CODE ?

Please make sure to code in Raspberry pi 4 and use theArmv7 assembly subroutine.

Please make sure to code in Raspberry pi 4 and use theArmv7 assembly subroutine.

Please make sure to code in Raspberry pi 4 and use theArmv7 assembly subroutine.
Task: Write the ARMv7 assembly subroutine: dist.
(a) On Canvas is a file, driver09.c, that you will use as the C program that calls your
assembly subroutines. While you can modify this file any way that you wish, note that
I will use my own C program to call your subroutines with whatever test cases I choose.
Ultimately, your subroutines should conform to the function declarations and notes given
below.
(b) Don’t tie your logic to the particular data in driver09.c.
(c) You will put your subroutine in the file hw09.s (the filename should match this exactly,
including the case of the characters).
(d) Write the assembly subroutine corresponding to this C function declaration:
double dist(struct point *p1, struct point *p2);
// the x/y coordinates of two points are passed, with each point in
// its own structure
// returns Euclidean distance between the points
(e) The Euclidean distance between points (x1, y1) and (x2, y2) is √(x1 − x2)2 + (y1 − y2)2.
(f) The values in the structure are stored as floats. In your program, convert the coordi-
nates to 64-bit floating point before you begin calculating the Euclidean distance.
(g) Remember that if in your subroutines you choose to store information in registers other
than R0-R3 or S0-S15, then you must preserve their values before doing so and restore
the values before the subroutine ends.
Note the following:
1. We are using ARMv7 assembly and the GNU C compiler on the 32-bit Raspberry Pi.
2. Each submitted program should conform to the compilation process that we did in class. That
is, I should be able to do the following, assuming your subroutines file is called hw09.s:
gcc driver09.c hw09.s
3. If you submit code that I think was produced by a compiler, chatGPT, someone on Chegg,
etc., then you will not receive credit.
4. As a comment in your subroutine file, include your name.
5. To submit, create a directory with a name that matches your net ID (for example, abc1234)
in lowercas

Discussion Board Purpose • In this discussion board, you will post any two quest

Discussion Board
Purpose
• In this discussion board, you will post any two quest

Discussion Board
Purpose
• In this discussion board, you will post any two questions related to weeks 2, 3 and 4. You will also read and respond to other classmates’ questions. This is an excellent way for you to interact with your colleagues and to share your thoughts about some relevant questions.
• I have placed the files from which the two questions must be placed, as well as two questions for me to answer