Microsoft KB Archive/90311

= MASM 6.1 General Questions & Answers FastTips (Complete) =

ID: Q90311

6.10 MS-DOS kbref kbappnote

The information in this article applies to:


 * Microsoft Macro Assembler for MS-DOS, version 6.1

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.

1. Q. Why does fatal error DX1140 occur when I try to run Microsoft
 * INFORMATION PROVIDED IN THIS DOCUMENT AND ANY SOFTWARE THAT MAY   |
 * ACCOMPANY THIS DOCUMENT (collectively referred to as an           |
 * Application Note) IS PROVIDED &quot;AS IS&quot; 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.                          |
 * is a trademark of Microsoft Corporation.                          |

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 &quot;L1101 -

Invalid Object Module&quot; errors?

A. Determine which version of the Microsoft LINK utility you are using. Type &quot;link&quot; 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 &quot;system integrity&quot; 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 &quot;system integrity&quot; 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 - &quot;spawn failed: no space on

device&quot; error?

A. NMAKE produces a U1045 - &quot;spawn failed: no space on device&quot; 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 - &quot;unresolved

external&quot; 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 &quot;C&quot; linkage. For further information about linking a C++ module with a Microsoft Macro Assembler module, refer to Chapter 12, &quot;Mixed-Language Programming,&quot; of the Microsoft Macro Assembler &quot;Programmer's Guide&quot; and to page 36 of the Microsoft &quot;C++ Language Reference&quot; 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