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

***MIPS*** Solve a quadratic equation in two linked files. Write a function to c

ID: 3718856 • Letter: #

Question

***MIPS***

Solve a quadratic equation in two linked files. Write a function to calculate the roots of any quadratic equation of the form ax +bx+c. a, b, and c are all single-precision floating point values and are passed to the function on the stack. The order you put the arguments on the stack is up to you When you return, there should be three items on the stack, two floating point values (referred to below as r1 and r2) and a Status integer. Status indicates the nature of the results returned. Again, the order you put the three values on the stack is up to you. Status 0:2 real roots in r1 & r2 1 1 real root in r1; r2 can be ignored 2: 2 complex roots of the form (r1 t ir2) 3 no roots computed (error); r1 and r2 can be ignored Your program should prompt for the values a, b, and c, then label and print the results. For the purposes of this function, assume two numbers that are within 0.001 are the same Submit the Following Filels: roots.asm, roots_main.asm Required Input: Three 32-bit floating point numbers (a, b, and c) Required Output Your output should look something like the following examples. Note this is three runs. Quadratic solver a: 3.8 b: 4.5 C: 1.2 There are two roots: e.23107084351742913, 1.7310708435174291 Quadratic solver a: 2.e b: 4.e C: 2.e There is one root: -1.00 Quadratic solver a: 4.3 b: -2.45 C: 2.e There are two complex roots: e. 284883721 +/-?.619643878ì

Explanation / Answer

CODING:

.file   1 ""
   .section .mdebug.abi32
   .previous
   .nan   legacy
   .module   fp=32
   .module   nooddspreg
   .abicalls
   .rdata
   .align   2
$LC1:
   .ascii   "There are two roots : %f,%f "
   .align   2
$LC2:
   .ascii   "There is one root : %f "
   .align   2
$LC3:
   .ascii   "There are two complex roots : %f +/- %f "
   .text
   .align   2
   .globl   root_solver
   .set   nomips16
   .set   nomicromips
   .ent   root_solver
   .type   root_solver, @function
root_solver:
   .frame   $fp,72,$31       # vars= 24, regs= 2/2, args= 24, gp= 8
   .mask   0xc0000000,-12
   .fmask   0x00300000,-8
   .set   noreorder
   .cpload   $25
   .set   nomacro
   addiu   $sp,$sp,-72
   sw   $31,60($sp)
   sw   $fp,56($sp)
   swc1   $f20,68($sp)
   swc1   $f21,64($sp)
   movz   $31,$31,$0
   move   $fp,$sp
   .cprestore   24
   swc1   $f12,72($fp)
   swc1   $f14,76($fp)
   sw   $6,80($fp)
   lwc1   $f2,76($fp)
   lwc1   $f0,76($fp)
   nop
   mul.s   $f2,$f2,$f0
   lwc1   $f4,72($fp)
   lw   $2,%got($LC0)($28)
   nop
   lwc1   $f0,%lo($LC0)($2)
   nop
   mul.s   $f4,$f4,$f0
   lwc1   $f0,80($fp)
   nop
   mul.s   $f0,$f4,$f0
   sub.s   $f0,$f2,$f0
   swc1   $f0,32($fp)
   lwc1   $f0,32($fp)
   mtc1   $0,$f2
   nop
   c.lt.s   $f2,$f0
   nop
   bc1f   $L7
   nop

   lw   $3,76($fp)
   li   $2,-2147483648           # 0xffffffff80000000
   xor   $2,$3,$2
   mtc1   $2,$f0
   nop
   cvt.d.s   $f20,$f0
   lwc1   $f0,32($fp)
   nop
   cvt.d.s   $f0,$f0
   mov.d   $f12,$f0
   lw   $2,%call16(sqrt)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,sqrt
1:   jalr   $25
   nop

   lw   $28,24($fp)
   add.d   $f2,$f20,$f0
   lwc1   $f0,72($fp)
   nop
   add.s   $f0,$f0,$f0
   cvt.d.s   $f0,$f0
   div.d   $f0,$f2,$f0
   cvt.s.d   $f0,$f0
   swc1   $f0,36($fp)
   lw   $3,76($fp)
   li   $2,-2147483648           # 0xffffffff80000000
   xor   $2,$3,$2
   mtc1   $2,$f0
   nop
   cvt.d.s   $f20,$f0
   lwc1   $f0,32($fp)
   nop
   cvt.d.s   $f0,$f0
   mov.d   $f12,$f0
   lw   $2,%call16(sqrt)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,sqrt
1:   jalr   $25
   nop

   lw   $28,24($fp)
   sub.d   $f2,$f20,$f0
   lwc1   $f0,72($fp)
   nop
   add.s   $f0,$f0,$f0
   cvt.d.s   $f0,$f0
   div.d   $f0,$f2,$f0
   cvt.s.d   $f0,$f0
   swc1   $f0,40($fp)
   lwc1   $f0,36($fp)
   nop
   cvt.d.s   $f2,$f0
   lwc1   $f0,40($fp)
   nop
   cvt.d.s   $f0,$f0
   swc1   $f0,20($sp)
   swc1   $f1,16($sp)
   mfc1   $7,$f2
   mfc1   $6,$f3
   lw   $2,%got($LC1)($28)
   nop
   addiu   $4,$2,%lo($LC1)
   lw   $2,%call16(printf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,printf
1:   jalr   $25
   nop

   lw   $28,24($fp)
   b   $L8
   nop

$L7:
   lwc1   $f0,32($fp)
   mtc1   $0,$f2
   nop
   c.eq.s   $f0,$f2
   nop
   bc1f   $L5
   nop

   lw   $3,76($fp)
   li   $2,-2147483648           # 0xffffffff80000000
   xor   $2,$3,$2
   mtc1   $2,$f0
   nop
   cvt.d.s   $f20,$f0
   lwc1   $f0,32($fp)
   nop
   cvt.d.s   $f0,$f0
   mov.d   $f12,$f0
   lw   $2,%call16(sqrt)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,sqrt
1:   jalr   $25
   nop

   lw   $28,24($fp)
   add.d   $f2,$f20,$f0
   lwc1   $f0,72($fp)
   nop
   add.s   $f0,$f0,$f0
   cvt.d.s   $f0,$f0
   div.d   $f0,$f2,$f0
   cvt.s.d   $f0,$f0
   swc1   $f0,36($fp)
   lwc1   $f0,36($fp)
   nop
   cvt.d.s   $f0,$f0
   mfc1   $7,$f0
   mfc1   $6,$f1
   lw   $2,%got($LC2)($28)
   nop
   addiu   $4,$2,%lo($LC2)
   lw   $2,%call16(printf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,printf
1:   jalr   $25
   nop

   lw   $28,24($fp)
   b   $L8
   nop

$L5:
   lw   $3,76($fp)
   li   $2,-2147483648           # 0xffffffff80000000
   xor   $2,$3,$2
   lwc1   $f0,72($fp)
   nop
   add.s   $f0,$f0,$f0
   mtc1   $2,$f2
   nop
   div.s   $f0,$f2,$f0
   swc1   $f0,44($fp)
   lw   $3,32($fp)
   li   $2,-2147483648           # 0xffffffff80000000
   xor   $2,$3,$2
   mtc1   $2,$f0
   nop
   cvt.d.s   $f0,$f0
   mov.d   $f12,$f0
   lw   $2,%call16(sqrt)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,sqrt
1:   jalr   $25
   nop

   lw   $28,24($fp)
   mov.d   $f2,$f0
   lwc1   $f0,72($fp)
   nop
   add.s   $f0,$f0,$f0
   cvt.d.s   $f0,$f0
   div.d   $f0,$f2,$f0
   cvt.s.d   $f0,$f0
   swc1   $f0,48($fp)
   lwc1   $f0,44($fp)
   nop
   cvt.d.s   $f2,$f0
   lwc1   $f0,48($fp)
   nop
   cvt.d.s   $f0,$f0
   swc1   $f0,20($sp)
   swc1   $f1,16($sp)
   mfc1   $7,$f2
   mfc1   $6,$f3
   lw   $2,%got($LC3)($28)
   nop
   addiu   $4,$2,%lo($LC3)
   lw   $2,%call16(printf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,printf
1:   jalr   $25
   nop

   lw   $28,24($fp)
$L8:
   nop
   move   $sp,$fp
   lw   $31,60($sp)
   lw   $fp,56($sp)
   lwc1   $f20,68($sp)
   nop
   lwc1   $f21,64($sp)
   addiu   $sp,$sp,72
   j   $31
   nop

   .set   macro
   .set   reorder
   .end   root_solver
   .size   root_solver, .-root_solver
   .rdata
   .align   2
$LC4:
   .ascii   "Quadratic Solver"
   .align   2
$LC5:
   .ascii   "a: "
   .align   2
$LC6:
   .ascii   "%f"
   .align   2
$LC7:
   .ascii   "b: "
   .align   2
$LC8:
   .ascii   "c: "
   .text
   .align   2
   .globl   main
   .set   nomips16
   .set   nomicromips
   .ent   main
   .type   main, @function
main:
   .frame   $fp,48,$31       # vars= 16, regs= 2/0, args= 16, gp= 8
   .mask   0xc0000000,-4
   .fmask   0x00000000,0
   .set   noreorder
   .cpload   $25
   .set   nomacro
   addiu   $sp,$sp,-48
   sw   $31,44($sp)
   sw   $fp,40($sp)
   move   $fp,$sp
   .cprestore   16
   movz   $31,$31,$0
   lw   $2,%got($LC4)($28)
   nop
   addiu   $4,$2,%lo($LC4)
   lw   $2,%call16(puts)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,puts
1:   jalr   $25
   nop

   lw   $28,16($fp)
   nop
   lw   $2,%got($LC5)($28)
   nop
   addiu   $4,$2,%lo($LC5)
   lw   $2,%call16(printf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,printf
1:   jalr   $25
   nop

   lw   $28,16($fp)
   addiu   $2,$fp,24
   move   $5,$2
   lw   $2,%got($LC6)($28)
   nop
   addiu   $4,$2,%lo($LC6)
   lw   $2,%call16(__isoc99_scanf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,__isoc99_scanf
1:   jalr   $25
   nop

   lw   $28,16($fp)
   nop
   lw   $2,%got($LC7)($28)
   nop
   addiu   $4,$2,%lo($LC7)
   lw   $2,%call16(printf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,printf
1:   jalr   $25
   nop

   lw   $28,16($fp)
   addiu   $2,$fp,28
   move   $5,$2
   lw   $2,%got($LC6)($28)
   nop
   addiu   $4,$2,%lo($LC6)
   lw   $2,%call16(__isoc99_scanf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,__isoc99_scanf
1:   jalr   $25
   nop

   lw   $28,16($fp)
   nop
   lw   $2,%got($LC8)($28)
   nop
   addiu   $4,$2,%lo($LC8)
   lw   $2,%call16(printf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,printf
1:   jalr   $25
   nop

   lw   $28,16($fp)
   addiu   $2,$fp,32
   move   $5,$2
   lw   $2,%got($LC6)($28)
   nop
   addiu   $4,$2,%lo($LC6)
   lw   $2,%call16(__isoc99_scanf)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,__isoc99_scanf
1:   jalr   $25
   nop

   lw   $28,16($fp)
   lwc1   $f0,24($fp)
   lwc1   $f2,28($fp)
   lwc1   $f4,32($fp)
   nop
   mfc1   $6,$f4
   mov.s   $f14,$f2
   mov.s   $f12,$f0
   lw   $2,%got(root_solver)($28)
   nop
   move   $25,$2
   .reloc   1f,R_MIPS_JALR,root_solver
1:   jalr   $25
   nop

   lw   $28,16($fp)
   move   $2,$0
   move   $sp,$fp
   lw   $31,44($sp)
   lw   $fp,40($sp)
   addiu   $sp,$sp,48
   j   $31
   nop

   .set   macro
   .set   reorder
   .end   main
   .size   main, .-main
   .rdata
   .align   2
$LC0:
   .word   1082130432
   .ident   "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609"