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