× К оглавлению На главную Об авторе

   Дата и время публикации:

Управляет выравниванием инициализируемой памятью общего использования в сегменте data .


СИНТАКСИС
   .align expression [,pad]
АРГУМЕНТЫ

expression — содержит положительное числовое значение счетчика ячеек;

pad — содержит положительное числовое значение, которое заполняет выравниваемую область.

ОПИСАНИЕ

Прозводит выравнивание путем назначения счетчику ячеек (англ. Location Counter ) внутри сегмента .data значения кратного двум, как показано на рисунке 1.

Рисунок 1.2

На рисунке 1, показано распределение памяти в сегменте data, который осуществляется в результате применения языка програмирования Cи (далее по тексту – С-реализация) для декларации в функции main() переменных с использованием спецификатор класса памяти (англ. storage-class specifiers) static и инициализируемой значением отличного от нуля.

В результате, как следует из рисунка 1 и листинга 2, для одной или более переменных производится установка внутреннего счетчика картного двум, с использованием директивы .align.

Приращение самого счетчика происходит после использования директив .byte, .quad, .long, применение которых показано в листинге 2.

Листинг 2


...
****  static char string[UCHAR_MAX+1] = { 0 }; /* of length 256 bytes */  ;
****             { 'h','e','l','l','o',' ','w','o','r','l','d', '\0' };  
...
55   20                            .data
56   21                            .align 8
57   24                    hello.1970:
58   25 0000 68                    .byte   104
59   26 0001 65                    .byte   101
60   27 0002 6C                    .byte   108
...
64   28 0003 6C                    .byte   108
65   29 0004 6F                    .byte   111
66   30 0005 20                    .byte   32
67   31 0006 77                    .byte   119
68   32 0007 6F                    .byte   111
69   33 0008 72                    .byte   114
70   34 0009 6C                    .byte   108
71   35 000a 64                    .byte   100
72   36 000b 00                    .byte   0
...
73   37 000c 00000000              .align 8
74   40                    type_8bytes_maxval.1969:
75   41 0010 FFFFFFFF              .quad   -1
76   41      FFFFFFFF 
77   42                            .align 4
78   45                    type_4bytes_maxval.1968:
79   46 0018 FFFFFFFF              .long   -1
80   47                            .align 2
81   50                    type_2bytes_maxval.1967:
82   54                    type_byte_maxval.1966:
83   55 001e FF                    .byte   -1
... 
104 DEFINED SYMBOLS
105                *ABS*:0000000000000000 x86_64_typealign.c
... 
107               .data:0000000000000000 hello.1969
108               .data:0000000000000010 type_8bytes_maxval.1968
109               .data:0000000000000018 type_4bytes_maxval.1967
110               .data:000000000000001c type_2bytes_maxval.1966
111               .data:000000000000001e type_byte_maxval.1965
... 

Как в случае и с директивой .comm выравнивание производится с помощью правила, предложенного Intel и называемого "естественными границами" (англ. "natural boundaries"), потому что все установки значения внутреннего счетчика внутри сегмента .data осуществляются кратными 2, как это показано в строках 107-111 листинга 2

Директива .align предществует явно или не явно до использования директив .byte, .quad, .long, как показано в листинге 2:

 


Библиография

См. п.п.36-38 общей библиографии