summaryrefslogtreecommitdiff
path: root/guessnum.S
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2026-05-23 20:14:34 -0500
committercheapie <no-email-for-you@example.com>2026-05-23 20:14:34 -0500
commit85b5fde272be6ab543aa866baebabddc24566bdb (patch)
treeb4f2e3bb634effe51c2bdc5585ca4ea8b98d6dfa /guessnum.S
downloadrvcontroller-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.S119
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]"