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

Article: Q79159
Product(s): Microsoft Macro Assembler
Version(s): 6.0
Operating System(s): 
Keyword(s): 
Last Modified: 04-MAY-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Macro Assembler (MASM), 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          :  
Technology        : kbMASMsearch kbAudDeveloper kbMASM600
Version           : :6.0
Solution Type     : kbfix

=============================================================================