2011-02-10 11 views
0

IN/OUT命令で2^16より大きいアドレスにデータをロード/ストアする方法を教えてください。 IN/OUT命令を使用すると、OUT DX, ALと言うと、DXのセグメントレジスタが使用されていないので、最初の2^16アドレスにしかアクセスできない(DXが16ビットなので)ことがわかります。8086システムIN/OUT簡単な質問

私のデバイスの1つは、18000hです。どうすればそれに到達できますか?メモリ/ IO空間overlapps(M/IOピンが使用されていない)ので、私は物事のこの種の非常に新しいですので、私はから任意の助けを本当に感謝

MOV BX, 18000h 
MOV [BX], AL 

のようなものを言ってokです古い、ハードコア、asmのプログラマー、あなたのいずれかがここにいる場合:) ありがとう。

答えて

3

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)またはその両方に表示されるようにマッピングできます。

+0

Ok、私はすでにそれを知っています。私はスキーマを変更しました。その組織は不必要に複雑でした。今ではすべての周辺が65536未満ですので、(少なくとも紙の上で)うまくいくはずです:))。答えをありがとう。 – Klark

0

システムが386以降の場合は、オペランドサイズのオーバーライド接頭辞を使用すると、 "out edx、al"となります。 edxを最初にロードするには、同じプレフィックスを使用する必要があります。 Alには標準8086 mnemomicがロードされています。