layout | title | permalink |
---|---|---|
page |
Q38216: PRB: Possible Cause of L2002 for Mixed C, MASM in Large Model |
/kb/038/Q38216/ |
{% raw %}
Article: Q38216
Product(s): Microsoft Macro Assembler
Version(s): 5.0,5.1,5.1a,6.0,6.0a,6.0b
Operating System(s):
Keyword(s):
Last Modified: 06-MAY-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Macro Assembler (MASM), versions 5.0, 5.1, 5.1a, 6.0, 6.0a, 6.0b
-------------------------------------------------------------------------------
SYMPTOMS
========
If a variable is referenced externally in an assembler routine in the following
manner:
.model large, c
.data
EXTRN Var:WORD
and declared globally in a large model C program as follows:
int Var;
the following error is generated:
error L2002: fixup overflow
CAUSE
=====
This error occurs because the assembler would expect to find Var in the segment
_DATA in DGROUP. The C declaration, however, will put var in the segment
FAR_BSS, since it is an uninitialized global data item in the large memory
model.
Note that the same is true for the compact memory model.
RESOLUTION
==========
One way to eliminate this error is to initialize Var in the C code:
int Var=0;
This will put it in the _DATA logical segment in DGROUP.
Another work-around is to delcare Var in the Assembly code so that the assembler
would expect to find Var in FAR_BSS, as follows:
.model large, c
.fardata?
EXTERN Var:WORD
In addition, be sure to use a segment override to access Var:
MOV ax, SEG Var
MOV es, ax
MOV bx, es:Var
Additional query words: 5.00 5.10 5.10a 6.00 6.00a 6.00b
======================================================================
Keywords :
Technology : kbMASMsearch kbAudDeveloper kbMASM510 kbMASM600 kbMASM500 kbMASM600a kbMASM510a kbMASM600b
Version : :5.0,5.1,5.1a,6.0,6.0a,6.0b
=============================================================================
{% endraw %}