0

IN / OUT命令を使用して、アドレスが216より大きい周辺機器にデータをロード/保存するにはどうすればよいですか。

IN / OUT命令を使用すると、たとえば、DXのセグメントレジスタが使用されていないため、最初の2つの16OUT DX, ALアドレスにしかアクセスできないことがわかります(DXは16ビット幅であるため)。

私のデバイスの1つはアドレスにあります18000h。どうすれば到達できますか?メモリ/IOスペースがオーバーラップしている(M / IOピンは使用されていない)ので、次のように言っても大丈夫です

MOV BX, 18000h
MOV [BX], AL
4

1 に答える 1

4

IN or OUT指導では無理!

x86 プロセッサは、最大 65,536 個の 8 ビット I/O ポートを含む I/O アドレス空間をサポートします。

インテルのデータシートから:

プロセッサーは、アプリケーションが次の 2 つの方法のいずれかで I/O ポートにアクセスできるようにします。

  • 別の I/O アドレス空間を介して
  • メモリ マップド I/O を介して

I/O アドレス空間を介した I/O ポートへのアクセスは、一連の I/O 命令と特別な I/O 保護メカニズムによって処理されます。メモリ マップド I/O を介した I/O ポートへのアクセスは、セグメンテーションまたはページングによって保護された、プロセッサの汎用移動および文字列命令で処理されます。I/O ポートは、I/O アドレス空間または物理メモリ アドレス空間 (メモリ マップド I/O) またはその両方に表示されるようにマップできます。

于 2011-02-10T16:42:40.103 に答える