The X87 Floating Point Unit (FPU) for the IA32 Instruction Set The 8 floating point registers %st(0) , ... , %st(7) form a stack, with the most recent entry in %st(0). Entries "older" than 8 disappear. The floating point processor has several condition codes: PE: Precision exception UE: Underflow OE: Overflow ZE: Divide-by-zero DE: Result unnormalized IE: Invalid operation SF: Stack fault ES: Error / no error C0 - C3: comparison of two floating point numbers Floating point instructions used in main.s and mult2.s: faddp Replace %st(0) by %st(0) + %st(1) and both addends are gone. flds Src Push Mem[Src] onto the stack. flsz Push 0 onto the stack. fmuls Src Replace %st(0) by %st(0) * M[Src]. fnstsw Src Save the floating point flags in Src. fstpl Src Pop %st(1) to M[Src] (64 bits) fstps Src Pop %st(0) to M[Src] (32 bits) fucompp Compare %st(0) and %st(1) to set condition codes, and don't report error if one is NaN. fxch %st(i) Swap %st(0) and %st(i). Other sample floating point instructions: fadds Src Replace %st(0) by %st(0) + M[Src]. There are also floating point sin, cos, and sqrt instructions. Other IA32 instructions used in those files: leave Abbreviation for "movl %ebp, %esp" and "pop %ebp" which sets stack pointer to beginning of frame and restores the saved %edp from the top of the stack sahf Store flags. seta Src Src = ~CF & ~ZF. sete Src Src = ZF. testb Src,Dest Set condition codes for Src & Dest (low-order byte) Source: Assembly Language Programming In Gnu/Linux For Ia32 Architectures by Rajat Moona X86-64: In the X86-64 extension to IA32: -- There are still 8 registers in the floating point stack. -- There is an additional set of 16 128-bit registers that can be used for SIMD instructions. http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions