日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V7.3-2
ライブラリ

タイトルページ
目次
まえがき
第 1 部:デバッガ概要
第 1 章:デバッガ概要
第 2 部:コマンド・インタフェース
第 2 章:デバッガの起動
第 3 章:プログラム実行の制御とモニタ
第 4 章:プログラム・データの検査と操作
第 5 章:プログラム内シンボルへのアクセス制御
第 6 章:ソース・コードの表示の制御
第 7 章:画面モード
第 3 部:DECwindows インタフェース
第 8 章:DECwindows Motifインタフェースの概要
第 9 章:デバッグ・セッションの開始と終了
第 10 章:デバッガの使用方法
第 4 部:PC クライアント・インタフェース
第 11 章:デバッガの PC クライアント/サーバ・インタフェースの概要
第 5 部:高度なトピック
第 12 章:ヒープ・アナライザの使用
第 13 章:その他の便利な機能
第 14 章:特殊なデバッグ
第 15 章:マルチプロセス・プログラムのデバッグ
第 16 章:ベクタ化されたプログラムのデバッグ
第 17 章:タスキング・プログラムのデバッグ
第 6 部:付録
付録 A :定義済みのキー機能
付録 B :組み込みシンボルと論理名
付録 C :各言語に対するデバッガ・サポートの要約
付録 D :EIGHTQUEENS.C
索引
PDF
OpenVMS ホーム

HP OpenVMS
デバッガ説明書


目次 索引



ベクタ命令を操作する方法には,スカラ命令 ( 第 4.3 節 を参照 ) で使用するもののほかに,次のようなベクタ命令に固有の方法もあります。

  • 画面モード機械語命令ディスプレイを使用すると,プログラムの命令ストリームからデコードしたスカラ命令とベクタ命令を示すことができる。

  • 次のようなコマンドを使用すれば,ベクタ命令のレベルでプログラムを実行できる。
    STEP/VECTOR_INSTRUCTION
    STEP/INSTRUCTION=(opcode[,...])
    SET STEP VECTOR_INSTRUCTION
    SET STEP INSTRUCTION=(opcode[,...])
    SET BREAK/VECTOR_INSTRUCTION
    SET BREAK/INSTRUCTION=(opcode[,...])

  • EXAMINE/OPERANDS コマンドを使用すると現在の PC 値 ( 実行が一時停止している場所 ) で命令を表示できる。この中にはベクタ・レジスタに含まれているオペランド情報も含まれている。また,/TMASK 修飾子と /FMASK 修飾子を使用すると,ベクタ・マスク・レジスタ ( VMR ) の効果をシミュレートしたり,検査済みの命令に関連したマスクを上書きしたりして,特定のレジスタ要素を表示したり表示しなかったりできる。

  • ベクタ命令をプログラム内の特定のメモリ・アドレスで格納できる。

ベクタ命令を検査するか値を格納する場合,デバッガは適用される命令に従ってベクタ命令修飾子を正しく処理します。次の表に,これらの修飾子の機能をまとめてあります。使用法についての詳しい説明は,『VAX MACRO and Instruction Set Reference Manual』を参照してください。

命令修飾子 説明
/U 浮動小数点アンダフロー ( ベクタ浮動小数点命令 ) を使用可能にする。
/V 整数オーバフロー (ベクタ整数命令)を使用可能にする。
/M 意味を変更する (VLD x 命令と VGATH x 命令)。
/0 VMR ビットが 0 の要素に対してだけマスクされた演算を実行する。
/1 VMR ビットが 1 の要素に対してだけマスクされた演算を実行する。



16.4.1 ベクタ命令とそのオペランドの検査

ベクタ命令のあるプログラム記憶位置を検査すると,デバッガはその命令をデコードし,命令とそのオペランドを MACRO アセンブラ形式に変換します。ただし,次の制限事項があります。命令コードについての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。

  • イミディエイト・モードまたはショート・リテラル・モードを使用してベクタ制御ワードをエンコードしないと,デバッガは命令コードを変換できないので,MACRO アセンブラ形式ではなくベクタ構造形式で命令とそのオペランドを表示する。

  • 命令コードが VSMERGEx である場合,デバッガは命令ニーモニックとして VSMERGE を表示する。VSMERGEF,VSMERGED,や VSMERGEG は表示しない。この場合,src.rq リテラル・オペランドは現在の基数のクォドワード整数として表示される。

EXAMINE/OPERANDS .%PC コマンドを使用すると現在の PC 値の命令とそのオペランドを表示できます ( 第 4.3.1 項 を参照 )。ベクタ命令をこのコマンドを使用して検査すると,ベクタ・レジスタ・オペランドの値が配列変数として表示されます。次に例を示します ( Fortran 配列構文 ) 。


DBG> EXAMINE/OPERANDS .%PC
PROG$MAIN\%LINE 81+19:      VSTL    V0,W^-572(FP),S^#4 
V0 contains: 
        0\%V0(0):  137445504 
        0\%V0(1):  137445504 
        0\%V0(2):  137445504 
 
     W^-572(FP) 2145991456 contains 2
DBG>

スカラ命令の場合と同様に,オペランド値は,調べられた命令に適したデータ型で表示されます。

EXAMINE/OPERANDS コマンドを使用する場合,レジスタ要素の表示は次の要素によって異なります。

  • VLR の現在の値。ベクタ・レジスタの最上位の要素 ( 演算が行われ,表示される要素 ) は,VLR の値によって制限される。

  • チェックした命令がマスクされた演算を行っているかどうか。マスクされない演算が行われていると,すべてのレジスタ要素 ( VLR--1 まで ) が表示される。命令修飾子 /1 または /0 があればマスクされた演算が行われている。次に例を示す。


    VVADDF/1   V0,V1,V2 
    


    マスクされた演算の場合,設定された VMR ビットまたはクリアされた VMR ビットに対応する要素だけに演算が行われます。命令修飾子が /1 または /0 のどちらであるかによって決まります。

次の 2 つの例でこれを具体的に説明します。それぞれ,マスクされないレジスタ間の演算とマスクされたレジスタ間の演算を示しています。

次の例では,チェックした命令 VVADDF がマスクされない演算を実行しており,そのため VMR の現在の値は関係ありません。 0 から 5 までのすべての要素が表示されています。


DBG> EXAMINE %VLR
0\%VLR: 6
DBG> EXAMINE %VMR(0:5)
0\%VMR 
    (0):     1 
    (1):     0 
    (2):     1 
    (3):     0 
    (4):     1 
    (5):     0
DBG> EXAMINE/OPERANDS .%PC
PROG$MAIN\%LINE 12:      VVADDF   V0,V1,V2 
V0 contains: 
        0\%V0(0):  7.0000000 
        0\%V0(1):  7.0000000 
            . 
            . 
        0\%V0(5):  7.0000000 
V1 contains: 
        0\%V1(0):  4.0000000 
        0\%V1(1):  4.0000000 
            . 
            . 
        0\%V1(5):  4.0000000 
V2 contains: 
        0\%V2(0):  5.0000000 
        0\%V2(1):  5.0000000 
            . 
            . 
        0\%V2(5):  5.0000000
DBG>

次の例では,同じ VVADDF 命令が,マスクされた演算を実行しています。命令修飾子 /1 を指定すると,セットされた VMR ビット ( ビットの値が 1 ) に一致している要素に対して演算を行います。


DBG> EXAMINE %VLR
0\%VLR: 6
DBG> EXAMINE %VMR(0:5)
0\%VMR 
    (0):     1 
    (1):     0 
    (2):     1 
    (3):     0 
    (4):     1 
    (5):     0
DBG> EXAMINE/OPERANDS .%PC
PROG$MAIN\%LINE 12:      VVADDF/1   V0,V1,V2 
V0 contains: 
        0\%V0(0):  7.0000000 
        0\%V0(2):  7.0000000 
        0\%V0(4):  7.0000000 
V1 contains: 
        0\%V0(0):  4.0000000 
        0\%V0(2):  4.0000000 
        0\%V0(4):  4.0000000 
V2 contains: 
        0\%V0(0):  5.0000000 
        0\%V0(2):  5.0000000 
        0\%V0(4):  5.0000000
DBG>

次の例では,マスクされた演算でデータをメモリからベクタ・レジスタにロードしています。


DBG> EXAMINE %VLR
0\%VLR: 6
DBG> EXAMINE %VMR(0:5)
0\%VMR 
    (0):     1 
    (1):     0 
    (2):     1 
    (3):     0 
    (4):     1 
    (5):     0
DBG> EXAMINE/OPERANDS .%PC   (1)
PROG$MAIN\%LINE 31+12:      VLDL/1   ARR+8,#4,V0   (2)
     PROG$MAIN\ARR(3) (address 1024) contains 35   (3)
V0 contains: 
        0\%V0(0):   0   (4)
        0\%V0(2):   0 
        0\%V0(4):   0
DBG> EXAMINE ARR(1:8)   (5)
PROG$MAIN\ARR 
    (1):     9 
    (2):    17 
    (3):    35 
    (4):    73 
    (5):    81 
    (6):     6 
    (7):     7 
    (8):    49
DBG>

次の番号は,上記の例の番号に対応しています。

  1. EXAMINE/OPERANDS コマンドは,VLDL 命令が実行されようとしていることを示す。この命令は, 図 16-1 に示すように,配列 ARR の ARR+8 バイトで始まるロングワード整数データをレジスタ V0 にロードする。 図 16-1 は,命令が実行されたあとの V0 の内容を示している。配列 ARR には,1 からnまでの索引がついており,0 から n-1 までの索引ではないことに注意する ( Fortran 例 )。

  2. VLDL 命令のストライド値 (#4) は,配列要素の開始アドレス間のバイト数を指定する。

  3. 命令オペランド ARR+8 は,配列要素 3 の開始点 ARR(3) を示している。 EXAMINE/OPERANDS コマンドは演算が行われる配列 ARR の最初の要素だけを表示する ( 項目 を参照 )。

  4. VLR と VMR の現在の値から,VLDL 命令は配列要素 ARR(3),ARR(5),および ARR(7) の内容をそれぞれレジスタ要素 V0(0),V0(2),および V0(4) にロードする。EXAMINE/OPERANDS コマンドは,命令が実行される前の V0 の値を表示する。

  5. 参考として,EXAMINE ARR(1:8) コマンドは,ロード操作に関連したすべての範囲の配列要素を表示する。

図 16-1 メモリからベクタ・レジスタへの配列要素のマスクされたロード




VAX スカラ命令を格納する方法は,ベクタ命令を格納する方法にも適用されます ( 第 4.3.2 項 を参照)。たとえば,次のコマンドは現在の PC アドレスのマスクされた VVMULF ベクタ命令を格納します。


DBG> DEPOSIT/INSTRUCTION .%PC = "VVMULF/0 V2,V3,V7"

ベクタ命令を格納する場合,次のことにも注意してください。命令コードについての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。

  • MxVP 命令と VSYNC 命令のregnum.rwオペランドは,ショート・リテラルとして生成される。

  • ベクタ命令を格納するときは,ベクタ制御ワードを指定できない。デバッガは,命令 ( および命令修飾子があればその修飾子 ) に基づいてベクタ制御ワードを構築し,イミディエイト・モードを使用してそれをエンコードする。

  • VSMERGEx 命令のイミディエイト引数の値は,その命令に関連したデータ型に従って解釈される。たとえば,VSMERGEF 命令の src 引数は,F 浮動小数点値として解釈される。VSMERGE のあとに型接尾辞を指定しないと,デバッガは, src リテラル・オペランドを現在の基数のクォドワード整数として解釈する。



16.5 ベクタ・レジスタまたはベクタ命令を検査するときのマスクの使用方法

演算がベクタ・マスク・レジスタ (VMR) によってマスクされているかどうかにより,EXAMINE/OPERANDS .%PC コマンドがベクタ命令オペランドを表示する方法がどう変わるかは, 第 16.4.1 項 を参照してください。

本節では,任意のマスクを指定して,VMR の効果をシミュレートまたは上書きしたり,次の結果を得る方法を説明します。

  • ベクタ・レジスタまたはメモリ内の配列の特定の要素だけを表示する。

  • チェックした命令に関連したオペランド・マスクがある場合は,これを上書きする。

EXAMINE コマンドで /TMASK 修飾子または /FMASK 修飾子のどちらかを使用してマスクを指定します。

注意

次に,ベクタ・レジスタを検査するときの /TMASK 修飾子と /FMASK 修飾子の使い方を説明します。他に指定しないかぎり,メモリ配列を検査する場合のこれらの修飾子の使用方法も同じです。

/TMASK 修飾子を指定すると,EXAMINE コマンドは,セットされたマスク・ビット ( ビットの値は 1 ) に対応したチェック済みレジスタの要素だけに適用されます。これに対し,/FMASK 修飾子を指定すると, EXAMINE コマンドはクリアされたマスク・ビット ( ビットの値は 0 ) に対応した要素だけに適用されます。

VLR の現在の値は,検査できるベクタ・レジスタの最上位の要素を制限します。ただし,VLR の値はメモリ内の配列の検査には影響しません。

/TMASK 修飾子と /FMASK 修飾子を使用すれば,マスクはマスク・アドレス式の形式で指定できますが省略することもできます。詳しい説明は,次の項を参照してください。

  • 第 16.5.1 項 では,省略時のマスクである VMR とともにこれらの修飾子を使用する方法を説明する。

  • 第 16.5.2 項 では,VMR の任意の断面をマスクとして使用して,これらの修飾子を使用する方法を説明する。

  • 第 16.5.3 項 では,VMR 以外のマスクとともにこれらの修飾子を使用する方法を説明する。



16.5.1 省略時のマスクとしての VMR の使用方法

省略時の設定では,EXAMINE/TMASK コマンドまたは EXAMINE/FMASK コマンドでマスクを指定しないと,VMR がマスクとして使用されます。すなわち,EXAMINE コマンドはセットされた VMR ビット ( /TMASK の場合 ) またはクリアされた VMR ビット ( /FMASK の場合 ) に対応したベクタ・レジスタの要素だけに適用されます。

次の例では,VLR の値は 6 であり,VMR(0:VLR--1) の値は次のとおりです。


DBG> EXAMINE %VMR(0:%VLR-1)
0\%VMR 
    (0):     1 
    (1):     0 
    (2):     1 
    (3):     0 
    (4):     1 
    (5):     0
DBG>

次のコマンドは,V3 の値をマスクを使用しないで示します。 V3 の 0 から VLR--1 までのすべての要素が表示されます。


DBG> EXAMINE %V3
0\%V3 
    (0):       17 
    (1):      138 
    (2):        3 
    (3):        9 
    (4):       51 
    (5):      252
DBG>

次のコマンドは,VMR(i) の値が 1 である V3 の要素 (0 から VLR--1) を表示します。


DBG> EXAMINE/TMASK %V3
0\%V3 
    (0):       17 
    (2):        3 
    (4):       51
DBG>

次のコマンドは,VMR(i) の値が 0 である V3 の要素 (0 から VLR--1 まで) を表示します。


DBG> EXAMINE/FMASK %V3
0\%V3 
    (1):      138 
    (3):        9 
    (5):      252
DBG>

次の例では,命令とそのベクタ・レジスタ・オペランドを検査するときに /FMASK 修飾子が使用されています。EXAMINE/OPERANDS/FMASK コマンドは, VMR(i) の値が 0 であるレジスタ・オペランド要素 (0 から VLR--1 まで) を表示します。


DBG> EXAMINE/OPERANDS/FMASK .%PC
PROG$MAIN\%LINE 341+16:  VVEQLL V0,V1 
V0 contains: 
        0\%V0(1):  0 
        0\%V0(3):  0 
        0\%V0(5):  0 
 
V1 contains: 
        0\%V1(1):  0 
        0\%V1(3):  0 
        0\%V1(5):  0
DBG>



16.5.2 VMR の断面をマスクとして使用する方法

EXAMINE/TMASK コマンドまたは EXAMINE/FMASK コマンドで VMR の断面を指定すると,次の規則に従って出力が表示されます。

  • 指定されたマスク要素の数によって,検査できるレジスタ要素の数が制限される。次に例を示す。


    DBG> EXAMINE %VLR
    0\%VLR: 12
    DBG> EXAMINE %VMR(3:5)
    0\%VMR 
        (3):     1 
        (4):     1 
        (5):     1
    DBG> EXAMINE/TMASK=(%VMR(3:5)) %V0(3:10)
    0\%V0 
        (3):     9 
        (4):    51 
        (5):   252
    DBG>
    


    /TMASK 修飾子でマスクを指定するときは括弧を使用する。

  • 指定された最下位のマスク要素は,指定された最下位のレジスタ要素に適用される。たとえば,EXAMINE/TMASK %V0(4:7) は VMR(0) を V0(4) に,VMR(1) を V0(5) に,などのように適用する。指定された最下位の要素がマスクとレジスタで一致しない場合は,デバッガは演算が行われるマスク要素とレジスタ要素の両方を列挙し,メッセージを発行する。例を次に示す。


    DBG> EXAMINE %VLR
    0\%VLR: 12
    DBG> EXAMINE %VMR(4:7)
    0\%VMR 
        (4):     1 
        (5):     0 
        (6):     1 
        (7):     1
    DBG> EXAMINE/TMASK=(%VMR(4:7)) %V0(3:10)
    %DEBUG-I-MASKMISMATCH, mask/target subscripts do not match, 
                           displaying mask 
    0\%V0 
        %VMR(4):    1 
        %V0(3):     9 
        %VMR(6):    1 
        %V0(5):   252 
        %VMR(7):    1 
        %V0(6):    56
    DBG>
    



16.5.3 VMR 以外のマスクの使用方法

EXAMINE/TMASK コマンドまたは EXAMINE/FMASK コマンドで VMR 以外のマスク・アドレス式を指定すると,次の規則に従い,そのアドレスの値がマスクとして使用されます。

  • マスク・アドレス式が論理型配列を示していると,省略時の VMR の基本的な使用方法と同じ方法でその値がマスクとして使用される。次の例では,要素が 4 つの BOOL_ARR という論理型配列変数がマスクとして使用される。


    DBG> EXAMINE %VLR
    0\%VLR: 6
    DBG> EXAMINE BOOL_ARR
    PROG$MAIN\BOOL_ARR 
        (0):       0 
        (1):       0 
        (2):       1 
        (3):       0
    DBG> EXAMINE/FMASK=(BOOL_ARR) %V0
    %DEBUG-I-MASKNOTVMR, mask used is not %VMR, displaying 
                         specified mask 
    0\%V0 
        BOOL_ARR(0):   0 
        %V0(0):       17 
        BOOL_ARR(1):   0 
        %V0(1):      138 
        BOOL_ARR(3):   0 
        %V0(3):        9
    DBG>
    


    この例に示すように,VMR 以外のマスクを使用すると,デバッガは演算を行うマスク要素とレジスタ要素の両方を表示して,メッセージを発行する。

  • マスク・アドレス式が非論理型配列を表していると,各配列要素の最下位ビットが対応するレジスタ要素のマスクとして使用される。

  • マスク・アドレス式が論理スカラ型を表している場合,その値が最初のレジスタ要素のマスクとして使用される。それ以外の要素は検査されない。次の例では,単一要素の変数である BOOL_VAR がマスクとして使用される。


    DBG> EXAMINE BOOL_VAR
    PROG$MAIN\BOOL_VAR:   1
    DBG> EXAMINE/TMASK=(BOOL_VAR) %V0
    %DEBUG-I-MASKNOTVMR, mask used is not %VMR, displaying 
                         specified mask 
    0\%V0 
        BOOL_VAR:    1 
        %V0(0):      17
    DBG>
    

  • マスク・アドレス式がそれ以外の型を表している場合,その最下位ビットの値が,最初のレジスタ要素のマスクとして使用される。それ以外の要素は検査されない。

  • マスクが VMR であるときと同様に,指定されたマスク要素の数によって検査できるレジスタ要素の数が制限される ( 第 16.5.2 項 を参照 )。

  • 複数要素マスクの場合,マスクが VMR であるときと同様に,指定された最下位のマスク要素が,指定された最下位のレジスタ要素に適用される ( 第 16.5.2 項 を参照 )。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項