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

Determine the logical expressions for C_Select, MA_select, and Y_select (Figure

ID: 3813133 • Letter: D

Question

Determine the logical expressions for C_Select, MA_select, and Y_select (Figure 5.18, 5.19) for the Branch, CmpBrEq, and Call instrucitons

H APT ER 5 BASIC PROCESSING UNIT IR enable IR A MuxMA Extend Immediate MA select RM MuxB and MEM read MFC MuxINC MEM write Data Address Processor-memory interface To cache and main memory Figure 5.19 Processor memory interface and IR control signals. Multiplexers are controlled by signals that select which appear at the mul tiplexer's output. For example, input data register RB to be when B select is equal to 0, MuxB Selects the contents o MuxC available at input InB of the ALU.Note that to control and MuxY, because two needed The operation each multiplexer selects bits are whic performed by the AI II one of three inpus i

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