INF: Static Variables Declared in MASM Routines Called from C

ID Number: Q76504

5.00 5.10 6.00 | 5.00 5.10 6.00

MS-DOS | OS/2

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 reference words: 5.00 5.10 6.00