2010-12-14 6 views
0

プロセッサでは、データ、アドレス、命令はどのように区別されますか?プログラムが実行されるとき、プロセッサはすべてが0になると命令を区別する方法はs and 1です。レジスタは両方のデータ、アドレスをロードしますか?プロセッサ、レジスタ、メモリでデータ、アドレス、命令がどのように区別されますか?

+0

を1つの答えで「認識」するか、または区別することができますか? –

答えて

0

アプリケーションを起動すると、プログラムのテキストデータがどこにあるかをeip(プログラムカウンタ)に設定します。テキストデータはコード(0..1)です。ここから、eipに置かれたアドレスから命令を実行し始めます。命令は、CPUが例外(このレベルで割り込み)をスローする命令ではない何かを実行しようとすると、CPU(またはキャッシュ)の近くのROMに定義されます。命令であるかどうかを知っているかどうか、フェッチしているforeach命令がromとハッシュテーブルをチェックして有効な命令であるかどうかを調べることは想像できません。

多くのことがXDDで行われるため、これは非常に簡単な問題です。

3

プロセッサは、実行するように指示します。ご存知のように、プロセッサはメモリ内の "データ"と "コード"の違いを知ることはできません。それは、それがどのように扱われるかを定義するそれらのバイトを使って行うべきことです。

プログラムがコンパイルされると、生成された実行可能ファイルには、コードのパーツとデータのパーツという情報が含まれています。プログラムが実行されると、オペレーティングシステムはコードとデータをメモリの異なる部分にロードし、プロセッサにプログラムのエントリポイントでコードの実行を開始するように指示します。そこから、プロセッサは最初の命令をフェッチして実行し、次の命令に移ります。

これはすべて非常に簡略化されていますが、私はあなたがその考えを得ていると思います。

古いプロセッサと古いオペレーティングシステムでは、データセグメントの途中にある命令の実行を開始するようプロセッサに指示するものはありません。実際には、コードセグメントの途中で「データ」を変更することによって、自己修正コードを作成することができます。新しいプロセッサとオペレーティングシステムは、通常、コードの変更を防ぐために、何らかの形でデータの実行を防止しロックします。さもなければ、自己修正コードは巨大なセキュリティリスクになることがあります。

短い答え:プロセッサはコードをコードとして扱います。それ以外の場合は、すべてがメモリ内のバイトだけです。

2

さまざまなレジスタは、コンピュータ上で実行されているプロセス内のさまざまなメモリセグメントをプロセッサが識別するのに役立ちます。プログラムがコードセグメントレジスタ(cs)を開始し、命令ポインタ(ip/eip/rip)がコードの位置を指し示すように設定され、データセグメントレジスタ(DS)と汎用レジスタ)を使用してデータセグメントをポイントします。 Intel x86アーキテクチャーがほとんどですが、一般に、ほとんどのアーキテクチャーは、コード領域をデータ領域から区切り、スタック区画と同様に区切るためのレジスタを持っています。これらのレジスタを介して、CPUはコードアドレス

関連する問題