[SOLVED] CS计算机代考程序代写 prolog mips main.asm

30 $

File Name: CS计算机代考程序代写_prolog_mips_main.asm.zip
File Size: 471 KB

SKU: 7057515955 Category: Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Or Upload Your Assignment Here:


main.asm

sprintf.asm

tests.asm

#############################################################
#DO NOT MODIFY THIS FILE IN ANY WAY!!!
#############################################################

#############################################################
#This data block contains all of the inputs and outputs
#necessary to summarize the final grades component of the
#output.
#############################################################

.data
testset_format:.asciiz “Beginning to run tests to count the number of format specifiers.


testset_intconv: .asciiz “Beginning to run tests to check the integer conversion to string.


testset_sprintf: .asciiz “Beginning to run tests to verify the correctness of sprintf().

menu_lead: .asciiz “Which function(s) are you ready to test?[0-3]

menu_all:.asciiz ”0.All of them

menu_first: .asciiz ”1.Count format specifiers

menu_second: .asciiz ”2.Convert int to string

menu_third: .asciiz ”3.sprintf

invalid_input: .asciiz “Invalid selection.Try running again and entering a number 0-3.”

break: .asciiz “

—————————————————-


final_score: .asciiz “Your final scores are:

format_score:.asciiz ”Number of format specifiers:”
conv_score:.asciiz ”Converting int to string: ”
sprintf_score: .asciiz ”Correctness of sprintf(): ”

slash_max: .asciiz “/100

slash_max2:.asciiz “/200

newline_main:.asciiz “

.text

.globl main

#############################################################
#The code below calls the three testing procedures from
#the tests.asm file, stores, and outputs the total points
#earned from this assignment.
#############################################################

main:

# Print menu
la $a0, menu_lead
li $v0, 4
syscall

la $a0, menu_all
syscall

la $a0, menu_first
syscall

la $a0, menu_second
syscall

la $a0, menu_third
syscall

# Get user input
li $v0, 5
syscall

# Validate that it’s between 0-3 inclusive
blt $v0, $zero, BAD_INPUT
bgt $v0, 3, BAD_INPUT
j AFTER_BAD_INPUT

BAD_INPUT:
la $a0, invalid_input
li $v0, 4
syscall

j EXIT

AFTER_BAD_INPUT:
# $t6 will store the user option
move $t6, $v0

# Jump to next test if user option == 2 or 3
beq $t6, 2, BEFORE_CONVERT_INT
beq $t6, 3, BEFORE_CONVERT_INT

# Back up user test option before calling the tests
subi $sp, $sp, 4
sw $t6, 0($sp)

# Run tests for number of format specifiers
la $a0, testset_format
li $v0, 4
syscall

jal PROC_TEST_COUNT_FORMAT_SPECIFIERS

# Recover user option
lw $t6, 0($sp)
addi $sp, $sp, 4

# put number of points for format specifiers into $t9
move $t9, $v0

BEFORE_CONVERT_INT:

# Jump to next test if user option == 1 or 3
beq $t6, 1, BEFORE_SPRINTF
beq $t6, 3, BEFORE_SPRINTF

# Back up points so far & user option before calling the next set of tests
subi $sp, $sp, 8
sw $t9, 0($sp)
sw $t6, 4($sp)

jal PROC_TEST_CONVERT_INT_TO_STRING

# Recover points earned so far
lw $t9, 0($sp)
lw $t6, 4($sp)
addi $sp, $sp, 8

# put number of points for conversion into $t8
move $t8, $v0

BEFORE_SPRINTF:

# Jump to print points if user option == 1 or 2
beq $t6, 1, PRINT_POINTS
beq $t6, 2, PRINT_POINTS

# Run tests for number of format specifiers
la $a0, testset_sprintf
li $v0, 4
syscall

# Back up points so far & user option before calling the next set of tests
subi $sp, $sp, 12
sw $t9, 0($sp)
sw $t8, 4($sp)
sw $t6, 8($sp)

jal PROC_TEST_SPRINTF

# Recover points earned so far
lw $t9, 0($sp)
lw $t8, 4($sp)
lw $t6, 8($sp)
addi $sp, $sp, 12

# put number of points for sprintf into $t7
move $t7, $v0

PRINT_POINTS:
# output final grades
la $a0, break
li $v0, 4
syscall

la $a0, final_score
syscall

FORMAT_SPEC_GRADE:
# Jump to next points output if user option == 2 or 3
beq $t6, 2, INT_TO_STRING_GRADE
beq $t6, 3, INT_TO_STRING_GRADE

# format specifiers score
la $a0, format_score
syscall

move $a0, $t9
li $v0, 1
syscall

la $a0, slash_max
li $v0, 4
syscall

INT_TO_STRING_GRADE:
# Jump to next points output if user option == 1 or 3
beq $t6, 1, SPRINTF_GRADE
beq $t6, 3, SPRINTF_GRADE

# integer to string conversion score
la $a0, conv_score
syscall

move $a0, $t8
li $v0, 1
syscall

la $a0, slash_max
li $v0, 4
syscall

SPRINTF_GRADE:
# Jump to exit if user option == 1 or 2
beq $t6, 1, EXIT
beq $t6, 2, EXIT

# sprintf score
la $a0, sprintf_score
syscall

move $a0, $t7
li $v0, 1
syscall

la $a0, slash_max2
li $v0, 4
syscall

EXIT:
# terminate program cleanly
li $v0, 10
syscall

##On my honor:
##
##– I have not discussed the C language code in my program with
##anyone other than my instructor or the teaching assistants
##assigned to this course.
##
##– I have not used C language code obtained from another student,
##the Internet, or any other unauthorized source, either modified
##or unmodified.
##
##– If any C language code or documentation used in my program
##was obtained from an authorized source, such as a text book or
##course notes, that has been clearly noted with a proper citation
##in the comments of my program.
##
##– I have not designed this program in such a way as to defeat or
##interfere with the normal operation of the grading code.
##
##
##

#############################################################
#This data block contains a ‘digits’ memory allocation
#that you can use to store any strings that you convert
#from integers.Remember to either clear it after use or
#null-terminate the strings that you save here!
#############################################################

.data
digits:.space 10

.text

.globl PROC_COUNT_FORMAT_SPECIFIERS
.globl PROC_CONVERT_INT_TO_STRING
.globl PROC_SPRINTF

.globl PROC_FIND_LENGTH_STRING
.globl PROC_FIND_NUM_DIGITS
.globl PROC_REVERSE_STRING
.globl PROC_CLEAR_DIGITS

#############################################################
#Given the address of a string, count the number of format
#specifiers that appear in that string
#
#Pre:$a0 contains the address of the string to evaluate
#Post: $v0 contains the number of format specifiers that
#were found in the input string
#############################################################

PROC_COUNT_FORMAT_SPECIFIERS:

# add your solution here

# return
jr $ra

#############################################################
#Given an integer, convert it into a string
#
#Pre:$a0 contains the integer that will be converted
#Post: $v0 contains the address of the newly-created string
#############################################################

PROC_CONVERT_INT_TO_STRING:

# add your solution here

# return
jr $ra

#############################################################
#Given the address of a string and a string which may or
#may not include format specifiers, write a formatted
#version of the string into the output register $v0
#
#Pre:$a0 contains the address of the string dest, where
#the final string will be written into
#$a1 contains the address of a format string, which
#may or may not include format specifiers, and which
#details the required final state of the output
#string
#$a2 contains an unsigned integer or the address of
#a string, or it is empty
#$a3 contains an unsigned integer or the address of
#a string, or it is empty
#Post: $a0 contains the address of the formatted dest,
#including null terminator
#$v0 contains the length of the string written into
#dest, not including null terminator
#############################################################

PROC_SPRINTF:

# add your solution here

# return
jr $ra

#############################################################
#This procedure will find the length of a provided string
#by counting characters until the null terminator is
#reached
#
#Pre:$a0 contains the string to evaluate
#Post: $v0 contains the length of the string
#############################################################

PROC_FIND_LENGTH_STRING:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# function body
move $t2, $a0# $t2 is the current char we’re pointing to
li $t4, 0# $t4 is my length counter for my_string

# Loop until we find the null terminator
LOOP_FIND_NULL_BYTE_LENGTH:
lb $t1, 0($t2)# $t1 is the character loaded from offset $t2
beq $t1, $zero, FOUND_NULL_BYTE_LENGTH

addi $t4, $t4, 1# increment length counter
addi $t2, $t2, 1# increment character pointer

j LOOP_FIND_NULL_BYTE_LENGTH

FOUND_NULL_BYTE_LENGTH:
# at this point, $t2 is pointed at
move $v0, $t4

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# return
jr $ra

#############################################################
#This procedure will determine the number of digits in the
#provided integer input via iterative division by 10.
#
#Pre:$a0 contains the integer to evaluate
#Post: $v0 contains the number of digits in that integer
#############################################################

PROC_FIND_NUM_DIGITS:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# function body
li $t0, 10# load a 10 into $t0 for the division
li $t5, 0 # $t5 will hold the counter for number of digits
move $t6, $a0 # $t6 will hold the result of the iterative division

NUM_DIGITS_LOOP:
divu $t6, $t0 # divide the number by 10
addi $t5, $t5, 1

mflo $t6 # move quotient back into $t6
beq $t6, $zero, FOUND_NUM_DIGITS# if the quotient was 0, $t5 stores the number of digits
j NUM_DIGITS_LOOP

FOUND_NUM_DIGITS:
move $v0, $t5 # copy the number of digits $t5 into $v0 to return

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# return
jr $ra

#############################################################
#This procedure will reverse the characters in a string in-
#place when given the addresses of the first and last
#characters in the string.
#
#Pre:$a0 contains the address of the first character
#$a1 contains the address of the last character
#Post: $a0 contains the first character of the reversed
#string
#############################################################

PROC_REVERSE_STRING:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# function body
move $t0, $a0# move the pointer to the first char into $t0
move $t2, $a1 # move the pointer to the last char into $t2

# Loop until the pointers cross
LOOP_REVERSE:
lb $t9, 0($t2)# backing up the $t2 position char into $t9
lb $t8, 0($t0)# load the $t0 position char into $t8

sb $t8, 0($t2)# write the begin char into $t2 position
sb $t9, 0($t0)# write the end char into $t0 position

# increment and decrement the pointers
addi $t0, $t0, 1
subi $t2, $t2, 1

ble $t2, $t0, END_OF_REVERSE_LOOP
j LOOP_REVERSE

END_OF_REVERSE_LOOP:

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# return
jr $ra

#############################################################
#This procedure will clear the contents of the ‘digits’
#memory allocation that is defined in the data block of
#this file.
#
#Pre:None
#Post: The ‘digits’ section of memory is cleared to all 0s
#############################################################

PROC_CLEAR_DIGITS:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# function body
la $t0, digits# get the address of the digits space
li $t1, 10# we need to loop 10 times
li $t2, 0 # and the loop counter starts at 0

CLEAR_LOOP:
sb $zero, 0($t0)# write all zeros into #t0
addi $t0, $t0, 1# move to the next char space
addi $t2, $t2, 1# increment loop counter

beq $t2, $t1, END_CLEAR # break out of the loop after 10 writes
j CLEAR_LOOP

END_CLEAR:

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# Return
jr $ra

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

#############################################################
#DO NOT MODIFY THIS FILE IN ANY WAY!!!
#############################################################

#############################################################
#This data block contains all of the inputs and outputs
#necessary to run the test cases.
#############################################################

.data
your_answer: .asciiz “Your answer was: ”
your_length: .asciiz “The length that you returned was: ”
newline: .asciiz “

lenpoints: .asciiz “Your score on the length tests is: ”
convpoints:.asciiz “Your score on the conversion tests is: ”
printpoints: .asciiz “Your score on the sprintf() tests is: ”
slash: .asciiz “/”

test1msg:.asciiz “Testing string ‘This is a lovely test’.

test1: .asciiz “This is a lovely test”
test1ans: .word 0
test1pass: .asciiz “Correct, ‘This is a lovely test’ has 0 format specifiers.10/10


test1fail: .asciiz “No, ‘This is a lovely test’ has 0 format specifiers.0/10

test2msg:.asciiz “Testing string ‘I have one %u format specifier’.

test2: .asciiz “I have one %u format specifier”
test2ans: .word 1
test2pass: .asciiz “Correct, ‘I have one %u format specifier’ has 1 format specifier.10/10


test2fail: .asciiz “No, ‘I have one %u format specifier’ has 1 format specifier.0/10

test3msg:.asciiz “Testing string ‘I have %s two format %u specifiers’.

test3: .asciiz “I have %s two format %u specifiers”
test3ans: .word 2
test3pass: .asciiz “Correct, ‘I have %s two format %u specifiers’ has 2 format specifiers. 10/10


test3fail: .asciiz “No, ‘I have %s two format %u specifiers’ has 2 format specifiers. 0/10

test4msg:.asciiz “Testing string ‘Writing tests for MIPS is awful’.

test4: .asciiz “Writing tests for MIPS is awful”
test4ans: .word 0
test4pass: .asciiz “Correct, ‘Writing tests for MIPS is awful’ has 0 format specifiers.10/10


test4fail: .asciiz “No, ‘Writing tests for MIPS is awful’ has 0 format specifiers.0/10

test5msg:.asciiz “Testing string ‘La Villa Strangiato’.

test5: .asciiz “La Villa Strangiato”
test5ans: .word 0
test5pass: .asciiz “Correct, ‘La Villa Strangiato’ has 0 format specifiers.10/10


test5fail: .asciiz “No, ‘La Villa Strangiato’ has 0 format specifiers.0/10

test6msg:.asciiz “Testing string ‘8 + 12 = %u’.

test6: .asciiz “8 + 12 = %u”
test6ans: .word 1
test6pass: .asciiz “Correct, ‘8 + 12 = %u’ has 1 format specifier. 10/10


test6fail: .asciiz “No, ‘8 + 12 = %u’ has 1 format specifier. 0/10

test7msg:.asciiz “Testing string ’14 * %u = %u’.

test7: .asciiz “14 * %u = %u”
test7ans: .word 2
test7pass: .asciiz “Correct, ’14 * %u = %u’ has 2 format specifiers. 10/10


test7fail: .asciiz “No, ’14 * %u = %u’ has 2 format specifiers. 0/10

test8msg:.asciiz “Testing string ‘My favorite number is %u’.

test8: .asciiz “My favorite number is %u”
test8ans: .word 1
test8pass: .asciiz “Correct, ‘My favorite number is %u’ has 1 format specifier.10/10


test8fail: .asciiz “No, ‘My favorite number is %u’ has 1 format specifier.0/10

test9msg:.asciiz “Testing string ‘I haven’t used %s in a test recently’.

test9: .asciiz “I haven’t used %s in a test recently”
test9ans: .word 1
test9pass: .asciiz “Correct, ‘I haven’t used %s in a test recently’ has 1 format specifier.10/10


test9fail: .asciiz “No, ‘I haven’t used %s in a test recently’ has 1 format specifier.0/10

test10msg: .asciiz“Testing string ‘This is the last test of the category’.

test10:.asciiz“This is the last test of the category”
test10ans: .word0
test10pass:.asciiz“Correct, ‘This is the last test of the category’ has 0 format specifiers.10/10


test10fail:.asciiz“No, ‘This is the last test of the category’ has 0 format specifiers.0/10

test11msg: .asciiz“Testing integer 12345.

test11:.word12345
test11ans: .asciiz“12345”
test11pass:.asciiz“Correct, you have converted 12345 into ‘12345’ successfully. 10/10


test11fail:.asciiz“No, 12345 should be converted into ‘12345’. 0/10

test12msg: .asciiz“Testing integer 7.

test12:.word7
test12ans: .asciiz“7”
test12pass:.asciiz“Correct, you have converted 7 into ‘7’ successfully. 10/10


test12fail:.asciiz“No, 7 should be converted into ‘7’. 0/10

test13msg: .asciiz“Testing integer 600.

test13:.word600
test13ans: .asciiz“600”
test13pass:.asciiz“Correct, you have converted 600 into ‘600’ successfully. 10/10


test13fail:.asciiz“No, 600 should be converted into ‘600’. 0/10

test14msg: .asciiz“Testing integer 42.

test14:.word42
test14ans: .asciiz“42”
test14pass:.asciiz“Correct, you have converted 42 into ’42’ successfully. 10/10


test14fail:.asciiz“No, 42 should be converted into ’42’. 0/10

test15msg: .asciiz“Testing integer 54321.

test15:.word54321
test15ans: .asciiz“54321”
test15pass:.asciiz“Correct, you have converted 54321 into ‘54321’ successfully. 10/10


test15fail:.asciiz“No, 54321 should be converted into ‘54321’. 0/10

test16msg: .asciiz“Testing integer 80.

test16:.word80
test16ans: .asciiz“80”
test16pass:.asciiz“Correct, you have converted 80 into ’80’ successfully. 10/10


test16fail:.asciiz“No, 80 should be converted into ’80’. 0/10

test17msg: .asciiz“Testing integer 123.

test17:.word123
test17ans: .asciiz“123”
test17pass:.asciiz“Correct, you have converted 123 into ‘123’ successfully. 10/10


test17fail:.asciiz“No, 123 should be converted into ‘123’. 0/10

test18msg: .asciiz“Testing integer 10005.

test18:.word10005
test18ans: .asciiz“10005”
test18pass:.asciiz“Correct, you have converted 10005 into ‘10005’ successfully. 10/10


test18fail:.asciiz“No, 10005 should be converted into ‘10005’. 0/10

test19msg: .asciiz“Testing integer 10050.

test19:.word10050
test19ans: .asciiz“10050”
test19pass:.asciiz“Correct, you have converted 10050 into ‘10050’ successfully. 10/10


test19fail:.asciiz“No, 12345 should be converted into ‘10050’. 0/10

test20msg: .asciiz“Testing integer 12045.

test20:.word12045
test20ans: .asciiz“12045”
test20pass:.asciiz“Correct, you have converted 12045 into ‘12045’ successfully. 10/10


test20fail:.asciiz“No, 12045 should be converted into ‘12045’. 0/10

test21msg: .asciiz“Testing string ‘I have one %u format specifier’.

test21msgin: .asciiz“Format specifier input is integer 12345.

test21: .asciiz“I have one %u format specifier”
test21space: .space 100
test21in1: .word12345
test21ans: .asciiz“I have one 12345 format specifier”
test21len: .word33
test21pass:.asciiz“Correct, you have created the string ‘I have one 12345 format specifier’.10/10

test21fail:.asciiz“No, you should have created the string ‘I have one 12345 format specifier’. 0/10

test21pass2: .asciiz“Correct, your string has length 33.10/10


test21fail2: .asciiz“No, your function should return length 33.0/10

test22msg: .asciiz“Testing string ‘This is a lovely test’.

test22msgin: .asciiz“No format specifier inputs are needed.

test22: .asciiz“This is a lovely test”
test22space: .space 100
test22ans: .asciiz“This is a lovely test”
test22len: .word21
test22pass:.asciiz“Correct, you have created the string ‘This is a lovely test’.10/10

test22fail:.asciiz“No, you should have created the string ‘This is a lovely test’. 0/10

test22pass2: .asciiz“Correct, your string has length 21.10/10


test22fail2: .asciiz“No, your function should return length 21.0/10

test23msg: .asciiz“Testing string ‘I haven’t used %s in a test recently’.

test23msgin: .asciiz“Format specifier input is string ‘this is so fun’.

test23: .asciiz“I haven’t used %s in a test recently”
test23space: .space 100
test23in1: .asciiz“this is so fun”
test23ans: .asciiz“I haven’t used this is so fun in a test recently”
test23len: .word48
test23pass:.asciiz“Correct, you have created the string ‘I haven’t used this is so fun in a test recently’. 10/10

test23fail:.asciiz“No, you should have created the string ‘I haven’t used this is so fun in a test recently’.0/10

test23pass2: .asciiz“Correct, your string has length 48.10/10


test23fail2: .asciiz“No, your function should return length 48.0/10

test24msg: .asciiz“Testing string ‘I have %s two format %u specifiers’.

test24msgin: .asciiz“Format specifier inputs are string ‘parameter one’ and integer 1001.

test24: .asciiz“I have %s two format %u specifiers”
test24space: .space 100
test24in1: .asciiz“parameter one”
test24in2: .word1001
test24ans: .asciiz“I have parameter one two format 1001 specifiers”
test24len: .word47
test24pass:.asciiz“Correct, you have created the string ‘I have parameter one two format 1001 specifiers’.10/10

test24fail:.asciiz“No, you should have created the string ‘I have parameter one two format 1001 specifiers’. 0/10

test24pass2: .asciiz“Correct, your string has length 47.10/10


test24fail2: .asciiz“No, your function should return length 47.0/10

test25msg: .asciiz“Testing string ‘Writing tests for MIPS is awful’.

test25msgin: .asciiz“No format specifier inputs are needed.

test25: .asciiz“Writing tests for MIPS is awful”
test25space: .space 100
test25ans: .asciiz“Writing tests for MIPS is awful”
test25len: .word31
test25pass:.asciiz“Correct, you have created the string ‘Writing tests for MIPS is awful’.10/10

test25fail:.asciiz“No, you should have created the string ‘Writing tests for MIPS is awful’. 0/10

test25pass2: .asciiz“Correct, your string has length 31.10/10


test25fail2: .asciiz“No, your function should return length 31.0/10

test26msg: .asciiz“Testing string ‘La Villa Strangiato’.

test26msgin: .asciiz“No format specifier inputs are needed.

test26: .asciiz“La Villa Strangiato”
test26space: .space 100
test26ans: .asciiz“La Villa Strangiato”
test26len: .word19
test26pass:.asciiz“Correct, you have created the string ‘La Villa Strangiato’.10/10

test26fail:.asciiz“No, you should have created the string ‘La Villa Strangiato’. 0/10

test26pass2: .asciiz“Correct, your string has length 19.10/10


test26fail2: .asciiz“No, your function should return length 19.0/10

test27msg: .asciiz“Testing string ‘8 + 12 = %u’.

test27msgin: .asciiz“Format specifier input is integer 20.

test27: .asciiz“8 + 12 = %u”
test27space: .space 100
test27in1: .word20
test27ans: .asciiz“8 + 12 = 20”
test27len: .word11
test27pass:.asciiz“Correct, you have created the string ‘8 + 12 = 20’.10/10

test27fail:.asciiz“No, you should have created the string ‘8 + 12 = 20′. 0/10

test27pass2: .asciiz“Correct, your string has length 11.10/10


test27fail2: .asciiz“No, your function should return length 11.0/10

test28msg: .asciiz“Testing string ’14 * %u = %u’.

test28msgin: .asciiz“Format specifier inputs are integer 17 and integer 238.

test28: .asciiz“14 * %u = %u”
test28space: .space 100
test28in1: .word17
test28in2: .word238
test28ans: .asciiz“14 * 17 = 238”
test28len: .word13
test28pass:.asciiz“Correct, you have created the string ’14 * 17 = 238′.10/10

test28fail:.asciiz“No, you should have created the string ’14 * 17 = 238′. 0/10

test28pass2: .asciiz“Correct, your string has length 13.10/10


test28fail2: .asciiz“No, your function should return length 13.0/10

test29msg: .asciiz“Testing string ‘My favorite number is %u’.

test29msgin: .asciiz“Format specifier input is integer 42.

test29: .asciiz“My favorite number is %u”
test29space: .space 100
test29in1: .word42
test29ans: .asciiz“My favorite number is 42”
test29len: .word24
test29pass:.asciiz“Correct, you have created the string ‘My favorite number is 42’. 10/10

test29fail:.asciiz“No, you should have created the string ‘My favorite number is 42’.0/10

test29pass2: .asciiz“Correct, your string has length 24.10/10


test29fail2: .asciiz“No, your function should return length 24.0/10

test30msg: .asciiz“Testing string ‘This is the last test of the category’.

test30msgin: .asciiz“No format specifier inputs are needed.

test30: .asciiz“This is the last test of the category”
test30space: .space 100
test30ans: .asciiz“This is the last test of the category”
test30len: .word37
test30pass:.asciiz“Correct, you have created the string ‘This is the last test of the category’.10/10

test30fail:.asciiz“No, you should have created the string ‘This is the last test of the category’. 0/10

test30pass2: .asciiz“Correct, your string has length 37.10/10


test30fail2: .asciiz“No, your function should return length 37.0/10

.text

.globl PROC_TEST_COUNT_FORMAT_SPECIFIERS
.globl PROC_TEST_CONVERT_INT_TO_STRING
.globl PROC_TEST_SPRINTF

###############################################################
#This procedure runs the tests to verify the correctness of
#COUNT_FORMAT_SPECIFIERS.
#
#Post:$v0 contains the total points earned out of 100
###############################################################

PROC_TEST_COUNT_FORMAT_SPECIFIERS:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# procedure body

# initialize points to 0 in $t9
li $t9, 0

TEST_1:
# display string to test
la $a0, test1msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test1
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test1ans
bne $t0, $t8, TEST_1_INCORRECT

# if correct, print that it is and allocate points
TEST_1_CORRECT:
la $a0, test1pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_2

# if incorrect, print that it is not
TEST_1_INCORRECT:
la $a0, test1fail
li $v0, 4
syscall

TEST_2:
# display string to test
la $a0, test2msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test2
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test2ans
bne $t0, $t8, TEST_2_INCORRECT

# if correct, print that it is and allocate points
TEST_2_CORRECT:
la $a0, test2pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_3

# if incorrect, print that it is not
TEST_2_INCORRECT:
la $a0, test2fail
li $v0, 4
syscall

TEST_3:
# display string to test
la $a0, test3msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test3
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test3ans
bne $t0, $t8, TEST_3_INCORRECT

# if correct, print that it is and allocate points
TEST_3_CORRECT:
la $a0, test3pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_4

# if incorrect, print that it is not
TEST_3_INCORRECT:
la $a0, test3fail
li $v0, 4
syscall

TEST_4:
# display string to test
la $a0, test4msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test4
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test4ans
bne $t0, $t8, TEST_4_INCORRECT

# if correct, print that it is and allocate points
TEST_4_CORRECT:
la $a0, test4pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_5

# if incorrect, print that it is not
TEST_4_INCORRECT:
la $a0, test4fail
li $v0, 4
syscall

TEST_5:
# display string to test
la $a0, test5msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test5
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test5ans
bne $t0, $t8, TEST_5_INCORRECT

# if correct, print that it is and allocate points
TEST_5_CORRECT:
la $a0, test5pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_6

# if incorrect, print that it is not
TEST_5_INCORRECT:
la $a0, test5fail
li $v0, 4
syscall

TEST_6:
# display string to test
la $a0, test6msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test6
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test6ans
bne $t0, $t8, TEST_6_INCORRECT

# if correct, print that it is and allocate points
TEST_6_CORRECT:
la $a0, test6pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_7

# if incorrect, print that it is not
TEST_6_INCORRECT:
la $a0, test6fail
li $v0, 4
syscall

TEST_7:
# display string to test
la $a0, test7msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test7
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test7ans
bne $t0, $t8, TEST_7_INCORRECT

# if correct, print that it is and allocate points
TEST_7_CORRECT:
la $a0, test7pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_8

# if incorrect, print that it is not
TEST_7_INCORRECT:
la $a0, test7fail
li $v0, 4
syscall

TEST_8:
# display string to test
la $a0, test8msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test8
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test8ans
bne $t0, $t8, TEST_8_INCORRECT

# if correct, print that it is and allocate points
TEST_8_CORRECT:
la $a0, test8pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_9

# if incorrect, print that it is not
TEST_8_INCORRECT:
la $a0, test8fail
li $v0, 4
syscall

TEST_9:
# display string to test
la $a0, test9msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test9
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test9ans
bne $t0, $t8, TEST_9_INCORRECT

# if correct, print that it is and allocate points
TEST_9_CORRECT:
la $a0, test9pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_10

# if incorrect, print that it is not
TEST_9_INCORRECT:
la $a0, test9fail
li $v0, 4
syscall

TEST_10:
# display string to test
la $a0, test10msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the format specifier count procedure
la $a0, test10
jal PROC_COUNT_FORMAT_SPECIFIERS

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness
lw $t8, test10ans
bne $t0, $t8, TEST_10_INCORRECT

# if correct, print that it is and allocate points
TEST_10_CORRECT:
la $a0, test10pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TOTAL_POINTS_LEN

# if incorrect, print that it is not
TEST_10_INCORRECT:
la $a0, test10fail
li $v0, 4
syscall

# display final score
TOTAL_POINTS_LEN:
la $a0, lenpoints
li $v0, 4
syscall

move $a0, $t9
li $v0, 1
syscall

la $a0, slash
li $v0, 4
syscall

li $a0, 100
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall
syscall
syscall

# move point total into $v0 to return
move $v0, $t9

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# Return
jr $ra

###############################################################
#This procedure runs the tests to verify the correctness of
#CONVERT_INT_TO_STRING.
#
#Post:$v0 contains the total points earned out of 100
###############################################################

PROC_TEST_CONVERT_INT_TO_STRING:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# procedure body

# initialize points to 0 in $t9
li $t9, 0

TEST_11:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test11msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test11
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test11ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_11_INCORRECT

# if correct, print that it is and allocate points
TEST_11_CORRECT:
la $a0, test11pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_12

# if incorrect, print that it is not
TEST_11_INCORRECT:
la $a0, test11fail
li $v0, 4
syscall

TEST_12:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test12msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test12
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test12ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_12_INCORRECT

# if correct, print that it is and allocate points
TEST_12_CORRECT:
la $a0, test12pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_13

# if incorrect, print that it is not
TEST_12_INCORRECT:
la $a0, test12fail
li $v0, 4
syscall

TEST_13:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test13msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test13
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test13ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_13_INCORRECT

# if correct, print that it is and allocate points
TEST_13_CORRECT:
la $a0, test13pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_14

# if incorrect, print that it is not
TEST_13_INCORRECT:
la $a0, test13fail
li $v0, 4
syscall

TEST_14:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test14msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test14
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test14ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_14_INCORRECT

# if correct, print that it is and allocate points
TEST_14_CORRECT:
la $a0, test14pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_15

# if incorrect, print that it is not
TEST_14_INCORRECT:
la $a0, test14fail
li $v0, 4
syscall

TEST_15:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test15msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test15
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test15ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_15_INCORRECT

# if correct, print that it is and allocate points
TEST_15_CORRECT:
la $a0, test15pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_16

# if incorrect, print that it is not
TEST_15_INCORRECT:
la $a0, test15fail
li $v0, 4
syscall

TEST_16:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test16msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test16
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test16ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_16_INCORRECT

# if correct, print that it is and allocate points
TEST_16_CORRECT:
la $a0, test16pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_17

# if incorrect, print that it is not
TEST_16_INCORRECT:
la $a0, test16fail
li $v0, 4
syscall

TEST_17:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test17msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test17
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test17ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_17_INCORRECT

# if correct, print that it is and allocate points
TEST_17_CORRECT:
la $a0, test17pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_18

# if incorrect, print that it is not
TEST_17_INCORRECT:
la $a0, test17fail
li $v0, 4
syscall

TEST_18:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test18msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test18
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test18ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_18_INCORRECT

# if correct, print that it is and allocate points
TEST_18_CORRECT:
la $a0, test18pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_19

# if incorrect, print that it is not
TEST_18_INCORRECT:
la $a0, test18fail
li $v0, 4
syscall

TEST_19:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test19msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test19
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test19ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_19_INCORRECT

# if correct, print that it is and allocate points
TEST_19_CORRECT:
la $a0, test19pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_20

# if incorrect, print that it is not
TEST_19_INCORRECT:
la $a0, test19fail
li $v0, 4
syscall

TEST_20:
# reset digits space
jal PROC_CLEAR_DIGITS

# display integer to test
la $a0, test20msg
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that integer to the conversion procedure
lw $a0, test20
jal PROC_CONVERT_INT_TO_STRING

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the answer to $t0
move $t0, $v0

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

move $a0, $t0
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# load correct answer
la $a1, test20ans

# check for correctness
move $a0, $t0
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_20_INCORRECT

# if correct, print that it is and allocate points
TEST_20_CORRECT:
la $a0, test20pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TOTAL_POINTS_CONVERT

# if incorrect, print that it is not
TEST_20_INCORRECT:
la $a0, test20fail
li $v0, 4
syscall

# display final score
TOTAL_POINTS_CONVERT:
la $a0, convpoints
li $v0, 4
syscall

move $a0, $t9
li $v0, 1
syscall

la $a0, slash
li $v0, 4
syscall

li $a0, 100
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall
syscall
syscall

# move point total into $v0 to return
move $v0, $t9

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# Return
jr $ra

###############################################################
#This procedure runs the tests to verify the correctness of
#SPRINTF.
#
#Post:$v0 contains the total points earned out of 200
###############################################################

PROC_TEST_SPRINTF:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# function body

# initialize points to 0 in $t9
li $t9, 0

TEST_21:
# display string to test
la $a0, test21msg
li $v0, 4
syscall

# display inputs to test
la $a0, test21msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test21space
la $a1, test21
lw $a2, test21in1
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test21ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test21space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test21space
la $a1, test21ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_21_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_21_CORRECT:
la $a0, test21pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_21_PART_2

# if the string is incorrect, print that it is not
TEST_21_INCORRECT:
la $a0, test21fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_21_PART_2:
lw $t5, test21len
bne $t5, $t6, TEST_21_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_21_CORRECT_2:
la $a0, test21pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_22

# if the string length is incorrect, print that it is not
TEST_21_INCORRECT_2:
la $a0, test21fail2
li $v0, 4
syscall

TEST_22:
# display string to test
la $a0, test22msg
li $v0, 4
syscall

# display inputs to test
la $a0, test22msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test22space
la $a1, test22
li $a2, 0
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test22ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test22space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test22space
la $a1, test22ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_22_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_22_CORRECT:
la $a0, test22pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_22_PART_2

# if the string is incorrect, print that it is not
TEST_22_INCORRECT:
la $a0, test22fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_22_PART_2:
lw $t5, test22len
bne $t5, $t6, TEST_22_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_22_CORRECT_2:
la $a0, test22pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_23

# if the string length is incorrect, print that it is not
TEST_22_INCORRECT_2:
la $a0, test22fail2
li $v0, 4
syscall

TEST_23:
# display string to test
la $a0, test23msg
li $v0, 4
syscall

# display inputs to test
la $a0, test23msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test23space
la $a1, test23
la $a2, test23in1
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test23ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test23space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test23space
la $a1, test23ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_23_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_23_CORRECT:
la $a0, test23pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_23_PART_2

# if the string is incorrect, print that it is not
TEST_23_INCORRECT:
la $a0, test23fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_23_PART_2:
lw $t5, test23len
bne $t5, $t6, TEST_23_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_23_CORRECT_2:
la $a0, test23pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_24

# if the string length is incorrect, print that it is not
TEST_23_INCORRECT_2:
la $a0, test23fail2
li $v0, 4
syscall

TEST_24:
# display string to test
la $a0, test24msg
li $v0, 4
syscall

# display inputs to test
la $a0, test24msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test24space
la $a1, test24
la $a2, test24in1
lw $a3, test24in2
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test24ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test24space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test24space
la $a1, test24ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_24_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_24_CORRECT:
la $a0, test24pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_24_PART_2

# if the string is incorrect, print that it is not
TEST_24_INCORRECT:
la $a0, test24fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_24_PART_2:
lw $t5, test24len
bne $t5, $t6, TEST_24_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_24_CORRECT_2:
la $a0, test24pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_25

# if the string length is incorrect, print that it is not
TEST_24_INCORRECT_2:
la $a0, test24fail2
li $v0, 4
syscall

TEST_25:
# display string to test
la $a0, test25msg
li $v0, 4
syscall

# display inputs to test
la $a0, test25msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test25space
la $a1, test25
li $a2, 0
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test25ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test25space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test25space
la $a1, test25ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_25_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_25_CORRECT:
la $a0, test25pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_25_PART_2

# if the string is incorrect, print that it is not
TEST_25_INCORRECT:
la $a0, test25fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_25_PART_2:
lw $t5, test25len
bne $t5, $t6, TEST_25_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_25_CORRECT_2:
la $a0, test25pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_26

# if the string length is incorrect, print that it is not
TEST_25_INCORRECT_2:
la $a0, test25fail2
li $v0, 4
syscall

TEST_26:
# display string to test
la $a0, test26msg
li $v0, 4
syscall

# display inputs to test
la $a0, test26msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test26space
la $a1, test26
li $a2, 0
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test26ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test26space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test26space
la $a1, test26ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_26_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_26_CORRECT:
la $a0, test26pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_26_PART_2

# if the string is incorrect, print that it is not
TEST_26_INCORRECT:
la $a0, test26fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_26_PART_2:
lw $t5, test26len
bne $t5, $t6, TEST_26_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_26_CORRECT_2:
la $a0, test26pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_27

# if the string length is incorrect, print that it is not
TEST_26_INCORRECT_2:
la $a0, test26fail2
li $v0, 4
syscall

TEST_27:
# display string to test
la $a0, test27msg
li $v0, 4
syscall

# display inputs to test
la $a0, test27msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test27space
la $a1, test27
lw $a2, test27in1
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test27ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test27space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test27space
la $a1, test27ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_27_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_27_CORRECT:
la $a0, test27pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_27_PART_2

# if the string is incorrect, print that it is not
TEST_27_INCORRECT:
la $a0, test27fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_27_PART_2:
lw $t5, test27len
bne $t5, $t6, TEST_27_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_27_CORRECT_2:
la $a0, test27pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_28

# if the string length is incorrect, print that it is not
TEST_27_INCORRECT_2:
la $a0, test27fail2
li $v0, 4
syscall

TEST_28:
# display string to test
la $a0, test28msg
li $v0, 4
syscall

# display inputs to test
la $a0, test28msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test28space
la $a1, test28
lw $a2, test28in1
lw $a3, test28in2
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test28ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test28space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test28space
la $a1, test28ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_28_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_28_CORRECT:
la $a0, test28pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_28_PART_2

# if the string is incorrect, print that it is not
TEST_28_INCORRECT:
la $a0, test28fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_28_PART_2:
lw $t5, test28len
bne $t5, $t6, TEST_28_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_28_CORRECT_2:
la $a0, test28pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_29

# if the string length is incorrect, print that it is not
TEST_28_INCORRECT_2:
la $a0, test28fail2
li $v0, 4
syscall

TEST_29:
# display string to test
la $a0, test29msg
li $v0, 4
syscall

# display inputs to test
la $a0, test29msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test29space
la $a1, test29
lw $a2, test29in1
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test29ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test29space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test29space
la $a1, test29ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_29_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_29_CORRECT:
la $a0, test29pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_29_PART_2

# if the string is incorrect, print that it is not
TEST_29_INCORRECT:
la $a0, test29fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_29_PART_2:
lw $t5, test29len
bne $t5, $t6, TEST_29_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_29_CORRECT_2:
la $a0, test29pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_30

# if the string length is incorrect, print that it is not
TEST_29_INCORRECT_2:
la $a0, test29fail2
li $v0, 4
syscall

TEST_30:
# display string to test
la $a0, test30msg
li $v0, 4
syscall

# display inputs to test
la $a0, test30msgin
li $v0, 4
syscall

# back up $t9 to the stack
subi $sp, $sp, 4
sw $t9, 0($sp)

# pass that string to the sprintf procedure
la $a0, test30space
la $a1, test30
li $a2, 0
li $a3, 0
jal PROC_SPRINTF

# recover $t9 from the stack
lw $t9, 0($sp)
addi $sp, $sp, 4

# copy the length answer to $t6
move $t6, $v0

# load the solution
la $t1, test30ans

# display the answer provided by the function
la $a0, your_answer
li $v0, 4
syscall

la $a0, test30space
li $v0, 4
syscall

la $a0, newline
li $v0, 4
syscall

# display the length provided by the function
la $a0, your_length
li $v0, 4
syscall

move $a0, $t6
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall

# check for correctness of string contents
la $a0, test30space
la $a1, test30ans
jal PROC_COMPARE_STRINGS
bne $v0, $zero, TEST_30_INCORRECT

# if the string is correct, print that it is and allocate points
TEST_30_CORRECT:
la $a0, test30pass
li $v0, 4
syscall

addi $t9, $t9, 10

j TEST_30_PART_2

# if the string is incorrect, print that it is not
TEST_30_INCORRECT:
la $a0, test30fail
li $v0, 4
syscall

# test that the length of the string is correct
TEST_30_PART_2:
lw $t5, test30len
bne $t5, $t6, TEST_30_INCORRECT_2

# if the string length is correct, print that it is and allocate points
TEST_30_CORRECT_2:
la $a0, test30pass2
li $v0, 4
syscall

addi $t9, $t9, 10

j TOTAL_POINTS_SPRINTF

# if the string length is incorrect, print that it is not
TEST_30_INCORRECT_2:
la $a0, test30fail2
li $v0, 4
syscall

TOTAL_POINTS_SPRINTF:
la $a0, printpoints
li $v0, 4
syscall

move $a0, $t9
li $v0, 1
syscall

la $a0, slash
li $v0, 4
syscall

li $a0, 200
li $v0, 1
syscall

la $a0, newline
li $v0, 4
syscall
syscall
syscall

# move point total into $v0 to return
move $v0, $t9

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# Return
jr $ra

###############################################################
#This helper procedure is used in the testing code to
#compare two strings
#
#Post:$v0 contains 0 if the strings are equal, 0 otherwise
###############################################################

PROC_COMPARE_STRINGS:

# prologue
subi $sp, $sp, 4
sw $ra, 0($sp)

# function body
move $t0, $a0# copy address of first string to $t0
move $t1, $a1# copy address of second string to $t1

COMPARE_LOOP:
lb $t2, 0($t0) # get byte from first string
lb $t3, 0($t1) # get byte from second string

bne $t2, $t3, NOT_EQUAL_STRINGS# branch if the characters aren’t equal

beq $t2, $zero, EQUAL_STRINGS# branch if we got to the null terminator

# move to the next characters of each string and loop
addi $t0, $t0, 1
addi $t1, $t1, 1
j COMPARE_LOOP

NOT_EQUAL_STRINGS:
# if the strings aren’t equal, return 1
li $v0, 1
j END_OF_COMPARE_STRINGS

EQUAL_STRINGS:
# if the strings are equal, return 0
li $v0, 0

END_OF_COMPARE_STRINGS:

# epilogue
lw $ra, 0($sp)
addi $sp, $sp, 4

# Return
jr $ra

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] CS计算机代考程序代写 prolog mips main.asm
30 $