Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
14.04.2015
Размер:
2.03 Mб
Скачать

106

Chapter 4. Assembler Directives

 

 

SEGMENT

The SEGMENT directive is used to declare a generic segment. A relocation type and an allocation type may be specified in the segment declaration. The SEGMENT directive is specified using the following format:

 

 

segment SEGMENT

class

reloctype

alloctype

 

 

where

 

 

 

 

 

segment

is the symbol name to assign to the segment. This symbol

 

 

 

name is referred by the following RSEG directive. The

 

 

 

segment symbol name can be used also in expressions to

 

 

 

represent the base or start address of the combined segment

 

 

 

as calculated by the Linker/Locator.

 

 

class

is the memory class to use for the specified segment. The

4

 

 

class specifies the memory space for the segment. See the

 

 

table below for more information.

 

reloctype

is the relocation type for the segment. This determines

 

 

 

what relocation options may be performed by the

 

 

 

 

 

 

Linker/Locator. Refer to the table below for more

 

 

 

information.

 

 

 

alloctype

is the allocation type for the segment. This determines what

 

 

 

relocation options may be performed by the Linker/Locator.

 

 

 

Refer to the table below for more information.

Shaded directives and options are available only in AX51 and A251.

Keil Software — A51/AX51/A251 Macro Assembler and Utilities

107

 

 

Class

The name of each segment within a module must be unique. However, the linker will combine segments having the same segment type. This applies to segments declared in other source modules as well.

The class specifies the memory class space for the segment. The A251 differentiates between basic classes and user-defined classes. The class is used by the linker/locator to access all the segments which belong to that class.

The basic classes are listed below:

 

Basic Class

Description

 

 

 

BIT

BIT space (address 20H .. 2FH).

 

 

 

CODE

CODE space

 

 

 

CONST

CONST space; same as CODE but for constant only; access via MOVC.

 

 

 

4

 

DATA

DATA space (address 0 to 7FH & SFR registers).

 

 

EBIT

Extended 251 bit space (address 20H .. 7FH)

 

 

EDATA

EDATA space

 

 

ECONST

ECONST space; same as EDATA but for constants

 

 

 

 

 

IDATA

IDATA space (address 0 to 0FFH).

 

 

 

 

 

 

 

 

ECODE

Entire Intel/Atmel WM 251 and Philips 80C51MX address space for program

 

 

 

 

code.

 

 

 

HCONST

Entire Intel/Atmel WM 251 and Philips 80C51MX address space for constants.

 

 

 

HDATA

Entire Intel/Atmel WM 251 and Philips 80C51MX address space for data.

 

 

 

XDATA

XDATA space; access via MOVX.

 

 

User-defined Class Names (AX51 & A251 only)

User-defined class names are composed of a basic class name and an extension and are enclosed in single quotes ('). They let you access the same address space as basic class names. The advantage is that you may declare several segments with a user-defined class and later use the linker to locate that class (and its segments) at a specific physical address. Refer to the “CLASSES” on page 336 for information on how to locate user defined classes.

Examples

seg1 SEGMENT 'NDATA_FLASH' seg2 SEGMENT 'HCONST_BITIMAGE' seg3 SEGMENT 'DATA1'

Shaded directives and options are available only in AX51 and A251.

108

Chapter 4. Assembler Directives

 

 

Relocation Type

The optional relocation type defines the relocation operation that may be performed by the Linker/Locator. The following table lists the valid relocation types:

 

 

Relocation Type

Description

 

 

 

AT address

Specifies an absolute segment. The segment will be placed at the

 

 

 

 

specified address.

 

 

 

BITADDRESSABLE

Specifies a segment which will be located within the bit addressable

 

 

 

 

memory area (20H to 2FH in DATA space). BITADDRESSABLE is only

 

 

 

 

allowed for segments with the class DATA that do not exceed 16 bytes in

 

 

 

 

length.

 

 

 

INBLOCK

Specifies a segment which must be contained in a 2048Byte block. This

 

 

 

 

relocation type is only valid for segments with the class CODE.

 

 

 

INPAGE

Specifies a segment which must be contained in a 256Byte page.

 

 

 

OFFS offset

Specifies an absolute segment. The segment is placed at the starting

 

4

 

 

address of the memory class plus the specified offset. The advantage

 

 

 

compared to the AT relocation type is that the start address can be

 

 

 

modified with the Lx51 linker/locater control CLASSES. Refer to the

 

 

 

“CLASSES” on page 336 for more information.

 

 

 

OVERLAYABLE

Specifies that the segment can share memory with other segments.

 

 

 

 

Segments declared with this relocation type can be overlaid with other

 

 

 

 

segments which are also declared with the OVERLAYABLE relocation

 

 

 

 

type. When using this relocation type, the segment name must be

 

 

 

 

declared according to the C251, CX51, C51 or PL/M-51 segment naming

 

 

 

 

rules. Refer to the C Compiler User’s Guide for more information.

 

 

 

INSEG

Specifies a segment which must be contained in a 64KByte segment.

 

Shaded directives and options are available only in AX51 and A251.

Keil Software — A51/AX51/A251 Macro Assembler and Utilities

109

 

 

Allocation Type

The optional allocation type defines the allocation operation that may be performed by the Linker/Locator. The following table lists the valid allocation types:

 

Allocation Type

Description

 

 

 

BIT

 

Specify bit alignment for the segment. Default for all segments with the

 

 

 

 

 

class BIT.

 

 

 

BYTE

 

Specify byte alignment for the segment. Default for all segments except of

 

 

 

 

 

BIT.

 

 

 

WORD

 

Specify word alignment for the segment.

 

 

 

DWORD

 

Specify dword alignment for the segment.

 

 

 

PAGE

 

Specify a segment whose starting address must be on a 256Byte page

 

 

 

 

 

boundary.

 

 

 

BLOCK

 

Specify a segment whose starting address must be on a 2048Byte block

 

 

 

 

 

boundary.

 

 

 

 

 

4

 

SEG

 

Specify a segment whose starting address must be on a 64KByte segment

 

 

 

 

boundary.

 

 

 

Examples for Segment Declarations

 

 

 

 

 

 

 

 

 

IDS

SEGMENT

IDATA

 

 

Defines a segment with the name IDS and the memory class IDATA.

MYSEG SEGMENT CODE AT 0FF2000H

Defines a segment with the name MYSEG and the memory class CODE to be located at address 0FF2000H.

HDSEG

SEGMENT

HDATA INSEG DWORD

Defines a segment with the name HDSEG and the memory class HDATA. The segment is located within one 64KByte segment and is DWORD aligned.

XDSEG

SEGMENT

XDATA PAGE

Defines a segment with the name XDSEG and the memory class XDATA. The segment is PAGE aligned, this means it starts on a 256Byte page.

Shaded directives and options are available only in AX51 and A251.

Соседние файлы в папке HLP