diff options
| author | cheapie <no-email-for-you@example.com> | 2026-05-23 20:14:34 -0500 |
|---|---|---|
| committer | cheapie <no-email-for-you@example.com> | 2026-05-23 20:14:34 -0500 |
| commit | 85b5fde272be6ab543aa866baebabddc24566bdb (patch) | |
| tree | b4f2e3bb634effe51c2bdc5585ca4ea8b98d6dfa /guessnum.S | |
| download | rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar.gz rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar.bz2 rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.tar.xz rvcontroller-85b5fde272be6ab543aa866baebabddc24566bdb.zip | |
Add initial content
Diffstat (limited to 'guessnum.S')
| -rw-r--r-- | guessnum.S | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/guessnum.S b/guessnum.S new file mode 100644 index 0000000..8d5b2fb --- /dev/null +++ b/guessnum.S @@ -0,0 +1,119 @@ +restart: +rdtime t3 # Get the time the program was started at + +li a7,11 # Print character +li a0,0xa # \n +ecall +li t0,0 # Number of guesses + +# Get a random number for the player to guess +li a7,128 # Get random integer +li a0,1 # Lower bound = 1 +li a1,99 # Upper bound = 99 +ecall +mv t1,a0 # Put the result in t1 where it's expected + +loop: +# Increment number of guesses +addi t0,t0,1 + +# Prompt player to enter their guess +li a7,4 # Write string +la a0,prompt # 'Enter your guess' prompt address +ecall + +# Read the player's guess +li a7,5 # Read integer +ecall +mv t2,a0 # Store it in t2 + +# Print it back out +li a7,1 # Write integer +ecall +li a7,11 # Write character +li a0,0xa # \n +ecall + +# Too low? +blt t2,t1,toolow + +# Too high? +blt t1,t2,toohigh + +# Otherwise it must be right +j correct + +toolow: +# Show too low message +li a7,4 # Write string +la a0,toolowmsg +ecall +j loop # Go back for the next guess + +toohigh: +# Show too high message +li a7,4 # Write string +la a0,toohighmsg +ecall +j loop # Go back for the next guess + +correct: +# Show congratulations message +li a7,4 # Write string +la a0,correctmsg +ecall + +# Show number of guesses +mv a0,t0 # Get the number of guesses +li a7,1 # Write integer +ecall + +# Add proper suffix depending on whether it should be plural or not +li a7,4 # Write string +la a0,guessesmsg # "guess" +ecall +li t2,1 +beq t0,t2,playagain # Leave it singular if it was 1 +la a0,guessespluralize # "es" +ecall + +playagain: +li a7,11 # Write character +li a0,0xa # \n +ecall +# Show the number of seconds the player took +rdtime t4 # Get the current time +sub a0,t4,t3 # Subtract the start time +li a7,1 # Write integer +ecall +li a7,4 # Write string +la a0,seconds +ecall + +li a7,11 # Print character +li a0,0xa # \n +ecall + +# Ask the user if they want to play again +li a7,4 # Write string +la a0,playagainmsg +ecall +li a7,12 # Read character +ecall +li a7,11 # Write character +ecall +li t0,0x6e # n +bne a0,t0,restart + +li a7,10 # Exit program +ecall + + +prompt: .asciz "Enter your guess:\n> " +toolowmsg: .asciz "Too low! Try again\n" +toohighmsg: .asciz "Too high! Try again\n" +correctmsg: .asciz "Correct!\nYou got it in:\n" +guessesmsg: .asciz " guess" +guessespluralize: .asciz "es" +seconds: .asciz " seconds" +playagainmsg: .asciz "Play again? [Y/n]" |
