Question: MIPS Assembly help. Here is assignment: Provided template: # data segment .data hdr: .ascii MIPS Assignment #4 .asciiz Program to Calculate Manhattan Distance.

MIPS Assembly help. Here is assignment:

MIPS Assembly help. Here is assignment: Provided template: # data segment .datahdr: .ascii " MIPS Assignment #4 " .asciiz "Program to Calculate Manhattan

Provided template:

# data segment

.data

hdr: .ascii " MIPS Assignment #4 "

.asciiz "Program to Calculate Manhattan Distance. "

# -----

# Game boards.

goalAMsg: .asciiz "3x3 Goal Board #1"

boardAsize: .word 3

goalA: .word 1, 2, 3

.word 4, 5, 6

.word 7, 8, 0

boardA0msg: .asciiz "3x3 Game Board 0"

boardA0: .word 1, 2, 0

.word 4, 5, 3

.word 7, 8, 6

boardA1msg: .asciiz "3x3 Game Board 1"

boardA1: .word 0, 1, 3

.word 4, 2, 5

.word 7, 8, 6

boardA2msg: .asciiz "3x3 Game Board 2"

boardA2: .word 4, 1, 2

.word 5, 8, 3

.word 7, 0, 6

boardA3msg: .asciiz "3x3 Game Board 3"

boardA3: .word 0, 5, 2

.word 1, 8, 3

.word 4, 7, 6

boardA4msg: .asciiz "3x3 Game Board 4"

boardA4: .word 4, 1, 3

.word 0, 2, 6

.word 7, 5, 8

boardA5msg: .asciiz "3x3 Game Board 5"

boardA5: .word 1, 2, 3

.word 0, 7, 6

.word 5, 4, 8

boardA6msg: .asciiz "3x3 Game Board 6"

boardA6: .word 2, 3, 5

.word 1, 0, 4

.word 7, 8, 6

boardA7msg: .asciiz "3x3 Game Board 7"

boardA7: .word 1, 0, 2

.word 7, 5, 4

.word 8, 6, 3

boardA8msg: .asciiz "3x3 Game Board 8"

boardA8: .word 8, 1, 3

.word 4, 0, 2

.word 7, 6, 5

boardA9msg: .asciiz "3x3 Game Board 9"

boardA9: .word 3, 5, 6

.word 1, 4, 0

.word 0, 7, 2

boardA10msg: .asciiz "3x3 Game Board 10"

boardA10: .word 5, 6, 2

.word 1, 8, 4

.word 7, 3, 0

boardA11msg: .asciiz "3x3 Game Board 11"

boardA11: .word 2, 8, 5

.word 0, 1, 7

.word 4, 3, 6

boardA12msg: .asciiz "3x3 Game Board 12"

boardA12: .word 8, 0, 5

.word 2, 1, 7

.word 4, 3, 6

boardA13msg: .asciiz "3x3 Game Board 13"

boardA13: .word 1, 2, 7

.word 0, 4, 3

.word 6, 5, 8

boardA14msg: .asciiz "3x3 Game Board 14"

boardA14: .word 1, 6, 4

.word 7, 0, 8

.word 2, 3, 5

boardA15msg: .asciiz "3x3 Game Board 15"

boardA15: .word 5, 1, 3

.word 4, 7, 0

.word 8, 6, 1

boardA16msg: .asciiz "3x3 Game Board 16"

boardA16: .word 4, 8, 2

.word 3, 6, 5

.word 1, 7, 0

boardA17msg: .asciiz "3x3 Game Board 17"

boardA17: .word 2, 4, 5

.word 0, 1, 7

.word 3, 8, 6

boardA18msg: .asciiz "3x3 Game Board 18"

boardA18: .word 5, 0, 4

.word 2, 3, 8

.word 7, 1, 6

boardA19msg: .asciiz "3x3 Game Board 19"

boardA19: .word 5, 7, 4

.word 3, 0, 8

.word 1, 6, 2

boardA20msg: .asciiz "3x3 Game Board 20"

boardA20: .word 5, 8, 7

.word 1, 4, 6

.word 3, 0, 2

boardA21msg: .asciiz "3x3 Game Board 21"

boardA21: .word 0, 5, 7

.word 2, 4, 1

.word 3, 6, 8

boardA22msg: .asciiz "3x3 Game Board 22"

boardA22: .word 8, 7, 6

.word 5, 4, 3

.word 2, 1, 0

boardA23msg: .asciiz "3x3 Game Board 23"

boardA23: .word 1, 2, 3

.word 4, 5, 6

.word 8, 7, 9

boardA24msg: .asciiz "3x3 Game Board 24"

boardA24: .word 1, 2, 3

.word 8, 0, 4

.word 7, 6, 5

# -----

goalBMsg: .asciiz "3x3 Goal Board #2"

boardBsize: .word 3

goalB: .word 1, 2, 3

.word 8, 0, 4

.word 7, 6, 5

boardB0msg: .asciiz "3x3 Game Board 0"

boardB0: .word 1, 2, 0

.word 4, 5, 3

.word 7, 8, 6

boardB1msg: .asciiz "3x3 Game Board 1"

boardB1: .word 0, 1, 3

.word 4, 2, 5

.word 7, 8, 6

boardB2msg: .asciiz "3x3 Game Board 2"

boardB2: .word 4, 1, 2

.word 5, 8, 3

.word 7, 0, 6

boardB3msg: .asciiz "3x3 Game Board 3"

boardB3: .word 0, 5, 2

.word 1, 8, 3

.word 4, 7, 6

# -----

goalCMsg: .asciiz "4x4 Goal Board #1"

boardCsize: .word 4

goalC: .word 1, 2, 3, 4

.word 5, 6, 7, 8

.word 9, 10, 11, 12

.word 13, 14, 15, 0

boardC0msg: .asciiz "4x4 Game Board 0"

boardC0: .word 0, 1, 2, 3

.word 5, 6, 7, 4

.word 9, 10, 11, 8

.word 13, 14, 15, 12

boardC1msg: .asciiz "4x4 Game Board 1"

boardC1: .word 2, 12, 0, 3

.word 13, 6, 14, 4

.word 9, 10, 15, 8

.word 5, 7, 11, 15

boardC2msg: .asciiz "4x4 Game Board 2"

boardC2: .word 3, 6, 2, 0

.word 13, 9, 8, 12

.word 14, 10, 7, 15

.word 5, 1, 11, 4

boardC3msg: .asciiz "4x4 Game Board 3"

boardC3: .word 0, 15, 14, 13

.word 12, 11, 10, 9

.word 8, 7, 6, 5

.word 4, 3, 2, 1

# -----

goalDMsg: .asciiz "4x4 Goal Board #2"

boardDsize: .word 4

goalD: .word 15, 14, 13, 12

.word 11, 10, 9, 8

.word 7, 6, 5, 4

.word 3, 2, 1, 0

boardD0msg: .asciiz "4x4 Game Board 0"

boardD0: .word 0, 1, 2, 3

.word 5, 6, 7, 4

.word 9, 10, 11, 8

.word 13, 14, 15, 12

boardD1msg: .asciiz "4x4 Game Board 1"

boardD1: .word 2, 12, 0, 3

.word 13, 6, 14, 4

.word 9, 10, 15, 8

.word 5, 7, 11, 1

boardD2msg: .asciiz "4x4 Game Board 2"

boardD2: .word 3, 6, 2, 0

.word 13, 9, 8, 12

.word 14, 10, 7, 15

.word 5, 2, 11, 4

boardD3msg: .asciiz "4x4 Game Board 3"

boardD3: .word 0, 15, 14, 13

.word 12, 11, 10, 9

.word 8, 7, 6, 5

.word 4, 3, 2, 1

# -----

goalEMsg: .asciiz "5x5 Goal Board #1"

boardEsize: .word 5

goalE: .word 1, 2, 3, 4, 5

.word 6, 7, 8, 9, 10

.word 11, 12, 13, 14, 15

.word 16, 17, 18, 19, 20

.word 21, 22, 23, 24, 0

boardE0msg: .asciiz "5x5 Game Board 0"

boardE0: .word 0, 1, 2, 3, 16

.word 5, 6, 7, 4, 17

.word 9, 10, 11, 8, 18

.word 13, 14, 15, 12, 19

.word 20, 24, 21, 23, 22

boardE1msg: .asciiz "5x5 Game Board 1"

boardE1: .word 2, 16, 12, 0, 3

.word 20, 9, 22, 15, 1

.word 13, 6, 14, 17, 4

.word 18, 21, 10, 23, 8

.word 5, 7, 19, 11, 24

boardE2msg: .asciiz "5x5 Game Board 2"

boardE2: .word 20, 3, 6, 2, 0

.word 24, 5, 9, 21, 22

.word 13, 19, 22, 8, 12

.word 14, 23, 10, 7, 15

.word 21, 19, 1, 11, 4

boardE3msg: .asciiz "5x5 Game Board 3"

boardE3: .word 0, 15, 14, 13, 16

.word 12, 19, 10, 9, 3

.word 18, 11, 7, 5, 2

.word 8, 20, 6, 21, 24

.word 4, 23, 22, 1, 17

boardE4msg: .asciiz "5x5 Game Board 1"

boardE4: .word 2, 16, 12, 0, 3

.word 20, 9, 22, 15, 1

.word 13, 6, 14, 17, 4

.word 18, 20, 10, 23, 8

.word 5, 7, 19, 11, 24

# -----

goalFMsg: .asciiz "6x6 Goal Board #1"

boardFsize: .word 6

goalF: .word 1, 2, 3, 4, 5, 6

.word 7, 8, 9, 10, 11, 12

.word 13, 14, 15, 16, 17, 18

.word 19, 20, 21, 22, 23, 24

.word 25, 26, 27, 28, 29, 30

.word 31, 32, 33, 34, 35, 0

boardF0msg: .asciiz "6x6 Game Board 0"

boardF0: .word 0, 1, 2, 3, 4, 28

.word 5, 6, 7, 34, 17, 27

.word 9, 10, 32, 8, 18, 25

.word 29, 31, 11, 33, 16, 20

.word 13, 14, 15, 12, 19, 30

.word 35, 24, 21, 23, 26, 22

boardF1msg: .asciiz "6x6 Game Board 1"

boardF1: .word 2, 16, 27, 12, 0, 34

.word 18, 28, 21, 10, 23, 8

.word 20, 31, 22, 35, 29, 1

.word 13, 26, 6, 14, 17, 4

.word 30, 9, 32, 7, 3, 15

.word 25, 5, 33, 19, 11, 24

boardF2msg: .asciiz "6x6 Game Board 2"

boardF2: .word 20, 3, 6, 2, 0, 25

.word 1, 31, 14, 33, 34, 1

.word 24, 29, 5, 9, 21, 22

.word 26, 13, 19, 22, 8, 12

.word 32, 23, 10, 28, 7, 15

.word 27, 21, 19, 30, 11, 4

# -----

# Local variables for displayBoard() function.

brdSection: .asciiz "************************************ "

brdHdr: .asciiz "------------------------------------ "

newLine: .asciiz " "

bar: .asciiz " | "

blnk: .asciiz " "

dashes: .asciiz " ----"

# -----

# Local variables for makeCalls() function.

badBoardMsg: .asciiz "Error, invalid board."

# -----

# Local variables for manhattanDistance() function.

MDmsg: .asciiz "Manhattan Distance: "

# -----

# Local variables for validateBoard() function.

TRUE = 1

FALSE = 0

.align 4

tstArr: .space 400

###########################################################

# text/code segment

.text

.globl main

.ent main

main:

# -----

# Display main program header.

la $a0, hdr

li $v0, 4

syscall # print header

# -----

# Display goal board

# Display game boards and distances

la $a0, brdSection

li $v0, 4

syscall # print header

la $a0, goalA

lw $a1, boardAsize

la $a2, goalAMsg

jal displayBoard

la $a0, goalA

la $a1, boardA0

lw $a2, boardAsize

la $a3, boardA0msg

jal makeCalls

la $a0, goalA

la $a1, boardA1

lw $a2, boardAsize

la $a3, boardA1msg

jal makeCalls

la $a0, goalA

la $a1, boardA2

lw $a2, boardAsize

la $a3, boardA2msg

jal makeCalls

la $a0, goalA

la $a1, boardA3

lw $a2, boardAsize

la $a3, boardA3msg

jal makeCalls

la $a0, goalA

la $a1, boardA4

lw $a2, boardAsize

la $a3, boardA4msg

jal makeCalls

la $a0, goalA

la $a1, boardA5

lw $a2, boardAsize

la $a3, boardA5msg

jal makeCalls

la $a0, goalA

la $a1, boardA6

lw $a2, boardAsize

la $a3, boardA6msg

jal makeCalls

la $a0, goalA

la $a1, boardA7

lw $a2, boardAsize

la $a3, boardA7msg

jal makeCalls

la $a0, goalA

la $a1, boardA8

lw $a2, boardAsize

la $a3, boardA8msg

jal makeCalls

la $a0, goalA

la $a1, boardA9

lw $a2, boardAsize

la $a3, boardA9msg

jal makeCalls

la $a0, goalA

la $a1, boardA10

lw $a2, boardAsize

la $a3, boardA10msg

jal makeCalls

la $a0, goalA

la $a1, boardA11

lw $a2, boardAsize

la $a3, boardA11msg

jal makeCalls

la $a0, goalA

la $a1, boardA12

lw $a2, boardAsize

la $a3, boardA12msg

jal makeCalls

la $a0, goalA

la $a1, boardA13

lw $a2, boardAsize

la $a3, boardA13msg

jal makeCalls

la $a0, goalA

la $a1, boardA14

lw $a2, boardAsize

la $a3, boardA14msg

jal makeCalls

la $a0, goalA

la $a1, boardA15

lw $a2, boardAsize

la $a3, boardA15msg

jal makeCalls

la $a0, goalA

la $a1, boardA16

lw $a2, boardAsize

la $a3, boardA16msg

jal makeCalls

la $a0, goalA

la $a1, boardA17

lw $a2, boardAsize

la $a3, boardA17msg

jal makeCalls

la $a0, goalA

la $a1, boardA18

lw $a2, boardAsize

la $a3, boardA18msg

jal makeCalls

la $a0, goalA

la $a1, boardA19

lw $a2, boardAsize

la $a3, boardA19msg

jal makeCalls

la $a0, goalA

la $a1, boardA20

lw $a2, boardAsize

la $a3, boardA20msg

jal makeCalls

la $a0, goalA

la $a1, boardA21

lw $a2, boardAsize

la $a3, boardA21msg

jal makeCalls

la $a0, goalA

la $a1, boardA22

lw $a2, boardAsize

la $a3, boardA22msg

jal makeCalls

la $a0, goalA

la $a1, boardA23

lw $a2, boardAsize

la $a3, boardA23msg

jal makeCalls

la $a0, goalA

la $a1, boardA24

lw $a2, boardAsize

la $a3, boardA24msg

jal makeCalls

# -----

# Display goal board

# Display game boards and distances

la $a0, brdSection

li $v0, 4

syscall # print header

la $a0, goalB

lw $a1, boardBsize

la $a2, goalBMsg

jal displayBoard

la $a0, goalB

la $a1, boardB0

lw $a2, boardBsize

la $a3, boardB0msg

jal makeCalls

la $a0, goalB

la $a1, boardB1

lw $a2, boardBsize

la $a3, boardB1msg

jal makeCalls

la $a0, goalB

la $a1, boardB2

lw $a2, boardBsize

la $a3, boardB2msg

jal makeCalls

la $a0, goalB

la $a1, boardB3

lw $a2, boardBsize

la $a3, boardB3msg

jal makeCalls

# -----

# Display goal board

# Display game boards and distances

la $a0, brdSection

li $v0, 4

syscall # print header

la $a0, goalC

lw $a1, boardCsize

la $a2, goalCMsg

jal displayBoard

la $a0, goalC

la $a1, boardC0

lw $a2, boardCsize

la $a3, boardC0msg

jal makeCalls

la $a0, goalC

la $a1, boardC1

lw $a2, boardCsize

la $a3, boardC1msg

jal makeCalls

la $a0, goalC

la $a1, boardC2

lw $a2, boardCsize

la $a3, boardC2msg

jal makeCalls

la $a0, goalC

la $a1, boardC3

lw $a2, boardCsize

la $a3, boardC3msg

jal makeCalls

# -----

# Display goal board

# Display game boards and distances

la $a0, brdSection

li $v0, 4

syscall # print header

la $a0, goalD

lw $a1, boardDsize

la $a2, goalDMsg

jal displayBoard

la $a0, goalD

la $a1, boardD0

lw $a2, boardDsize

la $a3, boardD0msg

jal makeCalls

la $a0, goalD

la $a1, boardD1

lw $a2, boardDsize

la $a3, boardD1msg

jal makeCalls

la $a0, goalD

la $a1, boardD2

lw $a2, boardDsize

la $a3, boardD2msg

jal makeCalls

la $a0, goalD

la $a1, boardD3

lw $a2, boardDsize

la $a3, boardD3msg

jal makeCalls

# -----

# Display goal board

# Display game boards and distances

la $a0, brdSection

li $v0, 4

syscall # print header

la $a0, goalE

lw $a1, boardEsize

la $a2, goalEMsg

jal displayBoard

la $a0, goalE

la $a1, boardE0

lw $a2, boardEsize

la $a3, boardE0msg

jal makeCalls

la $a0, goalE

la $a1, boardE1

lw $a2, boardEsize

la $a3, boardE1msg

jal makeCalls

la $a0, goalE

la $a1, boardE2

lw $a2, boardEsize

la $a3, boardE2msg

jal makeCalls

la $a0, goalE

la $a1, boardE3

lw $a2, boardEsize

la $a3, boardE3msg

jal makeCalls

la $a0, goalE

la $a1, boardE4

lw $a2, boardEsize

la $a3, boardE4msg

jal makeCalls

# -----

# Display goal board

# Display game boards and distances

la $a0, brdSection

li $v0, 4

syscall # print header

la $a0, goalF

lw $a1, boardFsize

la $a2, goalFMsg

jal displayBoard

la $a0, goalF

la $a1, boardF0

lw $a2, boardFsize

la $a3, boardF0msg

jal makeCalls

la $a0, goalF

la $a1, boardF1

lw $a2, boardFsize

la $a3, boardF1msg

jal makeCalls

la $a0, goalF

la $a1, boardF2

lw $a2, boardFsize

la $a3, boardF2msg

jal makeCalls

# -----

# Done, terminate program.

li $v0, 10

syscall

.end main

######################################################################

# Procedure to make calls...

# -----

# Arguments

# $a0 - goal board address

# $a1 - board address

# $a2 - board order

# $a3 - board title message

.globl makeCalls

.ent makeCalls

makeCalls:

subu $sp, $sp, 28 # Save registers.

sw $s0, ($sp)

sw $s1, 4($sp)

sw $s2, 8($sp)

sw $s4, 12($sp)

sw $s5, 16($sp)

sw $s6, 20($sp)

sw $ra, 24($sp)

move $s0, $a0

move $s1, $a1

move $s2, $a2

move $s3, $a3

move $a0, $s1

move $a1, $s2

move $a2, $s3

jal displayBoard

move $a0, $s1

move $a1, $s2

jal validateBoard

beq $v0, TRUE, showDist

li $v0, 4

la $a0, badBoardMsg

syscall

li $v0, 4

la $a0, newLine

syscall

li $v0, 4

la $a0, newLine

syscall

j makeCallsDone

showDist:

move $a0, $s0

move $a1, $s1

move $a2, $s2

jal manhattanDistance

makeCallsDone:

lw $s0, ($sp)

lw $s1, 4($sp)

lw $s2, 8($sp)

lw $s4, 12($sp)

lw $s5, 16($sp)

lw $s6, 20($sp)

lw $ra, 24($sp)

add $sp, $sp, 28

jr $ra

.end makeCalls

######################################################################

# Function to print a formatted game board.

# -----

# Formula for multiple dimension array indexing:

# addr(r,c) = baseAddr + (r * colSize + c) * dataSize

# -----

# Arguments:

# $a0 - board address

# $a1 - order (size) of the board

# $a2 - title address

.globl displayBoard

.ent displayBoard

displayBoard:

# YOUR CODE GOES HERE

.end displayBoard

######################################################################

# Function to compute the manhattan distance

# between two game boards.

# -----

# Formula for multiple dimension array indexing:

# addr(r,c) = baseAddr + (r * colSize + c) * dataSize

# -----

# Arguments:

# $a0 - goal board address

# $a1 - board address

# $a2 - order (size) of the board

# Returns:

# manhattan distance, $v0

.globl manhattanDistance

.ent manhattanDistance

manhattanDistance:

# YOUR CODE GOES HERE

.end manhattanDistance

######################################################################

# Validate board

# Must have numbers 1 to (order^2)-1

# Each must appear only once.

# Arguments:

# $a0 - board address

# $a1 - board order

# Returns:

# $v0 TRUE or FALSE

.globl validateBoard

.ent validateBoard

validateBoard:

# YOUR CODE GOES HERE

.end validateBoard

######################################################################

nent: SSI Write a simple assembly language program to calculate the Manhattan Distance1 (also referred to as Taxicab Geometry) between two game grids. The Manhattan Distance can be used as a metric to determine how close a current game board configuration is to a final goal or ending configuration. Y Termmal5 Cinton Each game grid is a two- dimensional array containing numbers representing the current game status. The game grid must Konea Toam Murray Hd be square (rows-columns) and the size is referred to as the order The game board must contain the numbers from 0 to order2-1. For example, a goal state for a grid of order 3 might be as shown. The Jovce Kips Bay Flatiron The provided main calls the following functions Write a MIPS void function, displayBoard0, that will display a formatted game grid. Refer to the sample output for examples . Write a MIPS void function, manhattanDistance0, to determine the Manhattan Distance between the passed goal grid and the current state grid. The distance between two points, (Xo,yo) and (x,y,), can be computed as follows distance- The points represent the grid location. The distance is displayed to the console. Refer to the sample output for examples. For our implementation, the 0 represents an empty space and should be skipped. Write a MIPS value returning function, validateBoard0, to validate a game board. The function should return TRUE or FALSE (defined constants). Note, A MIPS function returns its result in Sv0 . nent: SSI Write a simple assembly language program to calculate the Manhattan Distance1 (also referred to as Taxicab Geometry) between two game grids. The Manhattan Distance can be used as a metric to determine how close a current game board configuration is to a final goal or ending configuration. Y Termmal5 Cinton Each game grid is a two- dimensional array containing numbers representing the current game status. The game grid must Konea Toam Murray Hd be square (rows-columns) and the size is referred to as the order The game board must contain the numbers from 0 to order2-1. For example, a goal state for a grid of order 3 might be as shown. The Jovce Kips Bay Flatiron The provided main calls the following functions Write a MIPS void function, displayBoard0, that will display a formatted game grid. Refer to the sample output for examples . Write a MIPS void function, manhattanDistance0, to determine the Manhattan Distance between the passed goal grid and the current state grid. The distance between two points, (Xo,yo) and (x,y,), can be computed as follows distance- The points represent the grid location. The distance is displayed to the console. Refer to the sample output for examples. For our implementation, the 0 represents an empty space and should be skipped. Write a MIPS value returning function, validateBoard0, to validate a game board. The function should return TRUE or FALSE (defined constants). Note, A MIPS function returns its result in Sv0

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!