Адресная константа
В IBM System/360 и нынешнем z/Architecture или константа адреса « adcon» представляет собой языка ассемблера тип данных , который содержит адрес места в памяти компьютера . Константа адреса может иметь длину один, два, три или четыре байта, хотя рекламное объявление длиной менее четырех байтов обычно используется для хранения выражения для небольшого целого числа, такого как длина, относительный адрес или значение индекса, и не вообще не представляют собой адрес. Константы адреса определяются с помощью оператора DC языка ассемблера .
Другие компьютерные системы имеют аналогичные возможности, хотя могут использоваться и другие названия.
Типы адресных констант
[ редактировать ]Adcons обычно хранит четырехбайтовый перемещаемый адрес, однако можно указать длину константы. Например, AL1(stuff)
определяет однобайтовый рекламный идентификатор, полезный в основном для небольших констант с перемещаемыми значениями. Другие типы рекламных объявлений также могут иметь указание длины.
Рекламные объявления типа V хранят внешнюю ссылку, которая должна быть разрешена редактором ссылок .
Y используется для двухбайтовых (полусловных) адресов. Рекламные блоки «Y» могут напрямую обращаться к памяти объемом до 32 КБ и не получили широкого распространения, поскольку ранние ассемблеры System/360 не поддерживали тип данных «Y». Ранние системы DOS/360 и BOS/360 чаще использовали Y adcons, поскольку машины, на которых работали эти системы, имели ограниченный объем памяти. Обозначение «AL2( значение )» теперь обычно используется вместо «Y( значение )» для определения 16-битного значения.
Константы адреса Q содержат не фактические адреса, а смещение во внешней фиктивной секции – аналогично таблице глобальных смещений Linux (см. Позиционно-независимый код ). - J адкон устанавливается редактором связей для хранения совокупной длины внешнего фиктивного раздела и фактически не содержит адреса.
Другие типы адресных констант — это R , который имел особое значение для TSS/360 для адресации PSECT , и S , который хранит адрес в формате базового смещения — 16-битное значение, содержащее четырехбитный номер общего регистра и двенадцатибитное смещение. в инструкциях кодируются адреса в том же формате.
System z поддерживает типы AD , JD , QD и VD , которые представляют собой 8-байтовые (двойные слова) версии типов «A», «J», «Q» и «V» для хранения 64-битных адресов.
Возможность перемещения
[ редактировать ]Номинальное значение DC представляет собой список выражений, заключенный в круглые скобки. Выражения могут быть абсолютными , перемещаемыми или сложными перемещаемыми .
Абсолютное выражение может быть полностью вычислено во время сборки и не требует дальнейшей обработки редактором связей. Например, DC A(4900796)
имеет абсолютную номинальную стоимость.
Перемещаемое выражение — это выражение, которое содержит один или несколько терминов, которые требуют перемещения редактором связей при связывании программы, например, в следующем коде «ACON» имеет перемещаемое номинальное значение.
LAB DC H'0' ...ACON DC A(LAB-4)
Сложное перемещаемое выражение содержит термины, относящиеся к адресам в разных исходных модулях. Например, DC A(X-Y)
где «X» и «Y» находятся в разных модулях.
Примеры
[ редактировать ]Все это действительные рекламные объявления: -
ADCONS DS 0A an aligned label of implicit length 4 and actual length 0 DC A(FIELDA) a 4 byte word, aligned, absolute address of a variable 'FIELDA' DC AL4(FIELDA) as above but not (necessarily) aligned on a word boundary DC AL3(FIELDA) a three byte equivalent of the above (maximum 16 megabytes) DC AL2(FIELDA-TABLES) two byte offset from 'TABLES' label to start of 'FIELDA' DC AL2(L'FIELDA) a two byte length of the field called 'FIELDA' (=26 in decimal) DC AL1(C'A') hexadecimal value of the EBCDIC character 'A' (=C1 in hex) DC A(FIELDA-C'A') a 4 byte, aligned, absolute address --> 192 bytes before the start of FIELDA DC A(*) a 4 byte, aligned, address of this adcon (* means 'here') DC S(SUBRTNA) a 2 byte, aligned base+displacement address of the program label "SUBRTNA" DC X'47F0',S(SUBRTNA) an unconditional branch instruction (built using an S-type address constant) DC SL2(SUBRTNA) a 2 byte, UNALIGNED base+displacement address of the program label "SUBRTNA"STAB DC SL2(SUBRTNA,SUBRTNB,SUBRTNC,.etc.) AN ARRAY OF unaligned S-TYPE ADCONS *INDIRECT DC A(*+4) address of next byte after this adcon (the V-type adcon) DC V(SUBRTNX) address of an external subroutine entry point DC AL1(−1) a one byte negative value (= x'FF'), often used as a table de-limiter.SUBRTNA DS 0Y start of (internal) sub-routine A. instructions go here.TABLES DS 0Y base address for tables section (halfword aligned)LENGTHS DC Al2(5,27,56,83,127,32563) an arbitrary array of 6 x 2 byte hex lengths (defined by their decimal values)PARMLIST DC A(HERE,THERE,EVWHERE,-1) an array of 3 x 4 byte aligned pointers to various field labels/entrypoints* with additional negative value end-pointer (=X'FFFFFFFF')..ZERO_255 DC 256AL1(*-ZERO_255) an array of 256 single byte hex values 00-FF* ---------end of adcon examples ---------------- *FIELDA DC C'ABCDEFGHIJKLMNOPQRSTUVWXYZ' a field containing a character string (not an adcon) = A-Z