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

MIPS Assembly Language Programming Exercise: Write a program to evaluate 3ab - 2

ID: 3567365 • Letter: M

Question

MIPS Assembly Language Programming Exercise:

Write a program to evaluate 3ab - 2bc - 5a + 20ac - 16
Prompt the user for the values for a, b, and c, all single-precision floating-point values.
To evaluate this, use as few registers as possible. Use the stack to hold all of the
intermediate values. Write the final value to the monitor with an appropriate descriptive
message.

This solution is not working:

.data
prompt: .asciiz "Enter a number: "
x:   .float 0.0
y:   .float 0.0
z:   .float 0.0

   .text
   .globl main

main:
   li.s $f7, 16.0
   li.s $f0, 0.0
   li.s $f1, 0.0
   li.s $f2, 0.0

   la $a0, prompt # print prompt
   li $v0, 4
   syscall

   li $v0, 6
   syscall # get a
   s.s $f0 , x # store in x
   nop
  
   li $v0, 4
   syscall # print prompt again
  
   li $v0, 6
   syscall
   s.s $f0, y # store in y
   nop

   li $v0, 4
   syscall # print prompt again

   li $v0, 6
   syscall
   s.s $f0, z # store in z
   nop

   # get x, y, and z
   l.s $f1, x
   l.s $f2, y
   l.s $f3, z
   li.s $f4, 3.0
   mul.s $f5, $f1, $f2 # a * b
   mul.s $f5, $f5, $f4 # 3ab
   addi $sp, $sp, -4
   mfc1 $t1, $f5 # $t1 = f1
   sw $t1, ($sp) # push 3ab onto stack
   nop

   li.s $f4, -2.0
   mul.s $f5, $f2, $f3 # b * c
   mul.s $f5, $f5, $f3 # -2bc
   addi $sp, $sp, -4
   mfc1 $t1, $f5 # $t1 = f1
   sw $t1, ($sp) # push -2bc onto stack
   nop
   li.s $f4, -5.0
   mul.s $f5, $f4, $f1 # 5 * a
   addi $sp, $sp, -4
   mfc1 $t1, $f5 # $t1 = f1
   sw $t1, ($sp) # push -5a onto stack
   nop

   li.s $f4, 20.0
   mul.s $f5, $f1, $f3 # a * c
   mul.s $f5, $f5, $f4 # 20ac
   addi $sp, $sp, -4
   mfc1 $t1, $f5 # $t1 = f1
   sw $t1, ($sp) # push 20ac onto stack ( top of stack )
   nop
  
   li.s $f4, -16.0   
   lw $t1, ($sp) # pop 20ac
   nop
   mtc1 $t1, $f5 # $f5 = $t1
   addi $sp, $sp, 4
   add.s $f4, $f5, $f4 # 20ac - 16

   lw $t1, ($sp) # pop -5a
   nop
   mtc1 $t1, $f5 # $f5 = $t1
   addi $sp, $sp, 4
   add.s $f4, $f5, $f4 # - 5a + 20ac - 16

   lw $t1, ($sp) # pop -2bc
   nop
   mtc1 $t1, $f5 # $f5 = $t1
   addi $sp, $sp, 4
   add.s $f4, $f5, $f4 # - 2bc - 5a + 20ac - 16

   lw $t1, ($sp) # pop 3ab
   nop
   mtc1 $t1, $f5 # $f5 = $t1
   addi $sp, $sp, 4
   add.s $f4, $f5, $f4 # 3ab - 2bc - 5a + 20ac - 16

   li $v0, 10
   syscall # exit

Can someone please post the correct Assembly Language code for this problem?

Explanation / Answer

li.s   $f7, 16.0

li.s    $f0, 0.0

li.s    $f1, 0.0

li.s    $f2, 0.0

la $a0, prompt # print prompt

li $v0, 4

syscall

li $v0, 6

syscall         # get a

s.s $f0 , x     # store in x

nop

li $v0, 4

syscall         # print prompt again

li $v0, 6

syscall

s.s $f0, y      # store in y

nop

li $v0, 4

syscall         # print prompt again

li $v0, 6

syscall

s.s $f0, z      # store in z

nop

# get x, y, and z

l.s $f1, x

l.s $f2, y

l.s $f3, z

li.s    $f4, 3.0   

mul.s   $f5, $f1, $f2   # a * b

mul.s $f5, $f5, $f4   # 3ab

addi    $sp, $sp, -4

mfc1    $t1, $f5    # $t1 = f1

sw $t1, ($sp) # push 3ab onto stack

nop

li.s    $f4, -2.0

mul.s   $f5, $f2, $f3   # b * c

mul.s   $f5, $f5, $f3   # -2bc

addi    $sp, $sp, -4

mfc1    $t1, $f5    # $t1 = f1      

sw $t1, ($sp) # push -2bc onto stack

nop

li.s    $f4, -5.0

mul.s   $f5, $f4, $f1   # 5 * a

addi    $sp, $sp, -4   

mfc1    $t1, $f5    # $t1 = f1

sw $t1, ($sp) # push -5a onto stack

nop

li.s    $f4, 20.0

mul.s   $f5, $f1, $f3   # a * c

mul.s   $f5, $f5, $f4   # 20ac

addi    $sp, $sp, -4   

mfc1    $t1, $f5    # $t1 = f1

sw $t1, ($sp) # push 20ac onto stack ( top of stack )

nop

li.s    $f4, -16.0  

lw $t1, (sp)   # pop 20ac<---- THIS WHERE IT BLOWS UP

nop

mtc1    $t1, $f5    # $f5 = $t1

addu    $sp, $sp, 4

addu    $f4, $f5, $f4   # 20ac - 16

lw $t1, ($sp)   # pop -5a

nop

mtc1    $t1, $f5    # $f5 = $t1

addu    $sp, $sp, 4

addu    $f4, $f5, $f4   # - 5a + 20ac - 16

lw $t1, ($sp)   # pop -2bc

nop

mtc1    $t1, $f5    # $f5 = $t1

addu    $sp, $sp, 4

addu    $f4, $f5, $f4   # - 2bc - 5a + 20ac - 16

lw $t1, ($sp)   # pop 3ab

nop

mtc1    $t1, $f5    # $f5 = $t1

addu    $sp, $sp, 4

addu    $f4, $f5, $f4   # 3ab - 2bc - 5a + 20ac - 16

li $v0, 10

syscall         # exit

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Chat Now And Get Quote