ID Number: Q75177
6.00 | 6.00
MS-DOS | OS/2
buglist6.00 fixlist6.00a
Summary:
SYMPTOMS
Subtracting two external variables in the Microsoft Macro Assembler
(MASM) version 6.0 results in an incorrect value, and the assembler
does not generate any errors. It should produce an error similar to
the one received in MASM 5.1, such as:
A2032: Illegal Use of extern
CAUSE
When subtracting two local variables, the assembler will correctly
calculate the difference in their offsets. However, with external
variables, it does not know the offset at assemble time, so it
cannot correctly determine their difference.
RESOLUTION
The difference in offsets for external variables can be calculated
by moving the values into registers or temporary variables and then
performing the calculation. The sample code below illustrates this
problem.
STATUS
Microsoft has confirmed this to be a problem in MASM version 6.0.
This problem was corrected in MASM version 6.0a.
More Information:
Sample Code 1
-------------
; Assemble options needed: none
.model small
.data
extrn Var1 : byte, Var2 : byte ; The extern variables
.stack
.code
.startup
mov ax, offset Var1 ; Gives correct offset of extern var1
mov bx, offset Var2 ; Gives correct offset of extern var2
mov cx, (Var2 - Var1) ; Incorrectly calculate a zero for
; the difference
sub bx, ax ; This will calculate the correct value
end
Sample Code 2
-------------
; Contains the external variable definitions
PUBLIC Var1, Var2
.model small
.data
Var1 byte '5'
Var2 byte '9'
end