下面的代码示例演示如何通过引用传递变量的类型字符短,和长从 Microsoft C 的某个程序,Microsoft 宏汇编程序 (MASM) 程序。
下面的示例包括一个 C 文件和 $ 三个不同的程序集文件。三个程序集文件演示了如何通过变量引用来传递在小型和大型模型中的 MS-DOS 和 Windows NT 链接仅在适当的程序集模块的平面模型中以 C 模块。
请注意若要生成平面模型 Windows NT 版本需要 MASM 6.1 或更高版本和 C/c + + 版本 8.0 32 位编译器随 Visual c + +,32 位版。
// Filename: CMAIN.C
// Compile options needed: /c (and /AL for large model)
#include <stdio.h>
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);
}
; 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