Adding floating point/double numbers in assembly

17,624

Solution 1

I haven't done x87 assembly in a decade, but it should be something like:

fld num1   ; load num1 and push it onto the fpu stack
fld num2   ; load num2 and push it onto the fpu stack
faddp      ; pop two numbers, add them, push sum on the stack
fstp res   ; pop sum from the stack and store it in res

Solution 2

The instruction you probably want is ADDSD, but I don't know for sure.

Here's the link to Intel's instruction set manuals. http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html/

They used to mail you hard copies for free, but it looks like that's no longer true.

Solution 3

You need a different set of instructions to manipulate floating point numbers. Here's an introduction that should help: x86 Assembly: Floating Point

Solution 4

Try this:

_asm{

movq xmm0,[num1]
addpd xmm0, [num2];
movq [res],xmm0
// sse2
 }
Share:
17,624
scrat101
Author by

scrat101

Updated on August 05, 2022

Comments

  • scrat101
    scrat101 over 1 year

    I am trying to experiment with inline assembly, and I am trying to add decimal numbers (no, NOT integers) in inline assembly. Issue is, when I call the following function:

    inline double ADD(double num1, double num2) {
      double res;
    _asm{
    
        push eax; push the former state of eax onto stack
        mov eax, num1;
        add eax, num2;
        mov res, eax;
        pop eax; restore the former state of eax now that we are done   
         }  return res;}
    

    The compiler complains of improper operand size at the inline assembly (ALL lines of assembly excluding the push and pop instruction lines). So I have to change to an integer type, such as unsigned long, and then it works, but of course only supports integer types; decimal results are rounded.

    Is there any way to add in assembly that allows for decimal results like 8.4?