FIX: Warning A4057 Generated Instead of Error A2019

ID: Q39373


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


SYMPTOMS

The code below is correctly flagged as an error in the Microsoft Macro Assembler (MASM) versions 5.0, 6.0, 6.0a, 6.0b, but MASM 5.1 generates a warning and incorrect code.

The following is the error generated by MASM 5.0

A2019: Wrong type of register
Macro Assembler Version 5.1 fails to generate an error on the MOV instruction using the 8-bit registers (AH, BH, CH, DH, AL, BL, CL, DL) with segment registers (CS, DS, ES, SS). Instead, the following warning is generated
A4057: Illegal size for operand
The code generated is also in error. Each of the (8-bit) byte registers maps to the set (SP, DI, BP, SI, AX, BX, CX, DX).

The following is the error generated by MASM 6.0
A2024: invalid operand size for instruction


STATUS

Microsoft has confirmed this to be a problem in MASM version 5.1. This problem was corrected in MASM version 6.0.


MORE INFORMATION

The following sample code demonstrates the problem:

Sample Code:


;Assemble options needed: none

_TEXT   segment word public 'CODE'
      ; instruction in source     Generated code shown in listing
        mov     ds, ah          ; mov   ds, sp
        mov     ds, bh          ; mov   ds, di
        mov     ds, ch          ; mov   ds, bp
        mov     ds, dh          ; mov   ds, si

        mov     ds, al          ; mov   ds, ax
        mov     ds, bl          ; mov   ds, bx
        mov     ds, cl          ; mov   ds, cx
        mov     ds, dl          ; mov   ds, dx

        mov     ah, 4ch
        int     21h
_TEXT   ends
        end 

Additional query words: 5.10 buglist5.10 fixlist6.00

Keywords :
Version : :5.1
Platform :
Issue type :


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