質問

最初は少します。の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築を含む類似の制御の指導

役に立ちましたか?

解決

かなり共通の命令機械の時代が多くある他の場所です。

など

他のヒント

DJNZための

ActualyにおけるIA-32の直接等価物はLOOPcc(LOOPZ)です。 Z80を覚えていると8086は同じ前身インテル8080 のを持っています。 すべてのx86 CPUを直接継承DJNZ命令はそう!

IA-32がカウンターとしてCXを使用して、様々なREP*命令を有する

PowerPCはbdnzと特別なカウントダウンレジスタctrを持っています。 (メモリが提供する場合)を使用すると、例えばctrbdnzの上に条件を追加することができるように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ファミリ上でこのような何かを得るとは思わない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top