ID Number: Q74666
6.00 6.00a | 6.00 6.00a
MS-DOS | OS/2
buglist6.00 buglist6.00a
Summary:
SYMPTOMS
The Microsoft Macro Assembler (MASM) versions 6.0 and 6.0a provide
several Control-Flow directives such as the .WHILE, .REPEAT, and
.IF constructs. When structure members are accessed inside of these
constructs, MASM may incorrectly generate the following error:
error A2154: syntax error on control-flow directive
RESOLUTION
The sample program below illustrates this problem. As a workaround,
a register or a temporary variable may be used to hold the
structure member, as demonstrated below in Sample Code 2.
STATUS
Microsoft has confirmed this to be a problem in MASM versions 6.0
and 6.0a. We are researching this problem and will post new
information here as it becomes available.
More Information:
Sample Code 1
-------------
; Assemble options needed: none
.MODEL small, c, os_dos
.STACK
.DATA
STRUCT1 STRUCT
SMember SWORD 0
STRUCT1 ENDS
var1 STRUCT1 <0>
.CODE
.STARTUP
mov bx, offset var1
.WHILE ((STRUCT1 PTR [bx]).SMember != 1000)
inc (STRUCT1 PTR [bx]).SMember
.ENDW
.REPEAT
dec (STRUCT1 PTR [bx]).SMember
.UNTIL ((STRUCT1 PTR [bx]).SMember == 0)
.IF ((STRUCT1 PTR [bx]).SMember == 0)
nop
.ENDIF
.EXIT 0
END
Sample Code 2
-------------
.MODEL small, c, os_dos
.STACK
.DATA
STRUCT1 STRUCT
SMember SWORD 0
STRUCT1 ENDS
var1 STRUCT1 <0>
.CODE
.STARTUP
mov bx, offset var1.SMember
.WHILE (SWORD PTR [bx] != 1000)
inc SWORD PTR [bx]
.ENDW
.REPEAT
dec SWORD PTR [bx]
.UNTIL (SWORD PTR [bx] == 0)
.IF (SWORD PTR [bx] == 0)
nop
.ENDIF
.EXIT 0
END