Project 2 Autograder Test Cases

Here are the autograder test cases that were used in the final grading of Project 2. You can manually run them to try to figure out why you are getting incorrect output or a segmentation fault. The names of the cases correspond to the names used by the autograder in the email it sends to your 61c account and are in the same order as they appear in the email.

The way your code was compiled and run is as follows:

mv proj2 proj2.student >& /dev/null
cp /home/ff/cs61c/autograder/gradeKits/proj2/fa04/proj2 .
chmod 755 proj2

then proj2 was executed. The code for proj2 is as follows:

tempFile=`basename $1`.$$.s

cat sprintf.s $1 > $tempFile
chmod 666 $tempFile
spim -file $tempFile
echo "*********"
echo $1
echo "*********"
#rm $tempFile

Your output was then cleaned using the following code:

cat > $$.tmp

LINES=`wc -l < $$.tmp`
((LINES=LINES-5))

tail -${LINES} $$.tmp > $$tmp2
((LINES=LINES-3))
head -${LINES} $$tmp2
rm $$.tmp
rm $$tmp2

Test Case Name Input Expected Output
ascii.ext # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "funky : %c : %c\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

addi $sp, $sp, -4
lbu $t0 __char5
sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

addi $sp, $sp, -4
lbu $t0 __char6
sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

14 characters:
funky : ö : ì
ascii # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%c\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

addi $sp, $sp, -4
lbu $t0 __char0
sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

2 characters:
a
ascii.three # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%c + %c = %c\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

addi $sp, $sp, -4
lb $t0 __char1
sw $t0 0($sp)

addi $sp, $sp, -4
lbu $t0 __char2
sw $t0 0($sp)

addi $sp, $sp, -4
lbu $t0 __char3
sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

10 characters:
3 + 2 = 1
bin.neg # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%b\n"
chrs: .asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -4
lw $t0 __word0
sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

33 characters:
10000111011001010100001100100001
bin.pos # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%b\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word1
sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

30 characters:
10010001101000101011001111000
bin.zero # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%b\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word2
sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

2 characters:
0
fp.01 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
.float 1.2e25 # 1.00111101101000110010101b 2^(83)
.float 1048576.0625 # 1.0b 2^(20)
.float 1048576.125 # 1.000000000000000000001b 2^(20)
.float 1048576.5 # 1.000000000000000000001b 2^(20)
.float 0.5078125 # 1.000001b 2^(-1)
.float -0.03125 # -1.0b 2^(-5)
.float +1.125 # 1.001b 2^(0)
.float -1.25 # -1.01b 2^(0)
.float -1.5 # -1.1b 2^(0)
.float -1.0 # -1.0b 2^(0)
.word 0x00100000 # denorm
.word 0x80000000 # -0
.word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

34 characters:
1.00111101101000110010101b 2^(83)
fp.02 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
.float 1048576.0625 # 1.0b 2^(20)
.float 1048576.125 # 1.000000000000000000001b 2^(20)
.float 1048576.5 # 1.000000000000000000001b 2^(20)
.float 0.5078125 # 1.000001b 2^(-1)
.float -0.03125 # -1.0b 2^(-5)
.float +1.125 # 1.001b 2^(0)
.float -1.25 # -1.01b 2^(0)
.float -1.5 # -1.1b 2^(0)
.float -1.0 # -1.0b 2^(0)
.word 0x00100000 # denorm
.word 0x80000000 # -0
.word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

12 characters:
1.0b 2^(20)
fp.03 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
.float 1048576.125 # 1.000000000000000000001b 2^(20)
.float 1048576.5 # 1.000000000000000000001b 2^(20)
.float 0.5078125 # 1.000001b 2^(-1)
.float -0.03125 # -1.0b 2^(-5)
.float +1.125 # 1.001b 2^(0)
.float -1.25 # -1.01b 2^(0)
.float -1.5 # -1.1b 2^(0)
.float -1.0 # -1.0b 2^(0)
.word 0x00100000 # denorm
.word 0x80000000 # -0
.word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


34 characters:
1.00000000000000000000001b 2^(20)
fp.04 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
.float 1048576.5 # 1.000000000000000000001b 2^(20)
.float 0.5078125 # 1.000001b 2^(-1)
.float -0.03125 # -1.0b 2^(-5)
.float +1.125 # 1.001b 2^(0)
.float -1.25 # -1.01b 2^(0)
.float -1.5 # -1.1b 2^(0)
.float -1.0 # -1.0b 2^(0)
.word 0x00100000 # denorm
.word 0x80000000 # -0
.word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


32 characters:
1.000000000000000000001b 2^(20)
fp.05 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
.float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


17 characters:
1.000001b 2^(-1)
fp.06 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
.float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


13 characters:
-1.0b 2^(-5)
fp.07 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
.float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


13 characters:
1.001b 2^(0)
fp.08 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
.float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

13 characters:
-1.01b 2^(0)
fp.09 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
.float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


12 characters:
-1.1b 2^(0)
fp.10 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
.float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31


12 characters:
-1.0b 2^(0)
fp.11 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
.word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

7 characters:
denorm
fp.12 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
.word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

3 characters:
-0
fp.13 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
.word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

4 characters:
Inf
fp.14 # sprintf testcase framework

.data
__buffer:
.space 200

__float:
# .float 1.2e25 # 1.00111101101000110010101b 2^(83)
# .float 1048576.0625 # 1.0b 2^(20)
# .float 1048576.125 # 1.000000000000000000001b 2^(20)
# .float 1048576.5 # 1.000000000000000000001b 2^(20)
# .float 0.5078125 # 1.000001b 2^(-1)
# .float -0.03125 # -1.0b 2^(-5)
# .float +1.125 # 1.001b 2^(0)
# .float -1.25 # -1.01b 2^(0)
# .float -1.5 # -1.1b 2^(0)
# .float -1.0 # -1.0b 2^(0)
# .word 0x00100000 # denorm
# .word 0x80000000 # -0
# .word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint:
addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)

onedig:
putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

5 characters:
-NaN
fp.nan # sprintf testcase framework

.data
__buffer:
.space 200

__float:
.float 1.2e25 # 1.00111101101000110010101b 2^(83)
.float 1048576.0625 # 1.0b 2^(20)
.float 1048576.125 # 1.000000000000000000001b 2^(20)
.float 1048576.5 # 1.000000000000000000001b 2^(20)
.float 0.5078125 # 1.000001b 2^(-1)
.float -0.03125 # -1.0b 2^(-5)
.float +1.125 # 1.001b 2^(0)
.float -1.25 # -1.01b 2^(0)
.float -1.5 # -1.1b 2^(0)
.float -1.0 # -1.0b 2^(0)
.word 0x00100000 # denorm
.word 0x80000000 # -0
.word 0x7f800000 # Inf
.word 0xffff0000 # -NaN

format:
.asciiz "%f\n"
chrs:
.asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -12

la $a0, __buffer
sw $a0, 0($sp)
la $a1, format
sw $a1, 4($sp)

la $t0, __float
lw $a2, 0($t0)
sw $a2, 8($sp)

jal sprintf

add $a0, $v0, $0
jal putint

puts chrs
puts __buffer
addi $sp, $sp, 8
done


putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

34 characters:
1.00111101101000110010101b 2^(83)
int.neg # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%d\n"
chrs: .asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -4
lw $t0 __word0
sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

12 characters:
-2023406815
int.pos # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%d\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word1
sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

10 characters:
305419896
int.zero # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%d\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word2
sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

2 characters:
0
string.2 # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
#__char5: .byte 236 # Extended ASCII
#__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz "hello"
__str2: .asciiz "mommy"

format: .asciiz "%s\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

addi $sp, $sp, -4
la $t0 __char0
sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

6 characters:
a123^H
string # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz "mommy"
__str2: .asciiz "hello"

format: .asciiz "%s %s\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

addi $sp, $sp, -4
la $t0 __str1
sw $t0 0($sp)

addi $sp, $sp, -4
la $t0 __str2
sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

12 characters:
hello mommy
string.null # test for \0 at the send with an empty format string and assigned buffer

# Output:
# 0 characters:
#



.data
buffer: .space 200
format: .asciiz ""
chrs: .asciiz " characters:\n"

.text

__start:addi $sp, $sp, -36
la $8, buffer
addi $9, $0, 'x'
sb $9, 0($8)
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 36
done


putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

0 characters:
unsigned.neg # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%u\n"
chrs: .asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -4
lw $t0 __word0
sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

11 characters:
2271560481
unsigned.pos # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%u\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word1
sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

10 characters:
305419896
unsigned.zero # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 0x87654321
__word1: .word 0x12345678
__word2: .word 0x00000000
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz ""
__str2: .asciiz ""

format: .asciiz "%u\n"
chrs: .asciiz " characters:\n"

.text

__start:
#addi $sp, $sp, -4
#lw $t0 __word0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lw $t0 __word1
#sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word2
sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char0
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char2
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char3
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char4
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char5
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lb $t0 __char6
#sw $t0 0($sp)

#addi $sp, $sp, -4
#lbu $t0 __char7
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str1
#sw $t0 0($sp)

#addi $sp, $sp, -4
#la $t0 __str2
#sw $t0 0($sp)

# Above loads all arguements except buffer and format
addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8
done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

2 characters:
0
savedregs # saving the $s# registers

# Output
# 53 characters:
# 87% of all Americans say -5002 (4294962294) < f00!
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8


.data
buffer: .space 200
format: .asciiz "%d%% of all %ss say %d (%u) %c %b!\n"
str: .asciiz "American"
chrs: .asciiz " characters:\n"
line: .asciiz "\n"

.text

__start:addi $sp, $sp, -36
addi $s0, $0, 1
addi $s1, $0, 2
addi $s2, $0, 3
addi $s3, $0, 4
addi $s4, $0, 5
addi $s5, $0, 6
addi $s6, $0, 7
addi $s7, $0, 8

la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
addi $8, $0, 87
sw $8, 8($sp)
la $8, str
sw $8, 12($sp)
addi $8, $0, -5002
sw $8, 16($sp)
sw $8, 20($sp) # same arg twice
addi $8, $0, 60
sw $8, 24($sp)
addi $8, $0, 3840
sw $8, 28($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer

add $4, $s0, $0
jal putint
puts line
add $4, $s1, $0
jal putint
puts line
add $4, $s2, $0
jal putint
puts line
add $4, $s3, $0
jal putint
puts line
add $4, $s4, $0
jal putint
puts line
add $4, $s5, $0
jal putint
puts line
add $4, $s6, $0
jal putint
puts line
add $4, $s7, $0
jal putint
puts line

addi $sp, $sp, 36
done


putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

60 characters:
87% of all Americans say -5002 (4294962294) < 111100000000!
1
2
3
4
5
6
7
8
two_calls # sprintf testcase framework

.data
buffer: .space 200
__buffer: .space 200

__word0: .word 50
__word1: .word 40
__word2: .word 20
__char0: .byte 'a'
__char1: .byte '1'
__char2: .byte '2'
__char3: .byte '3'
__char4: .byte 0x08 # Backspace
__char5: .byte 236 # Extended ASCII
__char6: .byte 246 # Extended ASCII
__char7: .byte 0
__str1: .asciiz "d."
__str2: .asciiz ""

format: .asciiz "%%d%%%% of %d is %%%s\n"
chrs: .asciiz " characters:\n"

.text

__start:
addi $sp, $sp, -4
la $t0 __str1
sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word1
sw $t0 0($sp)

addi $sp, $sp, -8
la $8, __buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts __buffer
addi $sp, $sp, 8

addi $sp, $sp, -4
lw $t0 __word2
sw $t0 0($sp)

addi $sp, $sp, -4
lw $t0 __word0
sw $t0 0($sp)

addi $sp, $sp, -8
la $8, buffer
sw $8, 0($sp)
la $8, __buffer
sw $8, 4($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 8

done

putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

18 characters:
%d%% of 40 is %d.
17 characters:
50% of 40 is 20.
given # given test case

# Output
# 53 characters:
# 87% of all Americans say -5002 (4294962294) < f00!


.data
buffer: .space 200
format: .asciiz "%d%% of all %ss say %d (%u) %c %b!\n"
str: .asciiz "American"
chrs: .asciiz " characters:\n"

.text

__start:addi $sp, $sp, -36
la $8, buffer
sw $8, 0($sp)
la $8, format
sw $8, 4($sp)
addi $8, $0, 87
sw $8, 8($sp)
la $8, str
sw $8, 12($sp)
addi $8, $0, -5002
sw $8, 16($sp)
sw $8, 20($sp) # same arg twice
addi $8, $0, 60
sw $8, 24($sp)
addi $8, $0, 3840
sw $8, 28($sp)
jal sprintf
add $4, $2, $0
jal putint
puts chrs
puts buffer
addi $sp, $sp, 36
done


putint: addi $sp, $sp, -8
sw $31, 0($sp)
rem $8, $4, 10
addi $8, $8, '0'
div $4, $4, 10
beqz $4, onedig
sw $8, 4($sp)
jal putint
lw $8, 4($sp)
onedig: putc $8
lw $31, 0($sp)
addi $sp, $sp, 8
jr $31

60 characters:
87% of all Americans say -5002 (4294962294) < 111100000000!

 

Created by Andy Carle -- 11/03/2004