Relational Operators Evaluate to Wrong Value

ID Number: Q26822

5.00 5.10 5.10a

MS-DOS

buglist5.00 buglist5.10 buglist5.10a fixlist6.00

Summary:

When used with a MOV instruction, some relational operators will

evaluate to the wrong value. The following listing file sections are

examples of this problem. It is important to note that FFFF = true,

and 0000 = false. It is also important to note that when FFFFh is used

with the GT, GE, or LT, LE operator, it is interpreted as the largest

positive number and not as -1.

The following demonstrates this problem with MASM 5.0:

.MODEL SMALL

0000 .CODE

0000 B8 0000 MOV AX, 0FFFFH GT -1

0003 B8 FFFF MOV AX, 0FFFFH LE -1

0006

.386

.MODEL SMALL

0000 .CODE

0000 66 | B8 FFFF MOV AX, -1 GE 0FFFFFFFFH

0004 66 | B8 FFFF MOV AX, 0FFFFFFFFH LE -1

0008 66 | B8 0000 MOV AX, 0FFFFFFFFH GT -1

000C 66 | B8 0000 MOV AX, -1 LT 0FFFFFFFFH

0010 END

The following demonstrates the problem MASM 5.1:

.MODEL SMALL

0000 .CODE

0000 B8 0000 MOV AX, 0FFFFH GT -1

0003 B8 FFFF MOV AX, 0FFFFH LE -1

0006

.386

.MODEL SMALL

0000 .CODE

0000 66 | B8 FFFF MOV AX, -1 GE 0FFFFFFFFH

0004 66 | B8 0000 MOV AX, 0FFFFFFFFH LE -1

0008 66 | B8 FFFF MOV AX, 0FFFFFFFFH GT -1

000C 66 | B8 0000 MOV AX, -1 LT 0FFFFFFFFH

0010 END

More Information:

Microsoft has confirmed this to be a problem in Microsoft Macro

Assembler (MASM) version 5.0, 5.1, and 5.1a. This problem was

corrected in MASM version 6.0.

Additional reference words: 5.00 5.10 5.10a 6.00