Files
cs2810/Assignment2.asm
T
2026-08-04 06:59:21 -06:00

152 lines
3.1 KiB
NASM

.data
firstNumPrompt: .asciiz "Enter the first number: "
secNumPrompt: .asciiz "Enter the second number: "
thirdNumPrompt: .asciiz "Enter the third number: "
sum: .asciiz "\nThe sum of the entered numbers is: "
smallestNum: .asciiz "\nThe smallest number is: "
largestNum: .asciiz "\nThe largest number is: "
initPrompt: .asciiz "Enter 3 whole numbers to display: the largest, the smallest, and the sum\n"
tryAgainPrompt: .asciiz "\nWould you like to try again? (Enter any number for no and 0 for yes) "
goodbye: .asciiz "\nThank you for using the program, see you next time!"
.text
main:
# Init prompt
addi $v0, $0, 4
la $a0, initPrompt
syscall
# Load 0 into $s1 and $s0
addi $s1, $s1, 0
addi $s0, $s0, 0
while:
bgtu $s0, $s1, done
# First prompt
addi $v0, $0, 4
la $a0, firstNumPrompt
syscall
# Read the first
addi $v0, $0, 5 # system call 5 is for reading an integer
syscall # integer value read is in $v0
add $s7, $0, $v0 # copy the width into $8
# Second prompt
addi $v0, $0, 4
la $a0, secNumPrompt
syscall
# Read the second
addi $v0, $0, 5
syscall
add $s6, $0, $v0
# Third prompt
addi $v0, $0, 4
la $a0, thirdNumPrompt
syscall
# Read the third
addi $v0, $0, 5
syscall
add $s5, $0, $v0
# Sum prompt
addi $v0, $0, 4
la $a0, sum
syscall
# Add and print sum
add $t0, $s7, $s6
add $t0, $t0, $s5
addi $v0, $0, 1
add $a0, $0, $t0
syscall
# Smallest prompt
addi $v0, $0, 4
la $a0, smallestNum
syscall
# Find the smallest num
bge $s5, $s6, else
bge $s5, $s7, elseif
add $t1, $0, $s5
b next
elseif:
add $t1, $0, $s7
b next
b next
else:
bge $s6, $s7, elseifif
add $t1, $0, $s6
b next
elseifif:
add $t1, $0, $s7
b next
next:
# Print the smallest num
addi $v0, $0, 1
add $a0, $0, $t1
syscall
# Largest prompt
addi $v0, $0, 4
la $a0, largestNum
syscall
# Find the largest num
bge $s7, $s6, newElse
bge $s6, $s5, newElseif
add $t1, $0, $s5
b newNext
newElseif:
add $t1, $0, $s6
b newNext
b newNext
newElse:
bge $s7, $s5, newElseifif
add $t1, $0, $s5
b newNext
newElseifif:
add $t1, $0, $s7
b newNext
newNext:
# Print the smallest num
addi $v0, $0, 1
add $a0, $0, $t1
syscall
# Prompt to start again
addi $v0, $0, 4
la $a0 , tryAgainPrompt
syscall
# Start again
addi $v0, $0, 5 # system call 5 is for reading an integer
syscall # integer value read is in $v0
add $s0, $0, $v0 # copy the width into $s0
b while
done:
# Prompt to start again
addi $v0, $0, 4
la $a0 , goodbye
syscall
exit:
ori $v0, $0, 10 # system call code 10 for exit
syscall # exit the program