ID Number: Q30787
5.10 | 5.10
MS-DOS | OS/2
Summary:
The following information is from the Microsoft Macro Assembler
Version 5.10 MIXED.DOC file.
More Information:
Converting Mixed-Language Source Files
Rather than use the old macros, you may want to convert your source
files to use the built-in mixed language features of MASM 5.10. The
conversion is straightforward and can be done easily with a text
editor.
The following changes can be made to source files that use macros
from the 5.0 MIXED.INC. The source file POWER2.ASM on the MASM 5.10
distribution disk is an example of a converted source file. You can
compare it with the POWER2.ASM supplied with MASM 5.00.
You must define a memory model argument and a language argument
to the .MODEL directive to use the new mixed-language features of MASM
5.10. You can do this within the source file:
.MODEL small, c
Alternately, you can pass the arguments in from the command line
using /D. In MASM 5.00, you had to use the setModel macro to receive a
model argument passed on the command line. You only needed to define
the language symbol "cLang" for C; no definition was needed for other
languages.
The 5.00 source line to accept the argument would be:
setModel
For MASM 5.10, change to:
% .MODEL model,lang
Notice that the expression operator (%) is required so that MASM
can evaluate text arguments passed from the command line.
The 5.00 command line to define C small model would be:
MASM /MX /Dmodel=small /DcLang power2;
For MASM 5.1, change this to:
MASM /MX /Dmodel=small /Dlang=C power2;
Replace references to the hProc macro with the PROC directive.
Remember, new features of the PROC directive only work when a language
argument is given for the .MODEL directive. The 5.00 macro syntax was:
hProc <name [NEAR|FAR]> [,<USES reglist>] [,arglist]
The 5.10 syntax is:
name PROC [NEAR|FAR] [,USES reglist] [,arglist]
The syntax for each MASM 5.00 argument in the arglist was
argument[:[NEAR|FAR] type]
where the type could be BYTE, WORD, DWORD, FWORD, QWORD, TBYTE, or PTR
(to indicate that the variable is a pointer).
The syntax for each MASM 5.10 argument is:
argument[:[[NEAR|FAR] PTR] type]
where the type can be BYTE, WORD, DWORD, FWORD, QWORD, TBYTE, or a
structure type. Note that structure types can now be given. Also, PTR
is part of the syntax rather than a type. If PTR is given with a type,
then it means that the variable is a pointer to a variable of the
given type. This information makes no difference in what MASM
assembles, but it can be used by the CodeView debugger.
For example, consider the following MASM 5.00 source line:
hProc <doTask FAR>, <USES si di>, count:BYTE, array:PTR, number
It should be changed to the following for MASM 5.10:
doTask PROC FAR USES si di, count:BYTE, array:PTR WORD, number
Notice that the array is now declared as pointer to a word (or an
array of words). In the 5.00 syntax it was simply a pointer to an
object of undefined size.
o Replace references to the hLocal macro with the LOCAL directive.
The syntax for the 5.00 hLocal macro was:
hLocal varlist
The MASM 5.1 syntax is:
LOCAL varlist
The syntax for each 5.00 variable was:
variable[:[NEAR|FAR] type]
The syntax for each 5.10 variable is:
variable[[count]][:[[NEAR|FAR] PTR] type]
The difference is the same as the difference for arguments to the
PROC directive. In addition, you can allocate local arrays by
specifying a count (in brackets) following the variable name. For
example:
LOCAL work[20]:WORD, string:PTR BYTE
This allocates a local array of 20 words called "work" and a
pointer to byte (called "string").
o Replace references to the hRet macro with the RET instruction.
o Replace references to the hEndp macro with the ENDP directive
preceded by the procedure name. For example, change
hEndp
to
procname ENDP
Under MASM 5.10, labels within a procedure are local to the
procedure if the language argument is given for the .MODEL directive.
For example, if you use the label "exit:" in one procedure, you can
use it again in another procedure. A label inside a procedure can be
made global to the source file by putting two colons after it
(example, "glabel::"). Under MASM 5.00 all labels were global to the
source file.
Note that the 5.00 macros did not automatically handle 80386
features such as 32-bit pointers. The 5.10 features do. For example, if
you use the .386 directive before the .MODEL directive to enable
32-bit segments, near pointers declared with PTR will be 32 bits wide
and far pointers will be 48 bits wide.