Go to the first, previous, next, last section, table of contents.

レジスタ

マシン上のレジスタの内容は、`$' で始まる、変数と同様の式で 参照することができます。レジスタの名称はマシンごとに異なりますので; `info registers' で、あなたのマシンにおいて使われているレジスタの 名称を調べて下さい。$pc$sp という名称は、 全てのマシンにおいてプログラムカウンタ及びスタックポインタとして使われ ます。また、$fp がカレントのスタックフレームの内容を持つ レジスタとして用いられ、$ps はプロセッサステータスの内容を保持 しているレジスタとして使われています。これらの標準レジスタ名は、あなた のマシンにおいて info registers コマンドを使ってみると、 異なった名称で表示されるかもしれません。例えば、SPARC では、 info registers はプロセッサステータス・レジスタとして $psr を表示しますが、これを $ps で参照することもできます。

GDB は、レジスタ値がこの方法で調査された場合、普通のレジスタが持つ内容を 整数値とみなします。あるマシンはレジスタ値が浮動小数点値とみなされる ような; 浮動小数点値を記憶できる特別なレジスタを持っています。 しかし、(たとえ、あなたが print コマンドを使って、 `print/f $regname' のように浮動小数点値として表示しようと したとしても) 普通のレジスタの内容を浮動小数点値とみなす方法は ありません。

あるレジスタは "raw" や "virtual" という独特のデータフォーマットを 持っています。これは、オペレーティング・システムによって保存された レジスタの内容が、あなたのプログラムから通常見える内容と同じでない データフォーマットのことです。例えば、68881浮動小数点演算コ・プロセッサの レジスタは、"拡張された" フォーマットで保存されますが、全ての C言語プログラムは、結果を "double" フォーマットで要求します。 このようなケースの場合、GDB は、通常、仮想 (virtual) フォーマット (あなたのプログラムが理解できるフォーマット) のみで動作しますが、 `info registers' コマンドは、両方のフォーマットのデータを表示します。

レジスタ値は選択されているスタックフレームに対して相対的 です(see section フレームの選択)。あなたが値を得る時、もし離れたところにある 全てのスタックフレームが破棄され、それらに保存されていたレジスタが 復活されたならば、レジスタは内容を持っています。全てのレジスタの 実際の内容を見る手段としては (`frame 0' などのように) 最深部の フレームを選択しなければなりません。

あるレジスタは、関数値を返すことに使われるという理由のために、 決して保存されることはありません(それらの代表的な値はゼロか1です); これらのレジスタにとって、相対関係は無意味です。

info registers
全てのレジスタの名称と、相対的な値を表示します。
info registers regname
regname で示されるレジスタの相対的な値を表示します。 regname はあなたが使用しているマシンにおいて正当な任意の レジスタ名であり、最初に `$' がつきます。

あなたは、次のように入力することで、プログラムカウンタを16進数で表示 できます。

p/x $pc

また、次に実行されるインストラクションを表示する場合は、次のように 入力します。

x/i $pc

また、スタックポインタに4を足す場合は次のようにします。

set $sp += 4

最後の例は、スタックがメモリの下方へと進むマシン (今日において一般的な マシン) において、スタックから1ワード削除する方法です。 これは、最深部のスタックフレームが選択されていることを仮定しています。 他のスタックフレームが選択されていた場合、$sp への値設定は 許可されません。


Go to the first, previous, next, last section, table of contents.