FIX: MASM 5.1 Generates Incorrect Listing for RET Statement

Last reviewed: September 11, 1997
Article ID: Q39374
5.10 5.10a | 5.10 5.10a
MS-DOS     | OS/2
kbtool kbfixlist kbbuglist

The information in this article applies to:

  • Microsoft Macro Assembler for MS-DOS and OS/2, versions 5.1 and 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

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 reference words: 5.10 5.10a buglist5.10 buglist5.10a fixlist6.00
KBCategory: kbtool kbfixlist kbbuglist
KBSubCategory: MLIss
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.

Last reviewed: September 11, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.