Static Variables Declared in MASM Routines Called from C

ID: Q76504


The information in this article applies to:
  • Microsoft Macro Assembler for MS-DOS and OS/2, versions 5.0, 5.10, 6.0, 6.0a, 6.0b


SUMMARY

The programs below demonstrate how a variable declared in a Microsoft Macro Assembler (MASM) subprogram will keep its value between calls from a C main program.


MORE INFORMATION

Link the two programs below with the following command:


   link cmain masmsub,,, /nod llibce; 

Sample Code #1


// Filename: CMAIN.C
// Compile options needed: /c /AL

#include <stdio.h>

extern int far MasmSub () ;

main ()
{
   int i ;
   for (i = 1; i < 11; ++i)          // Call the MASM subprogram 10
   {                                 // times, and its return value
      printf ("%d\n", MasmSub()) ;   // will be incremented by 1 each
   }                                 // time.
} 

Sample Code #2


; Filename: MASMSUB.ASM
; Assemble options needed: /mx /ml

.MODEL LARGE, C
.DATA
   var DW 0        ; This variable will keeps its value between calls.
.CODE
PUBLIC MasmSub
MasmSub PROC FAR
   INC var
   MOV AX, var     ; Since the function returns an int, C will get the
   RET             ; return value from AX.
MasmSub ENDP
        END 

Additional query words: kbinf 5.00 5.10 6.00

Keywords :
Version : MS-DOS:5.0,5.10,6.0,6.0a,6.0b
Platform : MS-DOS
Issue type :


Last Reviewed: January 4, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.