2

私は Intel 8080 命令セットをエミュレートしようとしていますOUT D8が、本Intel 8080/8085 Assembly Language Programmingによると、この命令に行き詰まりました。

OUTこの命令は、アキュムレータの内容を 8 ビットのデータ バスに配置し、選択したポートの番号を 16 ビットのアドレス バスに配置します。ポート数は 0 ~ 255 であるため、アドレスバス上でポート番号が重複しています。

問題は、これが何をするのか理解できなかったということです。誰かが私にそれを説明してくれるか、それを説明している記事や本を紹介してくれませんか?

4

2 に答える 2

2

これについて考える 1 つの方法は、8080 およびその派生製品には、通常引用される 16 ビット バスではなく、17 ビット アドレス バスがあるということです。そのアドレス バスの最上位ビットは、チップの入出力要求ライン (IORQ) です。

通常のロードとストアを使用すると、最上位ビットは常にリセットされます。インまたはアウトを実行すると、常に最上位ビットが設定されます。

Intel がラインに名前を付け、周辺チップとの通信に使用されることを期待していたため、その名前、利用可能なアドレッシングのはるかに制限された形式、アクセスの拡張コスト、およびプログラムカウンターもスタックポインターもそれを指すことができないという事実アドレス空間の領域。

これにより、Intel は 16 ビットのアドレス バスを使用しているにもかかわらず、8 ビットのパラメーターしか使用していないという問題を抱えています。彼らが実際に行うことは、アキュムレータを上位 8 ビットにロードすることです。あなたが持っていた場合:

LD A, 0xfe
OUT (0xdc)

次に、値 0xfe がポート アドレス 0xfedc に出力されます。

(余談: Intel ではなく Zilog 構文の謝罪。おそらく興味深いことに、Z80 は、OUT (C), A単なる C ではなく BC 全体を実際にアドレス バスにダンプするような一連の命令を追加し、ほとんどの Z80 マイクロ メーカーは完全な 16 を使用することに完全に満足していました。 -外部周辺機器用にまともな範囲を残しながら、「このアドレスラインが低い場合にコンポーネントがアドレス指定されている」という単純化されたロジックを使用できるようにするためのビットアドレス)

于 2012-12-06T19:17:33.877 に答える
1


エミュレーションの場合、エミュレートされたデバイスにIN / OUTポートが存在する場合を意味します-
エミュレートされたデバイスにメモリマップポートがある場合、ポートの単純なIN / OUTデータ-
次に
OUT AB-> STA ABAB
IN 12-> LDAX 1212

ハードウェア開発者にとっては、in/out が実行されると、アドレス バスに a15-8 = a7-a0 および =portNum があることを意味します。

于 2013-10-16T09:46:13.160 に答える