現Z80DJNZの命令その他の建築?
-
22-09-2019 - |
質問
最初は少します。のz80CPUの指示という DJNZ 使用できるので、様として for
ループを実行します。基本的にはDJNZを減ら、Bの登録およびジャンプ、ラベルがない場合はゼロになります。例えば:
ld b,96 ; erase all of the line
disp_version_erase_loop:
call _vputblank ; erase pixels at cursor (uses b reg)
djnz disp_version_erase_loop ; loop
もちろんおなじものを比較飛び指示がある事が多く使えて便利にシングル。
これは、私の質問は、他のCPU築を含む類似の制御の指導
解決
かなり共通の命令機械の時代が多くある他の場所です。
- Corewarに対応していますので使用DJN指導前-減少に対応モード.
- 同様に のm68kの支援BNEプ壊モードへの対応.
- ミニマリスト- PDP-8と同様の指示
ISZインクリメントオペランドとスキップの場合、結果はゼロになります。
など
他のヒント
ActualyにおけるIA-32の直接等価物はLOOPcc(LOOPZ)です。 Z80を覚えていると8086は同じ前身インテル8080 のを持っています。 すべてのx86 CPUを直接継承DJNZ命令はそう!
IA-32がカウンターとしてCXを使用して、様々なREP*
命令を有する
PowerPCはbdnz
と特別なカウントダウンレジスタctr
を持っています。 (メモリが提供する場合)を使用すると、例えばctr
、bdnz
の上に条件を追加することができるようにbdnzlt cr5, label
と条件付き分岐は、実際の条件テストとは独立したデクリメント満たないビットCR5に保存されているかどうかをチェックし、いずれかのANDまたはORでそのctr
の状態が0になってきます。
は皮肉なことに、ctr
は、任意の間接的な関数呼び出し先を格納するために使用されます。 「その新しい値にデクリメントctr
と分岐そうでない場合はゼロ」命令をコーディングすることは可能ですが、これを具体的に禁止されている、それはそう。 (それはとにかくNULLポインタをチェックしません。)やや大きく、bdnz
は間接呼び出しでループではなく、無駄になります。
PIC18のようないくつかのPICマイクロコントローラは、DECFSZ(デクリメントファイルとスキップゼロの場合)命令を持っています。私はよくDECFSZはブランチが続く入れてます。
実際に使用されていない単一の命令セットコンピュータは、存在します。しかし、単一の命令セットマシンの一つが「引くと枝未満の場合またはゼロに等しい」(subleq
)マシンです。 ウィキペディアこのの
私は、まさにこのようなものの命令を持っている任意の他の実マシンを認識していませんよ。 I RISCマシンのような、本当にどちらか、それの必要性を見ない。
はPDP-11(1970年ごろ)、約5年間でZ-80前から存在し、少なくとも一部のモデル(ただし、おそらくない初期のものは)持っていた。の減算-1-とブランチの命令ます:
sob R, offset
x86では(ECXでカウンターで)正確に同じことを行いLOOP命令があります。 LOOPと一緒に使用されることを意味している(ECXがゼロであればジャンプ)JECXZ命令もあります - 。カウントが始まりでゼロだった場合は、ループ全体をスキップできるように、ループの前に置きます。
このように:
;number of iterations in ECX
JECXZ end
start:
;loop body
LOOP start
end:
しかし、これらの命令は、現代のCPU上恐ろしく非効率的であることに注意してください。これは、通常のCMP / SUBとJCC命令を使用して多くの方が良いでしょう。サイドノートでは - それは、単一の命令であるかのようにインテルCore2のCPUは、実際に比較+ジャンプ命令のペアを処理することができます - 彼らはそれを呼び出す「マクロOpsフュージョン」
。Z80は、CISCプロセッサでした。 DJNZは、複雑な命令の典型的な例です。特に高度なパイプライン機能を備えた - 現代のファッションは小さく、シンプルな、より高速な指示を好むが、より迅速に処理できるRISC命令セットに向かっています。私はあなたが例えば、ARMファミリ上でこのような何かを得るとは思わない。