6.2.8. `obj' Extensions to the `COMMON' Directive
-------------------------------------------------
The `obj' format allows common variables to be either near or far;
NASM allows you to specify which your variables should be by the use of
the syntax
common nearvar 2:near ; `nearvar' is a near common
common farvar 10:far ; and `farvar' is far
Far common variables may be greater in size than 64Kb, and so the OMF
specification says that they are declared as a number of _elements_ of
a given size. So a 10-byte far common variable could be declared as ten
one-byte elements, five two-byte elements, two five-byte elements or one
ten-byte element.
Some `OMF' linkers require the element size, as well as the variable
size, to match when resolving common variables declared in more than one
module. Therefore NASM must allow you to specify the element size on
your far common variables. This is done by the following syntax:
common c_5by2 10:far 5 ; two five-byte elements
common c_2by5 10:far 2 ; five two-byte elements
If no element size is specified, the default is 1. Also, the `FAR'
keyword is not required when an element size is specified, since only
far commons may have element sizes at all. So the above declarations
could equivalently be
common c_5by2 10:5 ; two five-byte elements
common c_2by5 10:2 ; five two-byte elements
In addition to these extensions, the `COMMON' directive in `obj'
also supports default-`WRT' specification like `EXTERN' does (explained
in *Note Section 6.2.7::). So you can also declare things like
common foo 10:wrt dgroup
common bar 16:far 2:wrt data
common baz 24:wrt data:6