ID Number: Q78862
6.00 | 6.00
MS-DOS | OS/2
buglist6.00 fixlist6.00a
Summary:
PROBLEM ID: MSM9112001
SYMPTOMS
In the Microsoft Macro Assembler (MASM) version 6.0, incorrect code
is generated for instructions, such as the following, using the
operand [eax][eax]:
lea edi, [eax][eax]
mov edi, [eax][eax]
CAUSE
The operand [eax][eax] is available only when using the .386 or
.486 directives.
RESOLUTION
A workaround for this problem is to embed the opcode for the
instruction directly in the code. The sample code below demonstrates
this method.
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 edi, [eax][eax] is encoded as 8D 3C 3A. However, the
code actually placed into the executable is 8D 3C. The correct code in
the case of lea edi, [eax][eax] is 8D 3C 00.
Sample Code
-----------
; Assembler options needed: none
.386
.MODEL SMALL
CODE32 SEGMENT DWORD PUBLIC USE32 'CODE'
ASSUME CS:CODE32
main PROC
lea edi, [eax][eax] ; Replace this by BYTE 8Dh, 3Ch, 00h
; since the code generated by it is
; 8D 3C 3A, which is incorrect.
mov edi, [eax][eax] ; Replace this by BYTE 8Bh, 3Ch, 00h
; since the code generated by it is
; 8B 3C 3A, which is incorrect.
ret
main ENDP
CODE32 ENDS
END main
Additional reference words: 6.00