Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Any help will be greatly appreciated. thanks! Implement a simple four function c

ID: 3813164 • Letter: A

Question

Any help will be greatly appreciated. thanks!

Implement a simple four function calculator in the LC3 assembly language that will run on the LC-3 simulator. You will use these subroutines to implement the calculator. The inputs to the calculator will not exceed 4 digits. This is to avoid overflow since the range of numbers handled by the 16-bit LC-3 is [-32768: +32767] The user interaction with the calculator is shown below: LS-3 Calculator Operation (+, -, *, /)? + Enter the first operand (SRC1): 34 Enter the second operand (SRC2): 27 Sum is: 61 Continue (Y, N)? Y Operation (+, -, *, /)? Enter the first operand (SRC1): 378 Enter the second operand (SRC2): 237 Enter the Operator (+, -, *, /): - Difference is:141 Continue (Y, N)? Y Operation (+, -, *, /)? - Enter the first operand (SRC1):34 Enter the second operand (SRC 2): 75.

Explanation / Answer

.data
# const string for welcome
welc: .asciiz "Welcome to SPIM Calculator one.0! "
p_int: .asciiz " Please offer associate integer: "
p_op: .asciiz " Please offer associate operator: "
i_err: .asciiz " Input Incorrect, unhealthy operator! "
again_str: .asciiz "Another calculation? (y/n)"
rmndr: .asciiz " r: "
new_line: .asciiz " "

int1: .word one # house to carry int one
int2: .word one # house to carry int a pair of
raw_in: .space one # house to carry raw input
op: .space one # house to carry operator char
a_char: .space one # house to carry once more char

out: .word one # house to carry output
remain: .word one # house to carry remainder

#operator constants
c_plus: .ascii "+" # const for +
c_min: .asciiz "-" # const for -
c_mult: .asciiz "*" # const for *
c_divi: .asciiz "/" # const for /
c_eq: .asciiz "=" # const for =
c_no: .asciiz "n" # const for n

.text
.globl main
main: li $v0, four # syscall four, print string
la $a0, welc # offer argument: string
syscall # really print string

calc: la $t6, stay # load remainder variable
move $t6, $zero # store zero in remainder (reset)

li $v0, four # syscall four, print string
la $a0, purpose # offer argument: string
syscall # really print string

li $v0, five # tell syscall we would like to scan int one
syscall # really scan in int one
la $s1, int1 # load int1 into $s1
move $s1, $v0 # copy the number from $v0 to int1

li $v0, four # syscall four, print string
la $a0, purpose # offer argument: string
syscall # really print string

li $v0, five # tell syscall we would like to scan int a pair of
syscall # really scan in int a pair of
la $s2, int2 # offer $s2 the address to carry int a pair of
move $s2, $v0 # copy the number from $v0 to $s2

li $v0, four # syscall four, print string
la $a0, p_op # offer argument: string
syscall # really print string

li $v0, eight # tell syscall we would like to scan operator
la $a0, op # offer $a0 the address to carry the operator
syscall # really scan in operator

lb $t0, op # load the primary computer memory unit of op
li $t1, '+' # load const for and
li $t2, '-' # load const for minus
li $t3, '*' # load const for multiplying
li $t4, '/' # load const for dividing

la $s0, out # load bent $s0

beq $t0, $t1, and # we're adding
beq $t0, $t2, minus # we're subtracting
beq $t0, $t3, multi # we're multiplying
beq $t0, $t4, divi # we're dividing
# else
j error # incorrect input

plus: add $s0, $s1, $s2 # add our ints, store in $t0
j print

minus: sub $s0, $s1, $s2 # compute our ints, store in $t0
j print

multi: slt $t1, $t2, $s2 # if our counter is a smaller amount than int2, set $t1 to one
beq $t1, $zero, print # if we've reached int2, we're done
add $s0, $s1, $s1 # add int1 and int1, store in out
j multi # loop

divi: la $t0 stay # load remainder into $t0
move $t0, $s1 # set remainder to dividend
add $s0, $zero, $zero # commenced to zero, simply just in case
loop: slt $t1, $t0, $s2 # if remainder is a smaller amount than divisor, set 1
beq $t1, $zero, print # if we're done branch to done
sub $t0, $t0, $s2 # sub divisor from remainder, store in remainder
addi $s0, $s0, one # increment quotient by one
j loop # loop

print: li $v0, one # tell syscall we would like to print int
la $a0, int1 # offer syscall int1 to print
syscall # really print int
li $v0, four # tell syscall we would like to print string
lb $a0, op # tell syscall we would like to print operator
syscall # really print string
li $v0, one # tell syscall we would like to print int
la $a0, int2 # offer syscall int2 to print
syscall # really print int
li $v0, four # tell syscall we would like to print string
la $a0, c_eq # tell syscall we would like to print operator
syscall # really print string
li $v0, one # tell syscall we would like to print number
la $a0, out # offer syscall our output
syscall # really print int
la $t0, stay # load remainder
beq $t0, $zero, once more # if we've no remainder, end printing
li $v0, four # tell syscall we would like to print string
la $a0, rmndr # tell syscall we would like to print remainder string
syscall # print "r: "
li $v0, one # tell syscall we would like to print int
la $a0, stay # offer syscall our remainder to print
syscall # print remainder

again: li $v0, four # tell syscall we would like to print string
la $a0, printing operation # tell syscall to print printing operation
syscall
la $a0, once more_str # load prompt for again string for syscall
syscall
li $v0, eight # tell syscall we would like to scan string
la $a0, a_char # tell syscall to place it in $a0
syscall
lb $t0, a_char
li $t1, 'n' # get n char therefore we will compare
beq $t0, $t1, exit # if we have a tendency to square measure done, exit
#else loop
j calc # jump to starting

error: li $v0, four # tell syscall we would like to print string
la $a0, i_err # offer syscall what to print
syscall # really print
j once more # head to prompt for rehear

exit: li $v0, ten # exit code
syscall #exit!

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote