Copyright (C) 2000-2012 |
GNU Info (nasm.info)Section 6.2.16.2.1. `obj' Extensions to the `SEGMENT' Directive -------------------------------------------------- The `obj' output format extends the `SEGMENT' (or `SECTION') directive to allow you to specify various properties of the segment you are defining. This is done by appending extra qualifiers to the end of the segment-definition line. For example, segment code private align=16 defines the segment `code', but also declares it to be a private segment, and requires that the portion of it described in this code module must be aligned on a 16-byte boundary. The available qualifiers are: * `PRIVATE', `PUBLIC', `COMMON' and `STACK' specify the combination characteristics of the segment. `PRIVATE' segments do not get combined with any others by the linker; `PUBLIC' and `STACK' segments get concatenated together at link time; and `COMMON' segments all get overlaid on top of each other rather than stuck end-to-end. * `ALIGN' is used, as shown above, to specify how many low bits of the segment start address must be forced to zero. The alignment value given may be any power of two from 1 to 4096; in reality, the only values supported are 1, 2, 4, 16, 256 and 4096, so if 8 is specified it will be rounded up to 16, and 32, 64 and 128 will all be rounded up to 256, and so on. Note that alignment to 4096-byte boundaries is a PharLap extension to the format and may not be supported by all linkers. * `CLASS' can be used to specify the segment class; this feature indicates to the linker that segments of the same class should be placed near each other in the output file. The class name can be any word, e.g. `CLASS=CODE'. * `OVERLAY', like `CLASS', is specified with an arbitrary word as an argument, and provides overlay information to an overlay-capable linker. * Segments can be declared as `USE16' or `USE32', which has the effect of recording the choice in the object file and also ensuring that NASM's default assembly mode when assembling in that segment is 16-bit or 32-bit respectively. * When writing OS/2 object files, you should declare 32-bit segments as `FLAT', which causes the default segment base for anything in the segment to be the special group `FLAT', and also defines the group if it is not already defined. * The `obj' file format also allows segments to be declared as having a pre-defined absolute segment address, although no linkers are currently known to make sensible use of this feature; nevertheless, NASM allows you to declare a segment such as `SEGMENT SCREEN ABSOLUTE=0xB800' if you need to. The `ABSOLUTE' and `ALIGN' keywords are mutually exclusive. NASM's default segment attributes are `PUBLIC', `ALIGN=1', no class, no overlay, and `USE16'. automatically generated by info2www version 1.2.2.9 |