Microsoft KB Archive/103725

= How To Pass Common C Types to MASM by Reference =

Article ID: 103725

Article Last Modified on 7/1/2004

-

APPLIES TO


 * Microsoft C Professional Development System 6.0a
 * Microsoft C Professional Development System 6.0a
 * Microsoft C/C++ Professional Development System 7.0
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q103725





SUMMARY
The following sample code demonstrates how to pass variables of type char, short, and long from a Microsoft C program to a Microsoft Macro Assembler (MASM) program by reference.



MORE INFORMATION
The following sample includes one C file and three different assembly files. The three assembly files demonstrate how to pass variables by reference in small and large model for MS-DOS and in flat model for Windows NT. Link only the appropriate assembly module to the C module.

Note that MASM 6.1 or later and the C/C++ version 8.0 32-bit compiler that ships with Visual C++, 32-bit Edition, are required to build the flat model Windows NT version.

Sample Code
// Filename: CMAIN.C  // Compile options needed: /c (and /AL for large model)

#include   extern void  MasmSub (char *, short *, long *);

char charvar = 'a'; short shortvar = 1; long longvar = 32768L;

void main (void) {     printf ("%c %d %ld\n", charvar, shortvar, longvar); MasmSub (&charvar, &shortvar, &longvar); printf ("%c %d %ld", charvar, shortvar, longvar); }

Sample Code for MS-DOS Small Model Version
; Filename: MASMSUB.ASM ; Assemble options needed for MASM: /MX ; Assemble options needed for ML: /c /Cx

.MODEL small, C     ;.MODEL ... C tells the assembler that .286               ; parameters are pushed from right to left. .CODE

MasmSub PROC uses si, \

pchar:PTR, \ pshort:PTR, \ plong:PTR

mov si, pchar     ;Load SI with the address of the char variable. mov BYTE PTR [si], "z" mov si, pshort     ;Load SI with the address of the short variable. add WORD PTR [si], 9 mov si, plong     ;Load SI with the address of the long variable. add WORD PTR [si], 1 ;Increment the low word of the long variable ;by 1. adc WORD PTR [si+2],0 ;Increment the high word. ret

MasmSub ENDP END

Sample Code for MS-DOS Large Model Version
; Filename: MASMSUB.ASM ; Assemble options needed for MASM: /MX ; Assemble options needed for ML: /c /Cx

.MODEL large, C     ;.MODEL ... C tells the assembler that .286               ; parameters are pushed from right to left. .CODE

MasmSub PROC uses es si, \

pchar:PTR, \ pshort:PTR, \ plong:PTR

les si, pchar     ;Load ES:SI with the address of the char variable. mov BYTE PTR es:[si], "z" les si, pshort     ;Load ES:SI with the address of the short ;variable. add WORD PTR es:[si], 9 les si, plong     ;Load ES:SI with the address of the long variable. add WORD PTR [si], 1 ;Increment the low word of the long variable ;by 1. adc WORD PTR [si+2],0 ;Increment the high word. ret

MasmSub ENDP END

Sample Code for Windows NT Flat Model Version
; Filename: MASMSUB.ASM ; Assemble options needed for ML: /c /Cx /coff

.386               ;.MODEL ... C tells the assembler that .MODEL flat, C     ; parameters are pushed from right to left. .CODE

MasmSub PROC uses esi, \

pchar:PTR, \ pshort:PTR, \ plong:PTR

mov esi, pchar     ;Load ESI with the address of the char variable. mov BYTE PTR [esi], "z" mov esi, pshort     ;Load ESI with the address of the short ;variable. add WORD PTR [esi], 9 mov esi, plong     ;Load ESI with the address of the long variable. inc DWORD PTR [esi]     ;Increment the long variable by 1. ret

MasmSub ENDP END

The following is the output of the program: a 1 32768 z 10 32769

Additional query words: 8.00 9.00 mixed language

Keywords: kbhowto kblangc kbcode KB103725

-

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

© Microsoft Corporation. All rights reserved.