バブルソートをz80アセンブリ用に書きましたが、代替レジスタを使用する必要があることがわかりました。しかし、推奨される構文(B ')はうまく動作せず、エラーが発生します。これらのレジスタはどのように使用できますか?代替レジスタを使用するZ80アセンブリ
答えて
シャドウレジスタを直接使用する方法はありません。
代わりにシャドウレジスタに通常のレジスタを交換するためのinstruction EXX
があります。あなたは、割り込みハンドラ外シャドウレジスタを使用する予定がある場合
もdisable interruptsシャドーレジスタを使用しての期間
ダークサイドに自分をしなければならない与えます。
例:お使いのシステムは、割り込みハンドラ中で影のREGSを使用している場合
di ;disable interrupts
exx ;exchange registers BC,DE,HL with BC',DE',and HL'
ld b,8 ;do stuff with the shadow registers
....
exx ;put the normal registers in charge
ei ;re-enable interrupts
)のみ適用されます。
が無効に割り込み、またはお使いのシステムで長い計算をしないでください警告
は、外部入力割り込みハンドラ・プロセスに反応することはできません。
AF:AF 'のシャドウレジスタもあります。
あなたはそうのように、このアクセス:ex
自体のフラグに影響を与えませんが、ex af,af'
はフラグがその影に登録し交換すること
ex af,af' ;exchange af with its shadow register.
注意。詳細情報については
は、以下を参照してください。http://z80-heaven.wikidot.com/instructions-set
注意をbubble sortはアルゴリズムとして吸うと、それは禁止されるべきこと。
代わりにinsertion sortを実装してください。
は、あなたが長い処理を行う行う場合、あなたはシャドウレジスタを使用することはできませんし、push
とpop
を使用して代わりにスタックを使用しなければなりませんスタックルーク
を使用してください。
ld b,8 ;normal processing
push bc ;save bc for later
ld b,9 ;extended processing
... do stuff with bc
pop bc ;throw away the extended bc and restore the old bc.
...いいえ。もう一つの...がある。
スタックがあなたのためにカットしない場合は、ld
を使用して値をメモリに保存する必要があります。
ld b,8 ;do stuff with bc
ld (1000),bc ;store bc for later
ld b,9 ;do other stuff
.....
ld (1002),bc ;store the extended bc
ld bc,(1000) ;restore the saved bc
.... ;continue processing.
メモリを直接扱うことについての素敵な点は、値を捨てる必要がないことです。欠点はスタックよりも少し遅く実行されることです。
割込みを無効にする必要があるのは、割込みハンドラがシャドウレジスタを使用する場合だけです。たとえば、ZX Spectrumでは、ROMからのデフォルトのIM 1ハンドラはシャドウレジスタを使用せず、 'DI 'なしで自由に使うことができます。また、複雑な作業を行う場合は、通常、自分のIM 2ハンドラで終了します。したがって、割り込みによって使用されるレジスタを完全に制御できます。さらに、VSYNCと同期していて、フレームごとに実行時間が安定しているコードがある場合は、どのパートで正常なIRQを取得できないのかを知ることができます。 DIは過大評価されています。 ;) – Ped7g
メモリの保存について... Z80では、 'ld(next_load + 1)、bc'' next_load:ld bc、12345'のような自己修正コードを使用していました。コードはすでにその値のメモリを予約していました)、 'bc/de'レジスタの値を2倍早くロードします。しかし、このようなテクニックは、ソースコードの可読性の理由から強く推奨されていません。Z80でうまく動作すると言います(現代のCPUではなく、場合によってはパフォーマンス上のペナルティが発生します。書き込みが遅すぎる場合は正しく動作します)。 – Ped7g
- 1. Z80アセンブリ.ADDR
- 2. アセンブリ言語でのレジスタの使用
- 3. アセンブリとレジスタ
- 4. PIC /アセンブリ、アセンブリ内のレジスタ
- 5. Z80アセンブリで変数を作成する方法は?
- 6. レジスタは使用しているアセンブリje、jns、jle?
- 7. Snap SVGを使用している間の代替/代替イメージ
- 8. Coldfireでレジスタの代わりにRAMを使用する
- 9. TrueCrypt代替APIを使用
- 10. JSXを使用するリアクションの代替
- 11. Wordpress代替CSSファイルを使用する
- 12. %in%の代替を使用するサブセットデータ
- 13. アセンブリ命令movレジスタ、[register] [register]
- 14. 使用の代替チェックボックス
- 15. フリーダの代替使用
- 16. prop.test代替ステートメントの使用
- 17. Z80メモリリフレッシュレジスタ
- 18. Railsの代わりにsend_fileの代替ファイルを使用する
- 19. 使用するレジスタは
- 20. STM8SF103アセンブリ - RAMレジスタに即値をロード
- 21. CDIで使用する代替Webフレームワーク(JSFの代わりに)
- 22. 代替キーを使用したManyToMany
- 23. gluPerspectiveの代替(glFrustrumを使用)
- 24. のNoSQL FREE代替(代替ravendbする)
- 25. アセンブリ言語+レジスタ間の移動値
- 26. Wcfコントラクト用にインタフェースを代替使用する方法
- 27. ループでレジスタを使用する場合
- 28. FPUとMMXレジスタを "汎用レジスタ"として使用
- 29. Sharepointでの代替データソースの使用
- 30. HashSetでの代替比較の使用
ええと、それは40年ですが、このような質問については[レトロコンピューティングサイト](http://retrocomputing.stackexchange.com)を検討してください。それらは直接アドレス指定できません。 EXX命令を使用してスワップを強制する必要があります。プライマリは高速IRQサービスコードに役立ちますが、一般的なプログラミングではあまり役に立ちません。レジスタが足りなくなった場合は、メモリに値を格納する必要があります。スタックが最適な場所です。 –
ありがとうございますが、これは私の大学のプロジェクトのためのものです。このような古いものに対処しなければなりません。 –
http://stackoverflow.com/jp/documentation/assembly/4802/registers/16904/zilog-z80-registers#t=201703051314568071355(私が書いた非常に少数の記事のうちの1つで、Z80を例として使用していました) – Ped7g