2011-12-26 15 views
3

プログラムカウンタについて読むと、プログラムカウンタはその値を直接変更する方法がないという点で特別です。プログラムカウンタの変更やアクセスは可能ですか?

プログラムカウンタの内容にアクセス/変更する間接的な方法はありますか?

+1

mmm、何についてジャンプしますか? –

+0

PCにアクセスできますか? –

+3

あなたはどのプロセッサについて話していますか? x86?ミップ?腕? ... –

答えて

9

PCを変更した場合、実行される次の命令は、新しいPCアドレスの命令になります。これは単純に無条件のジャンプであり、すべてのプロセッサにそのような命令があります。

通常、LD PC,addr命令はありませんが、正確にはJMP addrと同じです。その値を直接変更することはできません。ただし、コードの実行パスを変更せずに値を変更することはできません。指定されたアドレスから実行が継続されます。

ほとんどの場合、スタックポインタを新しいアドレスを含む場所に設定し、RETリターン命令を呼び出すなどして間接的に行うこともできます。

さまざまなプロセッサとアーキテクチャがさまざまな方法で動作することがあります。私が上記で提案した命令ニーモニックは「汎用」であり、特定の命令セットを指すものではありません。

+0

+1。条件付きジャンプと同様に、 'call'命令がそれを変更することを追加するかもしれません。そして、EAXが指すメモリに格納されているアドレスにジャンプするには、 'jmp eax'(EAXが指すアドレスにジャンプする)と' jmp [eax] 'のようなことができます。また、x86上の 'int'命令は' '呼び出し' 'のようなものです。プログラムカウンタを変更する方法はたくさんあります。 –

+1

@ジム:それは当てはまりますが、無条件ジャンプはPCを変更し、他の何もしません*。最終的にすべての命令は、それをインクリメントするだけであっても、PCを修正することができます。私は非アーキテクチャー/命令セットに特化しようとしていましたが、アドレッシングモードの詳細はわかりません。 my * addr *パラメータは、任意の有効なアドレス表現またはレジスタ間接指定を含むアドレッシングモードを表すことを意図していました。 Amitは、より具体的な答えを望むアーキテクチャを指定する必要がありました。 – Clifford

4

無条件ジャンプ命令は、PCの値を直接変更します。

関連する問題