Microsoft KB Archive/40292

Macro Definition Problem in mixed.inc, pushReg ID Number: Q40292

5.00 MS-DOS buglist5.00

Summary:

The include file, mixed.inc, in Microsoft Macro Assembler Version 5.00 provides the definitions of the high-level-language interface macros.

The macro “pushReg” is defined in the same file and used internally by other macros such as “hProc” to save registers during the initialization of a procedure. “pushReg” is defined to push the maximum of six registers. When “hProc” is called in an assembly program with the number of registers to be saved is more than six, the assembled code only saves the first six registers.

More Information:

The following is an example:

INCLUDE mixed.inc .model small .data .code hProc _proc1,  ; only ax, bx, cx, dx, si, di are pushed onto stack. …… hRet ; only pop six registers. hEndp end

To save more than six registers when initializing a procedure, the include file mixed.inc should be modified as follows.

The following is the original version:

….. pushReg macro use,b,c,d,e,f,g

regPushed equ <> irp reg,  …..

The following is the modified version:

….. pushReg macro use,b,c,d,e,f,g,h,i,j,k,l,m

regPushed equ <> irp reg,  ……

The modified macro “pushReg” can push the maximum of 11 registers. All the pushed registers will be popped upon exit from the procedure.

More Information:

The include file mixed.inc is in the directory “mixed” in disk 1 of the Microsoft Macro Assembler Version 5.00. The file mixed.doc in the same directory contains specific information for using the High-Level-Language Interface Macros.

There are considerable changes on those macros from MASM Version 5.00 to 5.10. Please refer to the file mixed.doc contained within the MASM Version 5.10 package for more specific information.