Adres stały - Address constant

Od IBM System / 360 do współczesności z / Architecture , stała adresowa lub „adcon” to typ danych języka asemblera, który zawiera adres lokalizacji w pamięci komputera . Stała adresowa może mieć długość jednego, dwóch, trzech lub czterech bajtów, chociaż adcon mniejszy niż cztery bajty jest zwykle używany do przechowywania wyrażenia dla małej liczby całkowitej, takiej jak długość, adres względny lub wartość indeksu, i tak w ogóle nie reprezentują adresu. Stałe adresowe są definiowane za pomocą instrukcji „DC” języka asemblera .

Inne systemy komputerowe mają podobne możliwości, chociaż mogą być używane inne nazwy.

Typy stałych adresowych

A adcons normalnie przechowywać cztery bajtów relocatable adres, jednak jest to możliwe, aby określić długość stałej. Na przykład AL1(stuff)definiuje jednobajtowy adcon, przydatny głównie w przypadku małych stałych z relokowalnymi wartościami. Inne typy adcon mogą podobnie mieć specyfikację długości.

Adcons typu V przechowują odwołanie zewnętrzne, które ma być rozwiązane przez edytor linków .

Y jest używane dla adresów dwubajtowych (półsłów). Adcons „Y” mogą bezpośrednio adresować do 32 KB pamięci i nie są szeroko stosowane, ponieważ wczesne asemblery System / 360 nie obsługiwały typu danych „Y”. Wczesne systemy DOS / 360 i BOS / 360 w większym stopniu wykorzystywały adcony Y, ponieważ maszyny, na których te systemy działały, miały ograniczoną pamięć. Notacja „AL2 ( wartość )” jest teraz zwykle używana zamiast „Y ( wartość )” w celu zdefiniowania wartości 16-bitowej.

Stałe adresu Q nie zawierają rzeczywistych adresów, ale przemieszczenie w sekcji External Dummy  - podobnie jak w Linux Global Offset Table (patrz Kod niezależny od pozycji ). J ADCON jest ustawiony przez edytor sprzężeń trzymać łączna długość manekina sekcji zewnętrznej, a nie faktycznie zawierać adres.

Inne typy stałych adresowych to R, które miało specjalne znaczenie dla TSS / 360 w celu adresowania PSECT , oraz S , które przechowuje adres w formacie przesunięcia bazowego - 16-bitowa wartość zawierająca czterobitowy numer rejestru ogólnego i dwunastobitowe przesunięcie, taki sam format jak adresy są kodowane w instrukcjach.

System z obsługuje typy AD , JD , QD i VD , które reprezentują 8-bajtowe (podwójne słowo) wersje typów „A”, „J”, „Q” i „V” do przechowywania adresów 64-bitowych.

Możliwość przenoszenia

Wartość nominalna „DC” to lista wyrażeń umieszczonych w nawiasach. Wyrażenia mogą być bezwzględne , relokowalne lub złożone, relokowalne .

Wyrażenie absolutne może być całkowicie ocenione w czasie asemblacji i nie wymaga dalszego przetwarzania przez edytor linkowania. Na przykład DC A(4900796)ma bezwzględną wartość nominalną.

Wyrażenie relokowalne to takie, które zawiera jeden lub więcej terminów, które wymagają relokacji przez edytor łączenia, gdy program jest połączony, na przykład w poniższym kodzie „ACON” ma relokowalną wartość nominalną.

LAB  DC H'0'
    ...
ACON DC A(LAB-4)

Złożone, relokowalne wyrażenie zawiera terminy, które odnoszą się do adresów w różnych modułach źródłowych. Na przykład, DC A(X-Y)gdzie „X” i „Y” znajdują się w różnych modułach.

Przykłady

Wszystkie te są poprawnymi reklamami: -

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

Zobacz też

Wskaźnik (informatyka)

Linki zewnętrzne