HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
MACRO-32 は,データ型をラベル名にバイトします。バインドは,ラベル定義に続くアセンブラ指示文に従って行なわれます。サポートされている MACRO-32 の指示文を次に示します。
| MACRO-32 の指示文 | VMS のデータ型名 |
|---|---|
| .BYTE | バイト符号なし (BU) |
| .WORD | ワード符号なし (WU) |
| .LONG | ロングワード符号なし (LU) |
| .SIGNED_BYTE | バイト整数(B) |
| .SIGNED_WORD | ワード整数(W) |
| .LONG | ロングワード整数(L) |
| .QUAD | クォドワード整数(Q) |
| .F_FLOATING | F 浮動小数点数(F) |
| .D_FLOATING | D 浮動小数点数(D) |
| .G_FLOATING | G 浮動小数点数(G) |
| .H_FLOATING | H 浮動小数点数(H)(VAX 固有) |
| (該当なし) | パック 10 進数(P) |
C.10.4 MACRO-32 コンパイラ (AMACRO) (Alpha 専用)
MACRO-32 で記述したアプリケーションを Alpha システムに移植する場合は, MACRO-32 コンパイラ (AMACRO) を使用します。 MACRO-32 でコンパイルされたコードをデバッグするためのデバッグ・セッションは,アセンブルされたコードの場合に似ていますが,本項で説明するような重要な相違もあります。これらのアプリケーションを移植する場合の説明については,『 Porting VAX MACRO Code from OpenVMS VAX to OpenVMS Alpha 』を参照してください。
C.10.4.1 コードの再配置
大きな相違は,コードがコンパイルされているという事実です。VAX システムでは, MACRO-32 の各命令は単一のマシン命令です。Alpha システムでは, MACRO-32 の各命令は,Alpha の複数のマシン命令へとコンパイルされることがあります。この相違によって大きな副作用が生じます。それは,コンパイル・コマンドで /NOOPTIMIZE を指定しない場合,コードの再配置と再スケジューリングが行われるということです。コードのデバッグが終わってから,/NOOPTIMIZE を指定しないでリコンパイルすることにより性能を改善できます。
C.10.4.2 シンボリック変数
コンパイルされたコードをデバッグする場合とアセンブルされたコードをデバッグする場合とには,他にも大きな相違があります。それは, MACRO-32 にとっての新しいコンセプトである,ルーチンの引数を調べるためのシンボリック変数の定義です。 VAX システムでは,ルーチンをデバッグしていて,引数をチェックしたくなったら,通常は,次のような入力を行うと考えられます。
DBG> EXAMINE @AP ; to see the argument count
DBG> EXAMINE @AP+4 ; to examine the first arg
|
また,次のような入力をすることも考えられます。
DBG> EXAMINE @AP ; to see arg count
DBG> EXAMINE .+4:.+20 ; to see first 5 args
|
Alpha システムでは,引数はメモリ内のベクタには常駐していません。これが VAX システムとは異なる点です。さらにはまた,Alpha システムには AP レジスタがありません。MACRO でコンパイルしたコードをデバッグしているときに, EXAMINE @AP と入力すると,デバッグは,AP は未定義シンボルであるというメッセージを発行します。
コンパイルしたコードでは,引数は,次に述べる項目を組み合せたものとして常駐することができます。
作成されたコードを読み出して引数を検索することをコンパイラがユーザに要求することはありません。コンパイラには,引数の正しい位置を指し示す $ARGn シンボルがあります。$ARG0 は,VAX システムの @AP+0 と同じもの,つまり引数の個数です。たとえば $ARG1 は最初の引数,$ARG2 は 2 番目の引数です。これらの引数は,CALL_ENTRY 指示文および JSB_ENTRY 指示文で定義されますが,EXCEPTION_ENTRY 指示文では定義されません。
C.10.4.3 $ARGn シンボルを使用しない引数検索
ユーザのコードで,コンパイラが $ARGn シンボルを作成しない追加の引数が使用されることがあります。.CALL_ENTRY ルーチンに対して定義される $ARGn シンボルの個数は,コンパイラが自動検出または MAX_ARGS によって検出した最大値または 16 のどちらか小さい方です。.JSB_ENTRY ルーチンの場合,引数は呼び出し元のスタック・フレーム内のホーム・ポジションにあり,コンパイラは実際の数を検出できないので,$ARGn シンボルを常に 8 個作成します。
ほとんどの場合,追加の引数は容易に見つけられますが,そうでない場合もあります。
C.10.4.4 検索しやすい引数
次の場合は,追加の引数は容易に見つけられます。
たとえば,次のようにすれば JSB ルーチン内の 8 番目の引数より先にある引数を調べることができます。この場合,引数リストのホーム・ポジションへのセットは呼び出し元で行うことが必要です。
DBG> EX $ARG8 ; highest defined $ARGn . . . DBG> EX .+4 ; next arg is in next longword . . . DBG> EX .+4 ; and so on |
この例では,引数リストをホーム・ポジションにセットするときに呼び出し元が少なくとも 10 個の引数を検出したと想定しています。
引数のホーム・ポジションをセットしなかったルーチンの最後の $ARGn シンボルより先の引数を見つけるには,上記の例で EX .+4 を EX .+8 で置き換えた後,例に示すとおりに実行します。
C.10.4.5 検出しにくい引数
次の場合は,追加の引数を見つけるのは容易ではありません。
これらのケースで追加の引数を見つける方法は,コンパイルされたマシン・コードを調べ,引数がどこに常駐しているかを判断することです。チェックしたい引数の最大値に対して MAX_ARGS が正しく指定されていれば,どちらの問題も解消します。
C.10.4.6 浮動小数点数データ付きのコードのデバッグ
Alpha システムで浮動小数点数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。
EXAMINE/G_FLOAT R4 |
この例では,VAX の場合と異なるり,R4 と R5 の下位ロングワードは値の作成には使用されない。その代わり,R4 の内容のクォドワードが使用される。
コンパイラが D_FLOAT 演算および G_FLOAT 演算用に作成したコードは,2 つの連続するレジスタの下位ロングワードのデータの VAX 形式を保持している。したがって,これらの 2 つのレジスタのどちらかに EXAMINE/G_FLOAT を使用しても,真の浮動小数点数値を得ることはできない。また,これらのレジスタのひとつに DEPOSIT/G_GLOAT を実行しても必要な結果は得られない。ただし,そのような値を半分にしたものをマニュアルで結合することはできる。たとえば,次の命令を実行したとする。
MOVG DATA, R6 |
その後,現在 R6 と R7 にある G_FLOAT 値を次のシーケンスで読み出すことができる。
DBG> EX R6 .MAIN.\%LINE 100\%R6: 0FFFFFFFF D8E640D1 DBG> EX R7 .MAIN.\%LINE 100\%R7: 00000000 2F1B24DD DBG> DEP R0 = 2F1B24DDD8E640D1 DBG> EX/G_FLOAT R0 .MAIN.\%LINE 100\%R0: 4568.89900000000 |
C.10.4.7 パック 10 進数データ付きのコードのデバッグ
Alpha システムでパック 10 進数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。
以下の各節では,デバッガによる MACRO-64 のサポートについて説明します。
C.11.1 言語式の演算子
MACRO-64 言語には,高級言語と同じ意味での式というものはありません。受け入れられるのはアセンブリ時の式と,限られたセットの演算子だけです。デバッグ時に MACRO-64 のプログラミングで,他の言語の場合と同じくらい自由に式を使用できるようにするため,デバッガは, MACRO-64 自体には含まれていない多数の演算子を MACRO-64 の言語式の中で受け入れるようになっています。特に,BLISS以後にモデル化された比較演算子とブール演算子のセットは完全に受け入れます。間接参照演算子と通常の算術演算子も受け入れられます。
| 種類 | シンボル | 機能 |
|---|---|---|
| 接頭辞 | @ | 間接参照 |
| 接頭辞 | . | 間接参照 |
| 接頭辞 | + | 単項正符号 |
| 接頭辞 | - | 単項負符号(否定) |
| 挿入辞 | + | 加算 |
| 挿入辞 | - | 減算 |
| 挿入辞 | * | 乗算 |
| 挿入辞 | / | 除算 |
| 挿入辞 | MOD | 剰余 |
| 挿入辞 | @ | 左シフト |
| 挿入辞 | EQL | 等値 |
| 挿入辞 | EQLU | 等値 |
| 挿入辞 | NEQ | 不等 |
| 挿入辞 | NEQU | 不等 |
| 挿入辞 | GTR | 大なり |
| 挿入辞 | GTRU | 大なり符号なし |
| 挿入辞 | GEQ | 以上 |
| 挿入辞 | GEQU | 以上符号なし |
| 挿入辞 | LSS | 小なり |
| 挿入辞 | LSSU | 小なり符号なし |
| 挿入辞 | LEQ | 以下 |
| 挿入辞 | LEQU | 以下符号なし |
| 接頭辞 | NOT | ビット単位の NOT |
| 挿入辞 | AND | ビット単位の AND |
| 挿入辞 | OR | ビット単位の OR |
| 挿入辞 | XOR | ビット単位の排他的論理和 |
| 挿入辞 | EQV | ビット単位の同値 |
サポートされている, MACRO-64 の言語式とアドレス式の構造を次に示します。
| シンボル | 構造 |
|---|---|
| <p,s,e> | BLISS 同様のビットフィールド |
MACRO-64 は,データ型をラベル名にバインドします。バインドは,ラベル定義に続くアセンブラ指示文に従って行われます。たとえば,次のコード内の .LONG データ指示文は,ロングワード整数データ型をラベル V1,V2,および V3 にバインドするよう MACRO-64 に対して指示します。
.PSECT A, NOEXE .BYTE 5 V1: V2: V3: .LONG 7 |
V1,V2,および V3 にバインドされている型を確認するには, SHOW SYMBOL/TYPE コマンドを V* パラメータ付きで実行します。実行結果の表示は次のとおりです。
data .MAIN.\V1
atomic type, longword integer, size: 4 bytes
data .MAIN.\V2
atomic type, longword integer, size: 4 bytes
data .MAIN.\V3
atomic type, longword integer, size: 4 bytes)
|
サポートされている MACRO-64 の指示文を次に示します。
| MACRO-64 のデータ型 | VMS のデータ型名 |
|---|---|
| .BYTE | バイト符号なし (BU) |
| .WORD | ワード符号なし (WU) |
| .LONG | ロングワード符号なし (LU) |
| .SIGNED_BYTE | バイト整数(B) |
| .SIGNED_WORD | ワード整数(W) |
| .LONG | ロングワード整数(L) |
| .QUAD | クォドワード整数(Q) |
| .F_FLOATING | F 浮動小数点数(F) |
| .D_FLOATING | D 浮動小数点数(D) |
| .G_FLOATING | G 浮動小数点数(G) |
| .S_FLOATING (Alpha 固有) | S 浮動小数点数 (S) |
| .T_FLOATING (Alpha 固有) | T 浮動小数点数 (T) |
| (該当なし) | パック 10 進数(P) |
| 前へ | 次へ | 目次 | 索引 |