Using TYPE Operator in an Indirect Memory Operand Gives A2056

ID Number: Q71890

5.10 5.10a | 5.10 5.10a

MS-DOS | OS/2

buglist5.10 buglist5.10a fixlist6.00

Summary:

The Microsoft Macro Assembler (MASM) versions 5.10 and 5.10a may

generate the following error when the TYPE operator is used in an

indirect memory operand:

error A2056: Immediate mode illegal

Microsoft has confirmed this to be a problem in MASM versions 5.10 and

5.10a. This problem was corrected in MASM version 6.00.

More Information:

The TYPE operator returns a number that represents the type of an

expression. This is normally the size of the variable in bytes.

However, using the TYPE operator in an indirect memory operand of an

instruction such as ADD causes the assembler to generate the A2056

error. The sample code below demonstrates this problem.

Instead of using the TYPE operator in this situation, a workaround for

this problem is to use an equate that is set to the same value. This

workaround is also illustrated in the following sample code (by

deleting the line where the error occurs and uncommenting the

specified line to take its place):

Sample Code

-----------

; Assemble options needed: none

.MODEL SMALL

.DATA

String DB "this is a test"

STYPE EQU TYPE(String)

.CODE

add WORD PTR [bx+10+TYPE(String)], 1

; add WORD PTR [bx+10+STYPE], 1 ;uncomment for workaround

end