2012-02-02 11 views
4

私はIntelマイクロプロセッサー第8版を読んでいました。そのレジスタが適用中に使用されているので、Core2の通じ8086のプログラミングモデルが考えられている命令ポインタはプログラムに見えるレジスタですか?

プログラミングモデルプログラム見えるようにする

enter image description here

:私は、次のテキストに出くわしましたプログラミングによって決定され、命令によって指定される。この章の後半で詳述される他のレジスタは、アプリケーションプログラミング中に直接アドレス可能ではないため、システムプログラミング中に間接的に使用される可能性があるので、プログラム不可視とみなされます。

これは、8086および8088のすべての命令が命令ポインタを含むプログラム可視レジスタであるという考えを生じさせる。そうですか?

答えて

6

あなたは直接命令ポインタに触れることはできませんが、簡単なトリックとする必要がある場合は、それを得ることができます。

fetch_eip: mov eax, [esp] 
      ret 

その後:

call fetch_eip 

値を出してあげることの命令ポインタeaxに入力します(fetch_eipにコールするときに、espが参照していたスタックポインタが何であってもかまいません)。

eipmov操作の宛先にすることはできません。したがって、eipを直接操作することはできません。それに影響を及ぼす唯一の方法は、ジャンプ操作、コール操作(このトリックによって悪用される)、およびその他の限定されたケースです。

+4

x86-64では 'lea rax、[rip]'で 'rip'の値を直接読み取ることができます。 –

1

命令ポインタはすべて8086個のレジスタの一覧については、この記事を参照して、特別な目的のレジスタである:一般的にInside the 8086 Central Processor Unit (CPU)

IPは、「目に見えるプログラム」であるために理由はありません。その値は、callまたはjmpのような制御フローに影響する命令を使用するコードの影響を受けます。 IPの実際の値は必須ではありません。

関連する問題