Microsoft KB Archive/72708

= FIX: MASM 6.0 May Generate Incorrect Code for IMUL Instruction =

Article ID: 72708

Article Last Modified on 10/30/2003

-

APPLIES TO


 * Microsoft Macro Assembler 6.0 Standard Edition

-



This article was previously published under Q72708



SYMPTOMS
The 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.



CAUSE
The 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).



RESOLUTION
To work around this problem, qualify the constant as a word. For example: IMUL di,WORD PTR 255         ; This works.



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
The 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 21h main ENDP END main

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

Keywords: kbfix KB72708

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.