[00400000] lw $4, 0($29) ; 183: lw $a0 0($sp) # argc [00400004] addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv [00400008] addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp [0040000c] sll $2, $4, 2 ; 186: sll $v0 $a0 2 [00400010] addu $6, $6, $2 ; 187: addu $a2 $a2 $v0 [00400014] jal 0x00400024 [main] ; 188: jal main [00400018] nop ; 189: nop [0040001c] ori $2, $0, 10 ; 191: li $v0 10 [00400020] syscall ; 192: syscall # syscall 10 (exit) [00400024] ori $2, $0, 4 ; 8: li $v0, 4 [00400028] lui $1, 4097 [prompta] ; 9: la $a0, prompta [0040002c] ori $4, $1, 0 [prompta] [00400030] syscall ; 10: syscall [00400034] ori $2, $0, 6 ; 11: li $v0, 6 [00400038] syscall ; 12: syscall [0040003c] mov.s $f1, $f0 ; 13: mov.s $f1, $f0 [00400040] ori $2, $0, 4 ; 16: li $v0, 4 [00400044] lui $1, 4097 [promptb] ; 17: la $a0, promptb [00400048] ori $4, $1, 20 [promptb] [0040004c] syscall ; 18: syscall [00400050] ori $2, $0, 6 ; 19: li $v0, 6 [00400054] syscall ; 20: syscall [00400058] mov.s $f2, $f0 ; 21: mov.s $f2, $f0 [0040005c] ori $2, $0, 4 ; 24: li $v0, 4 [00400060] lui $1, 4097 [promptc] ; 25: la $a0, promptc [00400064] ori $4, $1, 40 [promptc] [00400068] syscall ; 26: syscall [0040006c] ori $2, $0, 6 ; 27: li $v0, 6 [00400070] syscall ; 28: syscall [00400074] mov.s $f3, $f0 ; 29: mov.s $f3, $f0 [00400078] jal 0x004000e8 [DetCompute] ; 32: jal DetCompute [0040007c] lui $1, 4097 [zeroFloat] ; 34: l.s $f7, zeroFloat [00400080] lwc1 $f7, 60($1) [zeroFloat] [00400084] c.eq.s $f12, $f7 ; 37: c.eq.s $f12, $f7 [00400088] bc1t0 124 [OneRoot-0x00400088] ; 38: bc1t OneRoot [0040008c] c.lt.s $f12, $f7 ; 41: c.lt.s $f12, $f7 [00400090] bc1t0 160 [NoSolution-0x00400090]; 42: bc1t NoSolution [00400094] jal 0x00400148 [SquareRoot] ; 47: jal SquareRoot [00400098] mov.s $f11, $f8 ; 49: mov.s $f11, $f8 # $f11 = sqrt(bē - 4ac) [0040009c] neg.s $f5, $f2 ; 50: neg.s $f5, $f2 # -b [004000a0] add.s $f4, $f1, $f1 ; 51: add.s $f4, $f1, $f1 # 2a [004000a4] add.s $f12, $f5, $f11 ; 54: add.s $f12, $f5, $f11 [004000a8] div.s $f12, $f12, $f4 ; 55: div.s $f12, $f12, $f4 [004000ac] lui $1, 4097 [solution1] ; 57: la $a0, solution1 [004000b0] ori $4, $1, 72 [solution1] [004000b4] ori $2, $0, 4 ; 58: li $v0, 4 [004000b8] syscall ; 59: syscall [004000bc] ori $2, $0, 2 ; 61: li $v0, 2 [004000c0] syscall ; 62: syscall [004000c4] sub.s $f12, $f5, $f11 ; 65: sub.s $f12, $f5, $f11 [004000c8] div.s $f12, $f12, $f4 ; 66: div.s $f12, $f12, $f4 [004000cc] lui $1, 4097 [solution2] ; 68: la $a0, solution2 [004000d0] ori $4, $1, 100 [solution2] [004000d4] ori $2, $0, 4 ; 69: li $v0, 4 [004000d8] syscall ; 70: syscall [004000dc] ori $2, $0, 2 ; 72: li $v0, 2 [004000e0] syscall ; 73: syscall [004000e4] jal 0x00400188 [Exit] ; 76: jal Exit [004000e8] lui $1, 4097 [four] ; 100: l.s $f7, four [004000ec] lwc1 $f7, 112($1) [four] [004000f0] mul.s $f5, $f2, $f2 ; 101: mul.s $f5, $f2, $f2 # bē [004000f4] mul.s $f4, $f1, $f3 ; 102: mul.s $f4, $f1, $f3 # ac [004000f8] mul.s $f4, $f4, $f7 ; 103: mul.s $f4, $f4, $f7 # 4ac [004000fc] sub.s $f12, $f5, $f4 ; 104: sub.s $f12, $f5, $f4 # bē -4ac [00400100] jr $31 ; 106: jr $ra [00400104] neg.s $f5, $f2 ; 120: neg.s $f5, $f2 # -b [00400108] add.s $f4, $f1, $f1 ; 121: add.s $f4, $f1, $f1 # 2a [0040010c] div.s $f12, $f5, $f4 ; 122: div.s $f12, $f5, $f4 # -b/2a [00400110] lui $1, 4097 [solution] ; 124: la $a0, solution [00400114] ori $4, $1, 116 [solution] [00400118] ori $2, $0, 4 ; 125: li $v0, 4 [0040011c] syscall ; 126: syscall [00400120] ori $2, $0, 2 ; 128: li $v0, 2 [00400124] syscall ; 129: syscall [00400128] ori $2, $0, 10 ; 132: li $v0, 10 [0040012c] syscall ; 133: syscall [00400130] lui $1, 4097 [nosolution] ; 147: la $a0, nosolution [00400134] ori $4, $1, 141 [nosolution] [00400138] ori $2, $0, 4 ; 148: li $v0, 4 [0040013c] syscall ; 149: syscall [00400140] ori $2, $0, 10 ; 152: li $v0, 10 [00400144] syscall ; 153: syscall [00400148] ori $18, $0, 9 ; 166: li $s2, 9 [0040014c] lui $1, 4097 ; 168: l.s $f8, x0 # Give $f8 the random guess [00400150] lwc1 $f8, 68($1) [00400154] lui $1, 4097 ; 169: l.s $f10, halfFloat # Give $f10 the value 0.5 [00400158] lwc1 $f10, 64($1) [0040015c] beq $16, $18, 24 [end_loop2-0x0040015c]; 174: beq $s0, $s2, end_loop2 [00400160] div.s $f9, $f12, $f8 ; 176: div.s $f9, $f12, $f8 # $f9 = S/xn [00400164] add.s $f8, $f8, $f9 ; 177: add.s $f8, $f8, $f9 # xn + S/xn [00400168] mul.s $f8, $f10, $f8 ; 178: mul.s $f8, $f10, $f8 # 1/2 (xn + S/xn) [0040016c] addi $16, $16, 1 ; 180: add $s0, $s0, 1 [00400170] bgez $0 -20 [start_loop2-0x00400170]; 181: b start_loop2 [00400174] ori $16, $0, 0 ; 184: li $s0, 0 [00400178] beq $17, $18, 12 [end_loop-0x00400178]; 186: beq $s1, $s2, end_loop [0040017c] addi $17, $17, 1 ; 187: add $s1, $s1, 1 [00400180] bgez $0 -36 [start_loop-0x00400180]; 188: b start_loop [00400184] jr $31 ; 191: jr $ra [00400188] ori $2, $0, 10 ; 201: li $v0, 10 [0040018c] syscall ; 202: syscall Kernel Text Segment [80000180] addu $27, $0, $1 ; 90: move $k1 $at # Save $at [80000184] lui $1, -28672 ; 92: sw $v0 s1 # Not re-entrant and we can't trust $sp [80000188] sw $2, 512($1) [8000018c] lui $1, -28672 ; 93: sw $a0 s2 # But we need to use these registers [80000190] sw $4, 516($1) [80000194] mfc0 $26, $13 ; 95: mfc0 $k0 $13 # Cause register [80000198] srl $4, $26, 2 ; 96: srl $a0 $k0 2 # Extract ExcCode Field [8000019c] andi $4, $4, 31 ; 97: andi $a0 $a0 0x1f [800001a0] ori $2, $0, 4 ; 101: li $v0 4 # syscall 4 (print_str) [800001a4] lui $4, -28672 [__m1_] ; 102: la $a0 __m1_ [800001a8] syscall ; 103: syscall [800001ac] ori $2, $0, 1 ; 105: li $v0 1 # syscall 1 (print_int) [800001b0] srl $4, $26, 2 ; 106: srl $a0 $k0 2 # Extract ExcCode Field [800001b4] andi $4, $4, 31 ; 107: andi $a0 $a0 0x1f [800001b8] syscall ; 108: syscall [800001bc] ori $2, $0, 4 ; 110: li $v0 4 # syscall 4 (print_str) [800001c0] andi $4, $26, 60 ; 111: andi $a0 $k0 0x3c [800001c4] lui $1, -28672 ; 112: lw $a0 __excp($a0) [800001c8] addu $1, $1, $4 [800001cc] lw $4, 384($1) [800001d0] nop ; 113: nop [800001d4] syscall ; 114: syscall [800001d8] ori $1, $0, 24 ; 116: bne $k0 0x18 ok_pc # Bad PC exception requires special checks [800001dc] bne $1, $26, 32 [ok_pc-0x800001dc] [800001e0] nop ; 117: nop [800001e4] mfc0 $4, $14 ; 119: mfc0 $a0 $14 # EPC [800001e8] andi $4, $4, 3 ; 120: andi $a0 $a0 0x3 # Is EPC word-aligned? [800001ec] beq $0, $4, 16 [ok_pc-0x800001ec]; 121: beq $a0 0 ok_pc [800001f0] nop ; 122: nop [800001f4] ori $2, $0, 10 ; 124: li $v0 10 # Exit on really bad PC [800001f8] syscall ; 125: syscall [800001fc] ori $2, $0, 4 ; 128: li $v0 4 # syscall 4 (print_str) [80000200] lui $1, -28672 [__m2_] ; 129: la $a0 __m2_ [80000204] ori $4, $1, 13 [__m2_] [80000208] syscall ; 130: syscall [8000020c] srl $4, $26, 2 ; 132: srl $a0 $k0 2 # Extract ExcCode Field [80000210] andi $4, $4, 31 ; 133: andi $a0 $a0 0x1f [80000214] bne $0, $4, 8 [ret-0x80000214] ; 134: bne $a0 0 ret # 0 means exception was an interrupt [80000218] nop ; 135: nop [8000021c] mfc0 $26, $14 ; 145: mfc0 $k0 $14 # Bump EPC register [80000220] addiu $26, $26, 4 ; 146: addiu $k0 $k0 4 # Skip faulting instruction [80000224] mtc0 $26, $14 ; 148: mtc0 $k0 $14 [80000228] lui $1, -28672 ; 153: lw $v0 s1 # Restore other registers [8000022c] lw $2, 512($1) [80000230] lui $1, -28672 ; 154: lw $a0 s2 [80000234] lw $4, 516($1) [80000238] addu $1, $0, $27 ; 157: move $at $k1 # Restore $at [8000023c] mtc0 $0, $13 ; 160: mtc0 $0 $13 # Clear Cause register [80000240] mfc0 $26, $12 ; 162: mfc0 $k0 $12 # Set Status register [80000244] ori $26, $26, 1 ; 163: ori $k0 0x1 # Interrupts enabled [80000248] mtc0 $26, $12 ; 164: mtc0 $k0 $12 [8000024c] eret