.data
input:  .word 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0 

        .text
        .globl main
main:   addi $sp, $sp, -8               # STORE $ra and $s0 ON THE STACK!!!
        sw $ra, 0($sp)                  # push $ra
        sw $s0, 4($sp)                  # push $s0
        la $s0, input                   # Put address of input into a register
LOOP:   move $a0, $s0                   # Init $a0 before procedure call
        jal get33ByteStr                # Call get33ByteStr
        beq $v0, $zero, END             # If it returns 0, jump to END
        move $a0, $s0                   # Init $a0 before procedure call
        jal verifyMIPS                  # Call verifyMIPS
        beq $v0, $zero, ENDIF           # If it returns 0, jump to ENDIF
        move $a0, $s0                   # Init $a0 before procedure call
        jal testB2D                     # Call testB2D
ENDIF:  j LOOP                          # Jump to top of while loop
END:    move $v0, $zero                 # Return 0 to operating system
                                        # POP $ra and $s0 FROM THE STACK !!!
        lw $s0, 4($sp)                  # pop $s0
        lw $ra, 0($sp)                  # pop $ra
        addi $sp, $sp, 8                # adjust $sp before return
        jr $ra



=================================================


                                        #Initialize Registers
verifyMIPS: addi $t0, $zero, 48         # Put '0' in $t0
            addi $t1, $zero, 49         # Put '1' in $t1
loop:       lw $t5, 0($a0)              # read in *ptr
            beq $t5, $zero, endloop     # leave loop if *ptr is '\0'
            beq $t5, $t0, step          # continue in loop if *ptr == '0'
            beq $t5, $t1, step          # continue in loop if *ptr == '1'
            move $v0, $zero             # return value = 0
            jr $ra                      # return 0;
step:       addi $a0, $a0, 4            # ptr++
            j loop                      # go to top of loop
endloop:    add $v0, $zero, 1           # return value = 1
            jr $ra                      # return 1



=================================================




testB2D:    addi $sp, $sp, -8           # adjust $sp to push 2 values
            sw $ra, 0($sp)              # push $ra
            sw $s0, 4($sp)              # push $s0

            move $s0, $a0               # NOT in video, but should have been!

            addi $a1, $zero, 0          # arg 1 = 0
            addi $a2, $zero, 5          # arg 2 = 5
            jal bin2dec
            move $a0, $s0               # arg0 = first param saved in $s0
            addi $a1, $zero, 0          # arg 1 = 0
            addi $a2, $zero, 5          # arg 2 = 5
            move $a3, $v0               # arg3 = return value from bin2dec
            jal printIt
            move $a0, $s0               # arg0 = first param saved in $s0
            addi $a1, $zero, 6          # arg 1 = 6
            addi $a2, $zero, 10         # arg 2 = 10
            jal bin2dec
            move $a0, $s0               # arg0 = first param saved in $s0
            addi $a1, $zero, 6          # arg 1 = 6
            addi $a2, $zero, 10         # arg 2 = 10
            move $a3, $v0               # arg3 = return value from bin2dec
            jal printIt

            lw $s0, 4($sp)              # pop $s0
            lw $ra, 0($sp)              # pop $ra
            addi $sp, $sp, 8            # adjust $sp to pop 2 values

            jr $ra                      # NOT in video, but should have been!