library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


C.10.3 データ型

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 コードをデバッグする際の重要な情報を次に説明します。

C.10.4.7 パック 10 進数データ付きのコードのデバッグ

Alpha システムでパック 10 進数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。

C.11 MACRO-64 (Alpha のみ)

以下の各節では,デバッガによる 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 ビット単位の同値

C.11.2 言語式とアドレス式の構造

サポートされている, MACRO-64 の言語式とアドレス式の構造を次に示します。

シンボル 構造
<p,s,e> BLISS 同様のビットフィールド

C.11.3 データ型

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)


前へ 次へ 目次 索引