プロセッサレジスタとIOレジスタは同じ概念ですか?
それらはCPUに登録されていますか、それともいくつかのIOデバイスに登録されていますか?
IOレジスターから このスーパーユーザーの質問 をピックアップしました。
プロセッサレジスタ-一般に、CPUが実行する操作に関係するものは、そのレジスタの1つにある必要があります。
たとえば、 this を見てください。これは、Intel x86ADD
命令のさまざまな形式です。 2つのレジスタを一緒に追加することも、メモリ位置の内容と一緒にレジスタを追加することもできます(「アキュムレータ」は単なる別のレジスタ、「即時」はデータがメモリ位置に直接あることを意味する、または「すぐに」 「実際のADDオペコードの後)。 ADD mem,mem
はありません。
ARMなどのRISCCPUは、さらに柔軟性が低くなります。 CPUがADD
、SUB
などを実行する前に、メモリからのデータを常に別個の操作としてレジスタにコピーする必要があります。彼らはこれを補うためにもっとたくさんのレジスターを持っています。
I/Oレジスタ-一般に、I/Oチップセットまたはデバイスが実行する操作に関係するものは、そのレジスタの1つに含まれている必要があります。
たとえば、 this を見てください。標準のVGA「CRTCレジスタ」の詳細です。特に興味深いのは、「開始アドレス高」および「開始アドレス低」レジスタです。これらのレジスタの値は、ディスプレイをレンダリングするためにメモリの読み取りを開始する場所をVGAに指示します。
CPUからI/Oレジスタにアクセスできるようにする方法はたくさんあります。通常、上記のプロセッサレジスタとは異なります。さまざまな方法が含まれます。
IN
およびOUT
命令があります。これらはアドレスを指定しますが、RAMが接続できるアドレスは指定しません。 I/Oデバイスはこれらのアドレス(通常は「ポート」と呼ばれ、TCPポートと混同しないでください)に接続し、この方法でレジスタにアクセスできるようにすることができます。上記のVGACRTCレジスタの例を続けて、上記の「I/Oポート」を説明した方法で、理解するための知識を身に付けました this そして特定のOUT
命令を発行することでCPUを理解しますVGAチップセットによって保持および使用されるVGAのI/Oレジスタの値を変更します。
すべてのI/Oデバイスにレジスタがあるわけではありません。いくつかは本当に単純で、彼らのことをするためにある種の信号を必要とするだけです、そしてまたデバイスを「読む」ことはただ現在の状態を報告します。 古いPCの「ゲームポート」 は一例です。実際にはデータの保存が行われていないため、レジスタと呼ぶのは技術的に正しくない可能性があります。ただし、ほとんどの技術文書ではこの区別はされていません。
レジスタはデジタルストレージ領域を指すために使用される任意の用語であるため、I/Oレジスタの概念を一般的な ハードウェアレジスタ と比較できます。 。レジスタは、 アキュムレータ として機能し、実行情報を保持し、デバイス間に入出力バッファを提供するなどのことができます。これは、 プロセッサレジスタ が単なるハードウェアの一種であることも意味します。登録。
したがって、I/Oレジスタは、レジスタの抽象化でもあり、コンポーネント間を移動する中間データを保持します。プロセッサしない特定のI/Oレジスタではなく、同じタスクを実行できるさまざまな汎用レジスタ(たとえば、システムの場合に使用される) メモリマップドI/O )を使用します。これらは、CPUとシステムのメモリの間に共通のインターフェイスバスを提供するために使用されますが、MMIOの場合は、実際のアドレスバスから外部デバイスのメモリにアクセスできるようにします。
プログラマーは実際にこれをどのように行うでしょうか?外部デバイスがシステムのアドレスバスにどのようにマップされるかを決定し、さまざまな x86レジスタ のいずれかを使用してアドレスを(インデックス/ポインタレジスタに)格納する必要があります。次に、このレジスタを使用して( マシン命令 とともに)、プロセッサ内の別のレジスタとデバイス上のレジスタとの間でデータを転送できます。
CPUがMMIOをサポートしていない場合(またはプログラマーがMMIOを使用しないことを決定した場合)、x86の場合、ポート(基本的に別のバス)からの I/Oの特別な命令 も存在する可能性があります。 )。これらの命令(IN
およびOUT
)は、 MOV
命令 と同様に機能します-同じプロセッサレジスタを使用します。唯一の違いは、インデックス/ポインタレジスタのアドレスの意味です(これらのレジスタは 異なるI/Oアドレスマップ を使用するため)。
これが、I/Oレジスタが他のCPUレジスタを抽象化したものであると私が言う理由です-それらは同じものの1つです。データは、中間結果、RAMとの間のデータ転送、または外部ハードウェアへのアクセスに使用されるかどうかに関係なく、プロセッサに出入りして同じレジスタに移動します。
マザーボードのレイアウトに応じて、CPUは、実際のアドレスバス自体、またはCPUのポートに接続された別のバスを介して外部デバイスのメモリにアクセスする場合があります。ただし、これはすべて、通常、マザーボードの northbridge メモリアクセス用、および southbridge 周辺機器アクセス(ビデオカード、マウス/キーボードなど)によって制御されます。
最後に、 [〜#〜] dma [〜#〜] の概念に精通している場合は、外部周辺機器自体に、コンピューターのRAMからのI/O専用に指定されたレジスタを含めることができます。 DMAは基本的にCPUの介入を回避するため、プロセッサレジスタの概念はここでは適用できないことに注意してください。
最後に、コンピュータ内のすべてのデバイスには、直接がCPUに接続されていないため、何らかのレジスタがあります。接続されている場合は、CPUクロックサイクルを無駄にします。デバイスがそれを使用するのに十分な時間があるまでのバス上のデータ(CPUは通常、どのシステムでも最速のクロックを持っています)。これは、デバイスがデータを処理する前にデータを格納する場所が必要な理由の1つにすぎません。これが、基本的にすべてのレジスタです。
概念的には、I/Oレジスタとプロセッサレジスタは同じものです。これらは両方とも、処理操作用のストレージのデータ保持ユニットです。
違いは地域性の1つです。 I/OレジスタとCPUレジスタはすべて同じファミリの一部です。ハードウェアレジスタ。 CPUレジスタはCPU内に存在し、I/OレジスタはI/Oデバイス自体のデジタルプロセッサ上のCPUの外部に存在します。
詳細情報: ハードウェアレジスタ 、ハードウェアレジスタ全般について説明し、さまざまな種類について説明します。
通常の使用では、「I/Oレジスタ」はマイクロプロセッサの一部であり、マイクロプロセッサのI/Oピンに物理的に接続されているレジスタです。
マイクロプロセッサCPUは、I/Oピンを介してのみ外界と通信できます。マイクロプロセッサの内部ロジックがこれを行うには、いくつかの方法があります。内部バスがある場合、外部アドレスとデータバスに接続されたピンを暗黙的に使用するメモリアクセスコマンドがある場合、値を設定するための明示的なコマンドがある場合があります。特定のピンの。一般的な方法の1つは、レジスタを表すロジックを用意することです。このロジックの値は、I/Oピンの意味、状態、および値を制御します。これらの「レジスタ」(通常は実際の物理レジスタ)はI/Oレジスタです。
たとえば、ATtiny261Aのデータシートを参照してください http://ww1.microchip.com/downloads/en/DeviceDoc/doc8197.pdf
「PortB」は、8つのI/Oピンの論理表現です。レジスタリスト内のレジスタの名前であり、本文中ではI/Oレジスタと呼ばれます。 「GPIOR1」は、レジスタリストの別のレジスタです。これは、「ポートB」のようなI/Oレジスタにデータを送信するために使用される、物理ピンに接続されていない「汎用」I/Oレジスタです。