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) lui $1, 4097 ; 37: lwc1 $f0, fiveFloat # $f0 = 5.0 lwc1 $f0, 20($1) lui $1, 4097 ; 39: lwc1 $f1, fourFloat # $f1 = -4.0 lwc1 $f1, 16($1) lui $1, 4097 ; 41: lwc1 $f2, twelveFloat # $f2 = -12.0 lwc1 $f2, 24($1) mul.s $f8, $f1, $f1 ; 47: mul.s $f8, $f1, $f1 # f8 = B^2 mul.s $f9, $f0, $f2 ; 49: mul.s $f9, $f0, $f2 # f9 = A*C lui $1, 4097 ; 51: l.s $f5, four lwc1 $f5, 32($1) cvt.s.w $f5, $f5 ; 53: cvt.s.w $f5, $f5 # f5 = 4.0 mul.s $f9, $f9, $f5 ; 55: mul.s $f9, $f9, $f5 # f9 = 4*A*C c.lt.s $f8, $f9 ; 61: c.lt.s $f8, $f9 # B^2 < 4*A*C? bc1f0 8 [YesSolution-0x00400058]; 63: bc1f YesSolution # if not, compute solutions j 0x004000cc [notSolution] ; 65: j notSolution # else, not solutions neg.s $f9, $f9 ; 73: neg.s $f9, $f9 # -4*A*C add.s $f9, $f8, $f9 ; 75: add.s $f9, $f8, $f9 # B^2 - 4*A*C sqrt.s $f9, $f9 ; 77: sqrt.s $f9, $f9 # f9 = sqrt(B^2 - 4*A*C) mov.s $f7, $f1 ; 79: mov.s $f7, $f1 neg.s $f7, $f7 ; 81: neg.s $f7, $f7 # f7 = -B lui $1, 4097 ; 83: l.s $f5, two lwc1 $f5, 28($1) cvt.s.w $f5, $f5 ; 85: cvt.s.w $f5, $f5 mul.s $f8, $f5, $f0 ; 87: mul.s $f8, $f5, $f0 # f8 = 2*A add.s $f10, $f7, $f9 ; 89: add.s $f10, $f7, $f9 div.s $f10, $f10, $f8 ; 91: div.s $f10, $f10, $f8 # f10 = x1 neg.s $f9, $f9 ; 93: neg.s $f9, $f9 add.s $f11, $f7, $f9 ; 95: add.s $f11, $f7, $f9 div.s $f11, $f11, $f8 ; 97: div.s $f11, $f11, $f8 # f11 = x2 ori $2, $0, 4 ; 101: li $v0, 4 # printing string lui $4, 4097 [Rezult1Prompt] ; 103: la $a0,Rezult1Prompt # "\nx1 = " syscall ; 105: syscall ori $2, $0, 2 ; 109: li $v0, 2 # system call code for printing a float mov.s $f12, $f10 ; 111: mov.s $f12,$f10 syscall ; 113: syscall ori $2, $0, 4 ; 119: li $v0, 4 # printing a string lui $1, 4097 [Rezult2Prompt] ; 121: la $a0,Rezult2Prompt ori $4, $1, 7 [Rezult2Prompt] syscall ; 123: syscall ori $2, $0, 2 ; 127: li $v0, 2 # system call code for printing a float mov.s $f12, $f11 ; 129: mov.s $f12,$f11 syscall ; 131: syscall ori $2, $0, 10 ; 139: li $v0, 10 # finished .. stop .. return syscall ; 141: syscall # make the syscall 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 eret