IBM System/360から現在のz/Architectureまで、アドレス定数または「adcon」は、コンピュータ メモリ内の位置のアドレスを含むアセンブリ言語 データ型です。アドレス定数の長さは 1、2、3、または 4 バイトですが、4 バイト未満の adcon は通常、長さ、相対アドレス、またはインデックス値などの小さな整数の式を保持するために使用され、アドレスを表すものではありません。アドレス定数は、アセンブラ言語の「DC」ステートメントを使用して定義されます。
他のコンピュータ システムにも同様の機能がありますが、名前は異なる場合があります。
アドレス定数の種類
アドコンは通常 4 バイトの再配置可能なアドレスを格納しますが、定数の長さを指定することもできます。たとえば、AL1(stuff)1 バイトのアドコンを定義します。これは主に、再配置可能な値を持つ小さな定数に役立ちます。他のアドコン タイプでも同様に長さを指定できます。
Vタイプのアドコンは、リンカーによって解決される外部参照を格納します。
Yは 2 バイト (ハーフワード) アドレスに使用されます。'Y' アドコンは最大 32K バイトのストレージを直接アドレス指定できますが、初期の System/360 アセンブラは 'Y' データ型をサポートしていなかったため、あまり使用されていません。初期のDOS/360およびBOS/360システムでは、これらのシステムが実行されるマシンのストレージが限られていたため、Y アドコンがより多く使用されました。現在では、16 ビット値を定義するために、表記法 ' Y(値)' よりも 'AL2(値)' が一般的に使用されています。
Qアドレス定数には実際のアドレスではなく、外部ダミー セクションの変位が含まれます。これは Linuxグローバル オフセット テーブルに似ています(位置非依存コードを参照)。J アドレス定数は、外部ダミー セクションの累積長を保持するためにリンケージ エディターによって設定され、実際にはアドレスは含まれません。
その他のタイプのアドレス定数は、TSS/360 がPSECT をアドレス指定するために特別な意味を持つRと、ベース変位形式でアドレスを格納するSです。ベース変位形式は、4 ビットの汎用レジスタ番号と 12 ビットの変位を含む 16 ビット値で、命令でアドレスがエンコードされる形式と同じです。
System z は、64 ビット アドレスを保持するための 8 バイト (ダブルワード) バージョンのタイプ 'A'、'J'、'Q'、および 'V' を表すAD、JD、QD、およびVDタイプをサポートします。
移転可能性
「DC」の公称値は、括弧で囲まれた式のリストです。式は、絶対式、再配置式、または複合再配置式にすることができます。
絶対式は、アセンブリ時に完全に評価できるため、リンケージ エディターによる追加の処理は必要ありません。たとえば、DC A(4900796)絶対公称値を持ちます。
再配置可能な式とは、プログラムがリンクされるときにリンケージ エディターによる再配置を必要とする 1 つ以上の項を含む式です。たとえば、次のコードでは、'ACON' に再配置可能な公称値があります。
ラボ DC H'0'
...
ACON DC A(LAB-4)
複雑な再配置可能な式には、異なるソース モジュール内のアドレスに関連する用語が含まれています。たとえば、DC A(X-Y)「X」と「Y」が異なるモジュール内にある場合などです。
例
これらはすべて有効なアドコンです:-
ADCONS DS 0A 暗黙の長さ 4 と実際の長さ 0 の整列ラベル
DC A(FIELDA) 変数 'FIELDA' の 4 バイト ワード、整列、絶対アドレス
DC AL4(FIELDA) は上記と同じですが、必ずしもワード境界に揃えられるわけではありません。
DC AL3(FIELDA) 上記の3バイト相当(最大16メガバイト)
DC AL2(FIELDA-TABLES) 'TABLES' ラベルから 'FIELDA' の開始までの 2 バイトのオフセット
DC AL2(L'FIELDA) 'FIELDA'と呼ばれるフィールドの2バイトの長さ(10進数で26)
DC AL1(C'A') EBCDIC 文字 'A' の 16 進数値 (= 16 進数では C1)
DC A(FIELDA-C'A') 4バイトの整列された絶対アドレス --> FIELDAの開始の192バイト前
DC A(*) このアドコンの 4 バイトの整列アドレス (* は「ここ」を意味します)
DC S(SUBRTNA) プログラムラベル「SUBRTNA」の2バイトの整列ベース+変位アドレス
DC X'47F0',S(SUBRTNA) 無条件分岐命令(S型アドレス定数を使用して構築)
DC SL2(SUBRTNA) プログラムラベル「SUBRTNA」の2バイトの非整列ベース+変位アドレス
STAB DC SL2(SUBRTNA、SUBRTNB、SUBRTNC、など) 非整列 S タイプ ADCON の配列
*
INDIRECT DC A(*+4) このアドコンの次のバイトのアドレス(V型アドコン)
DC V(SUBRTNX) 外部サブルーチンエントリポイントのアドレス
DC AL1(−1) 1バイトの負の値(= x'FF')。テーブル区切り文字としてよく使用される。
。
SUBRTNA DS 0Y (内部)サブルーチンAの開始
. 手順はここ
。
TABLES DS 0Y テーブルセクションのベースアドレス(ハーフワード境界)
LENGTHS DC Al2(5,27,56,83,127,32563) 6 x 2 バイトの 16 進数の長さの任意の配列 (10 進数値で定義)
PARMLIST DC A(HERE,THERE,EVWHERE,-1) さまざまなフィールド ラベル/エントリ ポイントへの 3 x 4 バイト境界に揃えられたポインタの配列
* 負の値の終了ポインタ (=X'FFFFFFFF') が追加されます。
。
ZERO_255 DC 256AL1(*-ZERO_255) 256 個の 16 進数値 00-FF の配列
* ---------adcon の例の終了 ---------------- *
FIELDA DC C'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 文字列(アドコンではない)を含むフィールド = AZ
参照
外部リンク
- アセンブリ言語DC命令
- IBM HLASM (高水準アセンブラ) オンライン マニュアル
