MASM 5.1 May Generate Warning A4057 Instead of Error A2019

ID Number: Q39373

5.10 | 5.10

MS-DOS | OS/2

buglist5.10 fixlist6.00

Summary:

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.10.

This problem was corrected in MASM version 6.00.

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