"[ASM][Non-Func] Menu Driven Arithmetic" By Silver_Smoulder (https://pastebin.com/u/Silver_Smoulder) URL: https://pastebin.com/LT6r4zkb Created on: Wednesday 10th of April 2019 10:07:45 AM CDT Retrieved on: Saturday 24 of October 2020 11:38:47 PM UTC ##write a program that is menu driven: #1 enter 2 numbers #2 add, 3 subtract, 4 multiply, 5 divide, 6 modulus, 7 exit #have a function for each entry #start without error checking, but if I finish this at home (hah) then add error checking #make sure to display the results via another function in menu .globl main .text ##define t0 as being the menu choice, t1 and t2 being the numbers you're operating on, #t3 holding the output # s0 through S6 are going to be our values that we will be comparing our t#s to for menu tests main: li $s0, 1 li $s1, 2 li $s2, 3 li $s3, 4 li $s4, 5 li $s5, 6 li $s6, 7 li $s7, 8 ##These are immutable and now we can compare user input (stored in the "t" registers). menu: #this is going to be our menu loop li $v0, 4 #call a string that will output the menu la $a0, choices syscall li $v0, 5 #prep for user input syscall move $t0, $v0 #move the user input from $v0 to $t0 where it will stay until we reiterate the loop #this is our primary menu control structure and needs to be in the menu #compare user input to our constants, and then go do the section that does it beq $t0, $s0, two_number_input beq $t0, $s1, addition beq $t0, $s2, subtraction beq $t0, $s3, multiplication beq $t0, $s4, division beq $t0, $s5, modulus beq $t0, $s6, results beq $t0, $s7, exit two_number_input: li $v0, 4 #we're telling the program that we are going to be outputting a string and loading it immediately la $a0, first_prompt #we're telling the program where to look for our message that we defined at the bottom of the program syscall #go do it #now, we should read in an integer as done by the user, with syscall 5 li $v0, 5 #syscall for code 5 (reading in an integer) syscall #go do it move $t1, $v0 #moving the stored integer from $v0 to $t1 this is our first input value li $v0, 4 #we're telling the program that we are going to be outputting a string and loading it immediately la $a0, second_prompt #we're telling the program where to look for our message that we defined at the bottom of the program syscall #go do it #now, we should read in an integer as done by the user, with syscall 5 li $v0, 5 #syscall for code 5 (reading in an integer) syscall #go do it move $t2, $v0 #moving the stored integer from $v0 to $t2 j menu #go back to the menu addition: add $t3, $t1, $t2 #this should do: $t1+$t2 = something, which we put into $t3 j menu #go back to the menu subtraction: sub $t3, $t1, $t2 #this should do: $t1-$t2 = something, which we put into $t3 j menu #go back to the menu multiplication: mul $t3, $t1, $t2 #this should do: $t1*$t2 = something, which we put into $t3 j menu #go back to the menu division: bltz $t2, error_div div $t3, $t1, $t2 #this should do: $t1/$t2 = something, which we put into $t3 j menu #go back to the menu modulus: rem $t3, $t1, $t2 #this should do: $t1%$t2 = something, which we put into $t3 j menu #go back to the menu ouput: li $v0, 4 #we're telling the program that we are going to be outputting a string and loading it immediately la $a0, ouput #we're telling the program where to look for our message that we defined at the bottom of the program syscall #go do it move $a0, $t3 #move the value stored $t0 to $a0 li $v0, 1 #tell it we're about to print an integer syscall #print the integer j menu #go back to the menu exit: li $v0, 4 #call a string that will output the menu la $a0, terminate syscall li $v0, 10 syscall error_div: li $v0, 4 #call a string that will output the menu la $a0, div_error syscall j menu .data choices: .asciiz "\n\n1) Enter 2 numbers\n2) Add the two numbers\n3) Subtract the second number from the first\n4) Multiply the two numbers\n5) Divide the first number by the second\n6) Find the first number modulus the second number\n7) Output the results\n8) Exit\n\nEntry: " first_prompt: .asciiz "\nPlease input your first number: " second_prompt: .asciiz "\nPlease input your second number: " results: .asciiz "\nThe answer is: " terminate: .asciiz "\nTermination code received. Good bye." div_error: .asciiz "\nCannot divide by 0. Bringing you back to the menu."