lw $4, 0($29) ; 183: lw $a0 0($sp) # argc addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp sll $2, $4, 2 ; 186: sll $v0 $a0 2 addu $6, $6, $2 ; 187: addu $a2 $a2 $v0 jal 0x00400024 [main] ; 188: jal main nop ; 189: nop ori $2, $0, 10 ; 191: li $v0 10 syscall ; 192: syscall # syscall 10 (exit) ori $2, $0, 4 ; 8: li $v0, 4 lui $1, 4097 [prompta] ; 9: la $a0, prompta ori $4, $1, 0 [prompta] syscall ; 10: syscall ori $2, $0, 6 ; 11: li $v0, 6 syscall ; 12: syscall mov.s $f1, $f0 ; 13: mov.s $f1, $f0 ori $2, $0, 4 ; 16: li $v0, 4 lui $1, 4097 [promptb] ; 17: la $a0, promptb ori $4, $1, 20 [promptb] syscall ; 18: syscall ori $2, $0, 6 ; 19: li $v0, 6 syscall ; 20: syscall mov.s $f2, $f0 ; 21: mov.s $f2, $f0 ori $2, $0, 4 ; 24: li $v0, 4 lui $1, 4097 [promptc] ; 25: la $a0, promptc ori $4, $1, 40 [promptc] syscall ; 26: syscall ori $2, $0, 6 ; 27: li $v0, 6 syscall ; 28: syscall mov.s $f3, $f0 ; 29: mov.s $f3, $f0 jal 0x004000e8 [DetCompute] ; 32: jal DetCompute lui $1, 4097 [zeroFloat] ; 34: l.s $f7, zeroFloat lwc1 $f7, 60($1) [zeroFloat] c.eq.s $f12, $f7 ; 37: c.eq.s $f12, $f7 bc1t0 124 [OneRoot-0x00400088] ; 38: bc1t OneRoot c.lt.s $f12, $f7 ; 41: c.lt.s $f12, $f7 bc1t0 160 [NoSolution-0x00400090]; 42: bc1t NoSolution jal 0x00400148 [SquareRoot] ; 47: jal SquareRoot mov.s $f11, $f8 ; 49: mov.s $f11, $f8 # $f11 = sqrt(bē - 4ac) neg.s $f5, $f2 ; 50: neg.s $f5, $f2 # -b add.s $f4, $f1, $f1 ; 51: add.s $f4, $f1, $f1 # 2a add.s $f12, $f5, $f11 ; 54: add.s $f12, $f5, $f11 div.s $f12, $f12, $f4 ; 55: div.s $f12, $f12, $f4 lui $1, 4097 [solution1] ; 57: la $a0, solution1 ori $4, $1, 72 [solution1] ori $2, $0, 4 ; 58: li $v0, 4 syscall ; 59: syscall ori $2, $0, 2 ; 61: li $v0, 2 syscall ; 62: syscall sub.s $f12, $f5, $f11 ; 65: sub.s $f12, $f5, $f11 div.s $f12, $f12, $f4 ; 66: div.s $f12, $f12, $f4 lui $1, 4097 [solution2] ; 68: la $a0, solution2 ori $4, $1, 100 [solution2] ori $2, $0, 4 ; 69: li $v0, 4 syscall ; 70: syscall ori $2, $0, 2 ; 72: li $v0, 2 syscall ; 73: syscall jal 0x00400188 [Exit] ; 76: jal Exit lui $1, 4097 [four] ; 100: l.s $f7, four lwc1 $f7, 112($1) [four] mul.s $f5, $f2, $f2 ; 101: mul.s $f5, $f2, $f2 # bē mul.s $f4, $f1, $f3 ; 102: mul.s $f4, $f1, $f3 # ac mul.s $f4, $f4, $f7 ; 103: mul.s $f4, $f4, $f7 # 4ac sub.s $f12, $f5, $f4 ; 104: sub.s $f12, $f5, $f4 # bē -4ac jr $31 ; 106: jr $ra neg.s $f5, $f2 ; 120: neg.s $f5, $f2 # -b add.s $f4, $f1, $f1 ; 121: add.s $f4, $f1, $f1 # 2a div.s $f12, $f5, $f4 ; 122: div.s $f12, $f5, $f4 # -b/2a lui $1, 4097 [solution] ; 124: la $a0, solution ori $4, $1, 116 [solution] ori $2, $0, 4 ; 125: li $v0, 4 syscall ; 126: syscall ori $2, $0, 2 ; 128: li $v0, 2 syscall ; 129: syscall ori $2, $0, 10 ; 132: li $v0, 10 syscall ; 133: syscall lui $1, 4097 [nosolution] ; 147: la $a0, nosolution ori $4, $1, 141 [nosolution] ori $2, $0, 4 ; 148: li $v0, 4 syscall ; 149: syscall ori $2, $0, 10 ; 152: li $v0, 10 syscall ; 153: syscall ori $18, $0, 9 ; 166: li $s2, 9 lui $1, 4097 ; 168: l.s $f8, x0 # Give $f8 the random guess lwc1 $f8, 68($1) lui $1, 4097 ; 169: l.s $f10, halfFloat # Give $f10 the value 0.5 lwc1 $f10, 64($1) beq $16, $18, 24 [end_loop2-0x0040015c]; 174: beq $s0, $s2, end_loop2 div.s $f9, $f12, $f8 ; 176: div.s $f9, $f12, $f8 # $f9 = S/xn add.s $f8, $f8, $f9 ; 177: add.s $f8, $f8, $f9 # xn + S/xn mul.s $f8, $f10, $f8 ; 178: mul.s $f8, $f10, $f8 # 1/2 (xn + S/xn) addi $16, $16, 1 ; 180: add $s0, $s0, 1 bgez $0 -20 [start_loop2-0x00400170]; 181: b start_loop2 ori $16, $0, 0 ; 184: li $s0, 0 beq $17, $18, 12 [end_loop-0x00400178]; 186: beq $s1, $s2, end_loop addi $17, $17, 1 ; 187: add $s1, $s1, 1 bgez $0 -36 [start_loop-0x00400180]; 188: b start_loop jr $31 ; 191: jr $ra ori $2, $0, 10 ; 201: li $v0, 10 syscall ; 202: syscall #kerner Segment Segment addu $27, $0, $1 ; 90: move $k1 $at # Save $at lui $1, -28672 ; 92: sw $v0 s1 # Not re-entrant and we can't trust $sp sw $2, 512($1) lui $1, -28672 ; 93: sw $a0 s2 # But we need to use these registers sw $4, 516($1) mfc0 $26, $13 ; 95: mfc0 $k0 $13 # Cause register srl $4, $26, 2 ; 96: srl $a0 $k0 2 # Extract ExcCode Field andi $4, $4, 31 ; 97: andi $a0 $a0 0x1f ori $2, $0, 4 ; 101: li $v0 4 # syscall 4 (print_str) lui $4, -28672 [__m1_] ; 102: la $a0 __m1_ syscall ; 103: syscall ori $2, $0, 1 ; 105: li $v0 1 # syscall 1 (print_int) srl $4, $26, 2 ; 106: srl $a0 $k0 2 # Extract ExcCode Field andi $4, $4, 31 ; 107: andi $a0 $a0 0x1f syscall ; 108: syscall ori $2, $0, 4 ; 110: li $v0 4 # syscall 4 (print_str) andi $4, $26, 60 ; 111: andi $a0 $k0 0x3c lui $1, -28672 ; 112: lw $a0 __excp($a0) addu $1, $1, $4 lw $4, 384($1) nop ; 113: nop syscall ; 114: syscall ori $1, $0, 24 ; 116: bne $k0 0x18 ok_pc # Bad PC exception requires special checks bne $1, $26, 32 [ok_pc-0x800001dc] nop ; 117: nop mfc0 $4, $14 ; 119: mfc0 $a0 $14 # EPC andi $4, $4, 3 ; 120: andi $a0 $a0 0x3 # Is EPC word-aligned? beq $0, $4, 16 [ok_pc-0x800001ec]; 121: beq $a0 0 ok_pc nop ; 122: nop ori $2, $0, 10 ; 124: li $v0 10 # Exit on really bad PC syscall ; 125: syscall ori $2, $0, 4 ; 128: li $v0 4 # syscall 4 (print_str) lui $1, -28672 [__m2_] ; 129: la $a0 __m2_ ori $4, $1, 13 [__m2_] syscall ; 130: syscall srl $4, $26, 2 ; 132: srl $a0 $k0 2 # Extract ExcCode Field andi $4, $4, 31 ; 133: andi $a0 $a0 0x1f bne $0, $4, 8 [ret-0x80000214] ; 134: bne $a0 0 ret # 0 means exception was an interrupt nop ; 135: nop mfc0 $26, $14 ; 145: mfc0 $k0 $14 # Bump EPC register addiu $26, $26, 4 ; 146: addiu $k0 $k0 4 # Skip faulting instruction mtc0 $26, $14 ; 148: mtc0 $k0 $14 lui $1, -28672 ; 153: lw $v0 s1 # Restore other registers lw $2, 512($1) lui $1, -28672 ; 154: lw $a0 s2 lw $4, 516($1) addu $1, $0, $27 ; 157: move $at $k1 # Restore $at mtc0 $0, $13 ; 160: mtc0 $0 $13 # Clear Cause register mfc0 $26, $12 ; 162: mfc0 $k0 $12 # Set Status register ori $26, $26, 1 ; 163: ori $k0 0x1 # Interrupts enabled mtc0 $26, $12 ; 164: mtc0 $k0 $12