Assembler language is no rocket science, you can learn it by yourself. Here is an accelerated course: Your processor has registers (int and float), it performs arithmetic & logic instructions (taking two or three operands); operands are in registers or taken from/to memory through simple address computation; memory holds a special area called the stack (lifo); you can "label" the instructions and jump to them, unconditionally or based on the result of the previous instruction (sign, overflow); there are special jumps called "calls" from which you can jump back later.
Solve:
load f0, K[0] // Read coefficient A
load f1, K[1] // Read coefficient B
load f2, K[2] // Read coefficient C
load f3, f1 // Copy B
mul f3, f3 // Square it
mul f2, f0 // Multiply C by A (C overwritten)
mul f2, 4 // 4.A.C
sub f3, f2 // B.B - 4.A.C
jmp neg, Done // No root
push f3 // Push the argument onto the stack
call Sqrt // Call the square root function
pop f3 // Get the return value, Sqrt(B.B - 4.A.C)
sub f3, f1 // - B + Sqrt(D)
mul f0, 2 // 2.A
div f3, f0 // (- B + Sqrt(D)) / 2.A
store X, f3 // Write the root
Done:
ret // Return control to the caller
If you were able to follow that code, you can move on to the Discrete Mathematics course, for which no accelerated version is available. :)