ID: Q90311
6.10 MS-DOS kbref kbappnote
The information in this article applies to:
Summary:
Microsoft(R) Product Support Services Application Note (Text File)
HA0620: MASM 6.1 QUESTIONS AND ANSWERS
Revision Date: 2/93
No Disk Included
The following information applies to Microsoft Macro Assembler,
version 6.1.
--------------------------------------------------------------------
| INFORMATION PROVIDED IN THIS DOCUMENT AND ANY SOFTWARE THAT MAY |
| ACCOMPANY THIS DOCUMENT (collectively referred to as an |
| Application Note) IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY |
| KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO |
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A |
| PARTICULAR PURPOSE. The user assumes the entire risk as to the |
| accuracy and the use of this Application Note. This Application |
| Note may be copied and distributed subject to the following |
| conditions: 1) All text must be copied without modification and |
| all pages must be included; 2) If software is included, all files |
| on the disk(s) must be copied without modification [the MS-DOS(R) |
| utility DISKCOPY is appropriate for this purpose]; 3) All |
| components of this Application Note must be distributed together; |
| and 4) This Application Note may not be distributed for profit. |
| |
| Copyright 1993 Microsoft Corporation. All Rights Reserved. |
| Microsoft and MS-DOS are registered trademarks and Windows |
| is a trademark of Microsoft Corporation. |
--------------------------------------------------------------------
1. Q. Why does fatal error DX1140 occur when I try to run Microsoft
Macro Assembler version 6.1 with the Microsoft Windows(TM)
operating system?
A. This error occurs because the SYSTEM.INI file in the Windows
directory (by default, C:\WINDOWS) fails to load some needed
device. The Macro Assembler Setup program does not modify the
Windows SYSTEM.INI file. Instead, Setup places the required
changes into the NEW-SYS.INI file in the MASM61\BIN directory.
Edit the SYSTEM.INI file located in the Windows directory to
add the contents of the NEW-SYS.INI file. In a default
installation, this procedure adds the following lines to the
[386enh] section of the SYSTEM.INI file:
device=C:\MASM61\BIN\DOSXNT.386
device=C:\MASM61\BIN\CVW1.386
device=C:\MASM61\BIN\VMB.386
2. Q. What can I do when the LINK utility always gives me "L1101 -
Invalid Object Module" errors?
A. Determine which version of the Microsoft LINK utility you are
using. Type "link" at the MS-DOS prompt and look at the banner
message displayed by the linker. If you are using Microsoft
Macro Assembler version 6.1, you should use LINK version 5.31
or greater. If you are using an earlier version of the linker,
check the directories specified in the MS-DOS PATH environment
variable for other files named LINK.EXE. An older version of
the LINK utility cannot recognize an object module built by
Microsoft Macro Assembler version 6.1.
3. Q. Why do random "system integrity" errors occur when I try to run
Microsoft Programmer's WorkBench with the Windows operating
system?
A. Some terminate-and-stay-resident (TSR) applications cause
"system integrity" errors when they run with Programmer's
WorkBench. Edit your AUTOEXEC.BAT and CONFIG.SYS files to
remove all TSR programs and special device drivers from your
system. To isolate the problem, load one TSR program at a time
until the errors recur.
4. Q. Why does CodeView tell me that my file has no symbolic
information even though I requested symbols when I compiled and
linked my application using Microsoft Macro Assembler version
6.1?
A. Versions of CodeView prior to version 4.0 do not understand the
CodeView 4.0 information produced by Microsoft Macro Assembler
version 6.1. You should use CodeView version 4.01, which is
distributed with Microsoft Macro Assembler version 6.1. If you
are using the correct version of CodeView, the problem may be
caused by an incorrect version of LINK or CVPACK that creates
incorrect debugging information. Use LINK version 5.31 and
CVPACK version 4.01 with Microsoft Macro Assembler version 6.1.
When you link your program, each utility displays a banner
message that shows its version number. If you are using the
correct version of the utilities and you specify full segment
directives in your assembly source code, you may need to
specify the class 'CODE' for your code segments. If your code
segments do not have the class 'CODE', the assembly source file
will not display when you enter CodeView.
5. Q. Why does NMAKE display a U1045 - "spawn failed: no space on
device" error?
A. NMAKE produces a U1045 - "spawn failed: no space on device"
error when inadequate expanded or extended memory is available
or when inadequate disk space is free in the directory
specified by the MS-DOS TMP environment variable. When this
error occurs, close one or more applications to free more
memory or delete unnecessary files to free disk space. You may
also want to invoke NMAKE with the /M option to instruct NMAKE
to swap itself to disk during a build.
6. Q. Why do errors occur when I use Microsoft Macro Assembler to
assemble source files that include CMACROS.INC?
A. Microsoft has distributed many versions of CMACROS.INC. Most of
these versions were distributed with assembly source files that
relied on the macros in CMACROS.INC. However, these versions of
CMACROS.INC were written to work with versions of Microsoft
Macro Assembler prior to version 6.0. Because Microsoft Macro
Assembler versions 6.0 and later more strictly check assembly
language and macro syntax, they detect errors in older versions
of the CMACROS.INC file that are not detected by Microsoft
Macro Assembler version 5.1. To address this situation,
Microsoft Macro Assembler versions 6.0 and later include a
version of CMACROS.INC with the assembler. If you use Microsoft
Macro Assembler version 6.0 or later, you should use the
version of the CMACROS.INC file distributed with your
assembler. Microsoft continues to distribute older versions of
the CMACROS.INC file with assembly source files designed for
use with versions of Microsoft Macro Assembler prior to version
6.0.
7. Q. When I link my program, I receive an L2029 - "unresolved
external" error. How can I call an assembly language routine
from a C++ program?
A. A C++ module can access Microsoft Macro Assembler procedures
and data only if the procedures and data are previously
declared with "C" linkage. For further information about
linking a C++ module with a Microsoft Macro Assembler module,
refer to Chapter 12, "Mixed-Language Programming," of the
Microsoft Macro Assembler "Programmer's Guide" and to page 36
of the Microsoft "C++ Language Reference" manual provided with
Microsoft C/C++ version 7.0.
8. Q. Why does my program hang or give an illegal instruction error
when the source code includes the .386, .386P, .486, or .486P
directives?
A. The 386 and 486 processors can operate in two modes: 32-bit
operations as the default or 16-bit operations as the default.
In either mode, a prefix byte at the beginning of an
instruction, either 66h or 67h, instructs the processor to
treat the instruction as a nondefault operation. For example,
if the processor executes a prefix byte while in a 16-bit
segment, it executes the instruction as a 32-bit operation.
When Microsoft Macro Assembler processes a file that uses full
segment declarations, it assumes that the default operations
are 32-bit. To change this assumption, specify a USE16 modifier
for the SEGMENT directive. When the assembler processes a file
that uses simplified segment declarations, it assumes that the
default operations are 32-bit if the source includes a .386,
.386P, .486, or .486P directive before the .MODEL directive. If
the processor directive occurs after the .MODEL directive, the
assembler assumes that 16-bit operations are the default.
9. Q. Why can't I use the SEGMENT AT and ORG directives to place code
at an absolute address?
A. The Microsoft LINK utility provided with Microsoft Macro
Assembler is designed to generate relocatable programs that can
be run with the MS-DOS or Windows operating systems. LINK is
not designed to generate absolute addressable code. Other
companies sell link and locate tools to generate this type of
code.
You can use the ORG directive to specify a relative offset to
the first items in a segment (for example, 100h for code in a
.COM file). Use the SEGMENT AT directive to access memory
that's already in the computer at an absolute address, such as
the ROM BIOS.
Additional reference words: 6.10 ivrfax fasttips
KBCategory: kbref kbappnote
KBSubcategory:
Last Reviewed: July 31, 1997