FIX: MASM 6.0 May Generate Incorrect Code for IMUL Instruction

ID: Q72708


The information in this article applies to:
  • Microsoft Macro Assembler for MS-DOS, version 6.0
  • Microsoft Macro Assembler for OS/2, version 6.0


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 :
Version : :6.0
Platform :
Issue type :


Last Reviewed: January 13, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.