Question
Consider this MIPS program which implements a function that searches an array for a data value. The search function returns the index of the data
Consider this MIPS program which implements a function that searches an array for a data value. The search function returns the index of the data in the array, or -1 if the data is not in the array. The bolded code does the output. It prints the result returned by the search function.
# .data program: .asciiz "Array Search Program" prompt: .asciiz "Enter search value: " txt1: .asciiz "x[" txt2: .asciiz "]=" txt3: .asciiz "The value " txt4: .asciiz " was not found" txt5: .ascii "Search returns " .align 2 x: .word 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 .global main .text main: # register map # # $s0 search value # Print program header la $a0, program jal printlnString # Input and save search key la $a0, prompt jal getIntPrompt move $s0, $v0 # Search for key in array x move $a0, $s0 la $a1, x li $a2, 11 jal search # Print index of key la $a0, txt5 move $a1, $v0 jal printlnStringInt # Exit li $v0, 10 syscall search: # register map # $a0 search value # $a1 array address # $a2 array size # # $t0 loop counter # $t1 address of i'th array element # value of i'th array element li $v0, -1 # for $t0=0, $t0 < $a3, $t0++ li $t0, 0 loop: bge $t0, $a2, return sll $t1, $t0, 2 addu $t1, $t1, $a1 lw $t1, ($t1) # if x[i] > $a0 bne $t1, $a0, endif2 move $v0, $t0 j return endif2: addi $t0, $t0, 1 j loop return: jr $ra # I/O Library # includes input functions # place this code at the end of your assembly file .data newLine: .asciiz " " space: .asciiz " " .align 2 .text printSpace: # prints a space # arguments # none # returns # none la $a0, space li $v0, 4 syscall jr $ra println: # prints a new line # arguments # none # returns # none la $a0, newLine li $v0, 4 syscall jr $ra printInt: # prints an integer # arguments # $a0 integer to print # returns # none li $v0, 1 syscall jr $ra printlnInt: # prints an integer with a new line # arguments # $a0 integer to print # returns # none li $v0, 1 syscall la $a0, newLine li $v0, 4 syscall jr $ra printString: # prints a string # arguments # $a0 address of string to print # returns # none li $v0, 4 syscall jr $ra printlnString: # prints a string with a new line # arguments # $a0 address of string to print # returns # none li $v0, 4 syscall la $a0, newLine li $v0, 4 syscall jr $ra printStringInt: # prints a string and an integer # arguments # $a0 address of string to print # $a1 integer to print # returns # none # save return address so not overwritten # save $a1 so not overwritten addiu $sp, $sp, -8 sw $a1, 4($sp) sw $ra, 0($sp) # print string jal printString # print int # get argument from stack lw $a0, 4($sp) jal printInt lw $ra, 0($sp) addiu $sp, $sp, 8 jr $ra printlnStringInt: # prints a string and an integer with new line # arguments # $a0 address of string to print # $a1 integer to print # returns # none # save return address so not overwritten # save $a1 so not overwritten addiu $sp, $sp, -8 sw $a1, 4($sp) sw $ra, 0($sp) # print string jal printString # print int # get argument from stack lw $a0, 4($sp) jal printlnInt lw $ra, 0($sp) addiu $sp, $sp, 8 jr $ra getInt: # inputs an integer # arguments # none # returns # $v0 integer that was input li $v0, 5 syscall jr $ra getIntPrompt: # inputs an integer using a text prompt # arguments # $a0 address of string to print # returns # $v0 integer that was input # save return address so not overwritten addiu $sp, $sp, -4 sw $ra, 0($sp) jal printString jal getInt lw $ra, 0($sp) addiu $sp, $sp, 4 jr $ra
Program Output
Array Search Program Enter search value: 0 Search returns -1 -- program is finished running -- Reset: reset completed. Array Search Program Enter search value: 2 Search returns 0 -- program is finished running -- Reset: reset completed. Array Search Program Enter search value: 15 Search returns -1 -- program is finished running -- Reset: reset completed. Array Search Program Enter search value: 17 Search returns 6 -- program is finished running -- Reset: reset completed. Array Search Program Enter search value: 31 Search returns 10 -- program is finished running -- Reset: reset completed. Array Search Program Enter search value: 33 Search returns -1 -- program is finished running --
The Assignment
The program searches an array using a linear search to find the index (position) of the search key in the array. It returns -1 if the data is not in the array and the index of the data value if it is in the array.
Notice that the output is not the most informative. You will replace the output code with a decision statement that prints more informative messages for the cases where the data is in the array and the data is not in the array.
Here is some Java-style code that captures this logic.
if (index != -1) print "x[", index, "]=", key else print "The value", key, " was not found"
Code this if-then-else in MIPS. Test your solution. Use the given text strings in the program data section. Only change the output code. Leave all of the other code unchanged. Here is how the output should appear.
Desired Output Style
Array Search Program Enter search value: 0 The value 0 was not found -- program is finished running -- Reset: reset completed. Array Search Program Enter search value: 2 x[0]=2 -- program is finished running --
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started