FIX: MASM 6.0 May Generate Incorrect Code for IMUL InstructionLast reviewed: September 11, 1997Article ID: Q72708 |
6.00 | 6.00
MS-DOS | OS/2
kbtool kbfixlist kbbuglist
The information in this article applies to:
SYMPTOMSThe Microsoft Macro Assembler (MASM) version 6.0 will generate incorrect code when the IMUL instruction contains an operand that is a constant value from 128 to 255. No errors or warnings are displayed while assembling.
CAUSEThe assembler incorrectly treats the constant as an 8-bit signed value rather than a signed word. In converting from a signed byte to a signed word, it extends the sign bit through the upper byte. Thus, 255 (0ffh) becomes -1 (0ffffh).
RESOLUTIONTo work around this problem, qualify the constant as a word. For example:
IMUL di,WORD PTR 255 ; This works. STATUSMicrosoft has confirmed this to be a problem in MASM version 6.0. This problem was corrected in MASM version 6.0a.
MORE INFORMATIONThe sample code below demonstrates this problem. The result of the IMUL instruction is -1.
Sample Code; Assemble options needed: none .MODEL small .286 .CODE main PROC mov di, 1 imul di, 255; imul di, WORD PTR 255 ; <--- This works.
mov ax, 4C00h int 21hmain ENDP END main
|
Additional reference words: 6.00 buglist6.00 fixlist6.00a
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |