FIX: Incorrect Code Generated If Operand Is [esp][esp]

ID: Q79159


The information in this article applies to:
  • Microsoft Macro Assembler for MS-DOS, version 6.0
  • Microsoft Macro Assembler for OS/2, version 6.0


SYMPTOMS

In the Microsoft Macro Assembler (MASM) version 6.0, incorrect code is generated for instructions using operand [esp][esp], such as the following instructions:

lea esi, [esp][esp]
mov esi, [esp][esp]


CAUSE

The operand [esp][esp] is not supported in the Intel instruction set. An error such as:

error A2029 : multiple base registers not allowed
should have been generated by the assembler.


STATUS

Microsoft has confirmed this to be a problem in MASM version 6.0. This problem was corrected in MASM version 6.0a.


MORE INFORMATION

A listing file from the following program will show that the instruction lea esi, [esp][esp] is encoded as 8D 34 24. This is incorrect.

Sample Code


; Assembler options needed: none

.386
.MODEL flat
.STACK 4096

CODE32 SEGMENT PUBLIC USE32
main PROC near
    lea esi, [esp][esp]      ; An error A2029 should be generated.
    ret
main ENDP
CODE32 ENDS

END 

Additional query words: 6.00 buglist6.00 fixlist6.00a

Keywords :
Version : :6.0
Platform :
Issue type :


Last Reviewed: January 5, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.