用語:“レジスター”アセンブリ言語プログラミングで
-
03-07-2019 - |
質問
用語を聞いたことがあります:レジスタ、ハードウェアレジスタ、プログラムレジスタ、レジスタファイル。
これらすべての違いは何ですか?そして、簡単に言えば、EAXレジスターのタイプは何ですか?プログラム登録?
解決
レジスタは、CPU内の記憶領域です。以下にいくつかの定義を示します。
- レジスタファイルはレジスタの配列です- http://en.wikipedia.org/wikiを参照してください/ Register_file で詳細を確認してください。
- eaxレジスタは、Intel x86ファミリのCPUのアキュムレータレジスタです-整数計算が行われる場所です。
- プログラムレジスタ(プログラムカウンタを意味すると思います)は、次に実行されるマシンコード命令のアドレスを含む特殊目的のレジスタです
他のヒント
レジスタは、最も基本的なデータストレージデバイスです。これが主な違いです。
レジスタファイルは通常、計算に使用されるように編成されたレジスタの大きなコレクションです。最新のプロセッサでは、すべての計算はレジスタファイル内の複数のレジスタに格納された値の間で実行されます。
ハードウェアレジスタは、一般に、構成およびステータス情報を格納するレジスタを指します。これは、プロセッサまたは一部の外部ハードウェアI / Oデバイスの可能性があります。
プログラムレジスタは、プロセッサによって実行されている現在の命令のメモリ位置を格納する特別なレジスタであるプログラムカウンタを参照できます。
レジスタは、CPU内にある小さなメモリです。アセンブリ言語でさまざまなタスクを実行するために使用されます。
プログラム登録とは、プログラムカウンターのことですか?
まあ、汎用レジスタがあり、それから特別な用途のレジスタ(たとえばプログラムカウンタレジスタ)があり、他にもさまざまなレジスタ(メモリ/セグメントレジスタ、SSE)があります。
EAX、EBXなどは、標準の汎用レジスタです。好きなように使用できます。通常、戻り値はEAXに格納されることになっていますが、基本的にはそうです。次に、スタックポインターEBPがあります。これは、スタックの先頭を指します。最後に、現在の命令EIPを指すカウンターをプログラムする必要があります。 x86では、64ビット整数の計算を行うときに2つのレジスタが融合する特別なケースがあります。文字列命令には、さらに特殊なケースがあります。アセンブリを学習しようとしている場合、最も簡単なのは、より多くのレジスタを備えたPowerPCから始めることです。制限なしですべてを自由に使用できます。
これらのレジスタはすべてハードウェアレジスタです。つまり、CPUに物理的に組み込まれています;)レジスタファイルと呼ばれる場所。
他の種類のレジスタは、レジスタを使用する仮想マシンがある場合です( Parrot )、「仮想レジスタ」を取得します。これは後で実際のレジスタに割り当てられます。これは、コンパイラーを自分で作成するときにできることと似ています。基本的には、レジスターの量に制限はなく(つまり、使用ごとに新しいレジスターを生成する)、異なる段階で実際のレジスターに変換します(レジスターの割り当て) )。
"ハードウェア登録"一部のハードウェアデバイス内の場所を指す場合もあります。たとえば、UART(COMポート)はキャビネットの外側から9または25ピンのD字型コネクタのように見えますが、デバイスドライバーからは、次の文字を保持するいくつかの構成レジスタ、ステータスレジスタ、データレジスタのように見えます送信し、最後に受信した文字。 (ここでは詳細の多くを省略しました。)
x86アーキテクチャでは、これらのレジスタは通常、I / O命令でアクセスされる特別な物理アドレス空間に配置されます。他のプラットフォームでは、ハードウェアレジスタが通常のメモリ空間の一部にマップされるのが一般的です。どちらの場合でも、オペレーティングシステムとそのデバイスドライバーの重要な役割の1つは、アプリケーションコードがハードウェアレジスタの場所とその意味の詳細を知る必要がないようにすることです。
一部の種類のハードウェアデバイスでは、メモリとハードウェアレジスタの区別があまり明確ではありません。たとえば、ビデオアダプタには、個々のピクセルごとに色と輝度の値を保持するフレームバッファと呼ばれるメモリブロックが含まれています。そのメモリは大きなハードウェアレジスタですか、それとも興味深い副作用があるバッファだけですか?
質問に関連して、考慮する必要があるレジスタには2つの一般的なタイプがあります:
- プログラムレジスタ
- ハードウェア登録
ハードウェアレジスタはクロックされ(クロックティックで更新)、プロセッサ回路の物理的デザインで使用されます。
プログラムレジスタはランダムアクセスメモリであり、CPUにあるレジスタファイルに保持されます。アセンブリ/マシンコード命令は、%eax、%esp、%rdi、%ediなどの名前を使用してこれらのレジスタにアクセスします。