質問: i / oポートアドレスとデータはどのように送信されますか? まず第一に、これはハードウェアレベルの質問であり、x86アセンブリの「in」および「out」コマンドに非常に密接に関連していると言いたいです。かなり前から検索してきましたが、アドレスやデータの送信方法はまだわかりません。 8086は最初にアドレスを送信し、次にデータを送信しますか?その場合、8086が16ビットアドレスと8ビットアドレスのどちらを送信しているかをレシーバはどのようにして知るのでしょうか。それとは別に、8255がどのように機能するか、および「ポート60h」などの特定のポートをどのように受け入れるかについても学びたいと思います。読んでくれてありがとう! :d
回答: 8086プロセッサについて述べたように、8086を参照して説明します。8086は16ビットプロセッサ(16ビットデータバスの意味:キャリーアウトまたはキャリーインの物理ラインの数は16ラインのaluサイズの場合もあります)および20ビットアドレスバス(20ビットアドレスバスの意味:アドレスを実行するための物理的な行数は20です。これらの行は8086ピンにすぎません。8086ピンの数を節約するために、16データバスラインと16アドレスラインが多重化されます(マシンサイクルの最初の部分では、16ラインがアドレスバスとして機能し、後でデータバスラインとして機能します)。そのため、ピン数が削減されます。今、あなたの主な質問の答え:case:1(8086はメモリ内のバイトにアクセスしたい)8086は2 ^ 20(アドレスバスサイズ)の場所をアドレス指定でき、各場所はバイト(8ビットのデータ)を保持し、(2 ^ 10 x 2 ^ 10 = 1024(1k)x1024(1k)=> 1m)最終的には1mbyteになるはずですメモリ:usbドライブ(2gb、4gbなど)のように、1mbのメモリチップに1024kのメモリロケーションがあり、各ロケーションに8ビットのデータユニット容量があるとすると、各メモリロケーションにはアドレスがあり、ロケーションにはバイト(8ビット)が保持されます。8086プロセッサが最初にアドレスのバイトにアクセスする場合は、アドレスを1mbのメモリチップに送信します(0x20002)場所と言います。この1mbのメモリチップは、8086アドレスバスとデータバスに接続されています。それは以下のようです 1mbメモリチップへのアドレスバス上の8086アドレス 1mbのメモリチップは、アドレスバス(0x20002)でアドレスを受け取ります 8086はしばらくの間、メモリ待機時間と同期します(メモリはプロセッサよりも遅い場合があります) 1mbのメモリチップは、データバスライン上の要求されたバイトを8086に送信します 8086が受信バイトを読み取る メモリが合計1mb(512kb + 512kb)の2つの512kbチップのようなメモリチップのスタックである場合、別のケースがあります。この場合、各メモリチップには19本のアドレスラインがあります(512k = 512 x 1024 => 2 ^ 9 x 2 ^ 10)メモリを有効にするchip selectと呼ばれる1つの重要なライン両方のメモリチップアドレスラインは8086アドレスバスに接続されていますが、8086には20本のアドレスラインがあるため、1本のライン512kbチップを有効にする512kメモリチップのチップセレクトラインを接続するために使用されます。ここで、1つのアドレスラインには2つの状態があります:0または1 0:1つのメモリを選択するために使用されるchip-a-521kb + 19アドレスライン 1:2番目のメモリを選択するために使用されますchip-b-521kb + 19アドレスライン 256バイト容量(2 ^ 8)のメモリサイズの場合、8つのアドレスラインとチップセレクトラインがあります上記の場合、8086の8本のアドレスラインが256バイトのメモリチップに接続されていますが、リーマはメモリチップのチップ選択ラインに接続されていますnorゲートの出力がすべて1の場合入力がゼロですここでは、8086の20行のアドレス行(a19-a0)を考えてみましょう。 アドレスラインa7-a0は256バイトのメモリチップに接続されています リーミングアドレスライン、つまりa19からa8は、14入力を介してメモリチップのチップセレクトラインに接続されますnorすべての入力がゼロの場合、出力が1のゲートie(a19-a8 = 0x0 00) 上記の手順は、アドレスデコードと呼ばれます4。 256バイトのメモリチップのアドレス範囲は(a7-a0 => 0x00から0xff)ですが、8086には20本のアドレスラインがあるため、リーミングラインは256バイトのメモリチップのチップセレクトにnorゲート最終アドレス範囲は0x000 00から0x000 ffであり、この方法で256バイトのメモリチップがアドレス指定されます。 このようにして、プロセッサはアドレスとデータバスの助けを借りてメモリチップからデータにアクセスしますケース:2(一部のデバイスは8086にデータを送信する場合があります)ここで説明するのは非常に複雑ですが、すぐにこの質問に追加します最後に約8255を参照してください intel 8255 wikiページ