Q39374: FIX: MASM 5.1 Generates Incorrect Listing for RET Statement
Article: Q39374
Product(s): Microsoft Macro Assembler
Version(s): 5.1,5.1a
Operating System(s):
Keyword(s):
Last Modified: 06-MAY-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Macro Assembler (MASM), versions 5.1, 5.1a
-------------------------------------------------------------------------------
SYMPTOMS
========
When the /LA option is used to show the instructions generated for the RET
instruction, where the RET statment has a label on the same line and is
contained in a PROC that has a USES clause, and/or parameters, the listing shows
the original source line, including the label, after the POP instructions which
are inserted by MASM. Running the program under CodeView, checking the object
code generated for jumps, and checking the value of the label on the RET in the
symbol listing at the end of the program all confirm that MASM is producing
correct code. It is just the listing that is incorrect.
RESOLUTION
==========
To produce a correct listing, change the code so that the label and the RET are
not on the same line of source. In other words, change
JUMPHERE: RET
to the following:
" JUMPHERE: RET " (without the quotation marks)
and the statement will appear in the correct location in the listing file.
STATUS
======
Microsoft has confirmed this to be a problem in MASM version 5.10. This problem
was corrected in MASM version 6.00.
MORE INFORMATION
================
The sample code below illustrates the problem. Note: The the first three lines
are necessary for using the "USES" directive.
Sample Code:
------------
; Assemble options needed: none
dosseg
.model small,c
.code
myproc proc uses si di bp
jz there
there: ret
myproc endp
end
........................................................................
; Incorrect listing file
1 dosseg
2 .model small,c
3 assume cs:@code,ds:@data,ss:@data
4 .code
5 0000 _TEXT segment 'CODE'
6 0000 myproc proc uses si di bp
7 0000 56 push SI
8 0001 57 push DI
9 0002 55 push BP
10 0003 74 00 jz there
11 0005 5D pop BP
12 0006 5F pop DI
13 0007 5E pop SI
14 0008 C3 there: ret
15 0009 myproc endp
16 end
17 0009 @CurSeg ends
Additional query words: 5.10 5.10a buglist5.10 buglist5.10a fixlist6.00
======================================================================
Keywords :
Technology : kbMASMsearch kbAudDeveloper kbMASM510 kbMASM510a
Version : :5.1,5.1a
Solution Type : kbfix
=============================================================================
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.