layout | title | permalink |
---|---|---|
page |
Q78862: FIX: Incorrect Code Generated If Operand Is [eax][eax] |
/kb/078/Q78862/ |
{% raw %}
Article: Q78862
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, such as the following, using the operand [eax][eax]:
lea edi, [eax][eax]
mov edi, [eax][eax]
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. Note that the operand [eax][eax] is available only when using the .386
or .486 directives.
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 query words: 6.00 buglist6.00 fixlist6.00a
======================================================================
Keywords :
Technology : kbMASMsearch kbAudDeveloper kbMASM600
Version : :6.0
Solution Type : kbfix
=============================================================================
{% endraw %}