Microsoft KB Archive/39520

= Passing an Integer from C to MASM, Returning a Double =

Article ID: 39520

Article Last Modified on 10/16/2003

-

APPLIES TO


 * Microsoft Macro Assembler 5.1 Standard Edition
 * Microsoft Macro Assembler 6.0 Standard Edition
 * Microsoft Macro Assembler 6.0a
 * Microsoft Macro Assembler 6.0b

-



This article was previously published under Q39520



SUMMARY
The following MASM program shows how to receive an integer from a C program, then pass the value back to the C program as a double. Note: This routine was composed for the large-memory model and assumes that a coprocessor exists on the system.



MORE INFORMATION
Below is the C program that calls the MASM routine. It should be compiled for large-memory model and either 8087 or emulator-math library.

Also shown is the MASM routine. The main piece to this program is the FILD instruction that transforms the integer to a floating-point real, then pushes the value on the co-processor stack. The other point is to obtain the segment and offset of the __fac variable. A value requiring more than 4 bytes cannot be stored in the DX and AX registers for return, so a double is returned by storing its address in DX:AX.

Sample Code
/* Compile options needed: /AL /FPi87 (or /FPi)


 * 1) include 

extern double abc( int x );

void main {  int x;   double y;

x = 7; y = abc( x ); printf( &quot;%The value of y is %lf.\n&quot;, y ); }

--


 * Assemble options needed: /Mx

.MODEL LARGE,C   ; so Masm will use C naming conventions .DATA .CODE EXTRN _fac:QWORD         ; __fac is the global variable used by C                          ; for storing floating point accumulations PUBLIC abc abc    PROC    FAR push   bp        mov     bp,sp fild   WORD PTR [bp+6] mov    dx,SEG _fac mov    es,dx fstp   QWORD PTR es:_fac  ; this pops the value off of        mov     ax,OFFSET _fac     ; the co-processor and puts it        fwait                      ; in __fac mov    sp,bp pop    bp        ret

abc    ENDP END Program Output: The value of y is 7.000000.

Additional query words: kbinf 5.10 6.00 6.00a 6.00b

Keywords: KB39520

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.