.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!