3

最初に少し背景。z80 CPUには、ループと同様の方法で使用できる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アーキテクチャに同様の制御命令が含まれているのかということです。

4

9 に答える 9

7

実際、IA-32でDJNZに直接相当するのは、LOOPcc(LOOPZ)です。Z80と8086には同じ前身のIntel8080があることを忘れないでください。したがって、すべてのx86 CPUはDJNZ命令を直接継承します!

于 2010-02-22T08:19:29.617 に答える
3

IA-32にはREP*、CXをカウンターとして使用するさまざまな命令があります

于 2010-02-22T03:30:12.000 に答える
3

それはその時代の機械でかなり一般的な指示であり、他の多くの場所でも発生します。

等々

于 2010-02-22T03:35:51.760 に答える
3

PowerPCにはbdnz、特別なカウントダウンレジスタを備えた命令がありますctr。デクリメントctrと条件付き分岐は通常の条件テストの上にあるため、条件を追加できます。たとえば、小bdnzt eq, labelなりビットが設定されていてctr、デクリメント後に正の場合に分岐します。

皮肉なことに、ctr間接的な関数呼び出しアドレスにも使用されます。したがって、レジスタの特別な利点は、それを保存および復元するコストよりも重要bdnzであるため、間接呼び出しを伴うループではかなり役に立たなくなります。「ゼロでない場合は新しい値にctrデクリメントして分岐する」という命令のエンコーディングが存在しますが、これは特に禁止されており、トラップされています。ctr(とにかくNULLポインターをチェックしません。)

于 2010-02-22T04:05:59.613 に答える
2

PDP-11(1970年頃)はZ-80より約5年前のものであり、少なくとも一部のモデル(おそらく初期のモデルではない)には、減算1と分岐の命令がありました。

sob R, offset
于 2010-02-22T03:53:32.753 に答える
2

PIC18などの一部のPICマイクロコントローラには、DECFSZ(ファイルをデクリメントしてゼロの場合はスキップ)命令があります。私はよくDECFSZの後にブランチを配置しました。

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

実際には使用されていない単一の命令セットコンピュータが存在します。ただし、単一の命令セットマシンの1つは、「ゼロ以下の場合は減算および分岐」(subleq)マシンです。ウィキペディアにはこれについての詳細があります

しかし、私はこのような命令を持っている他の実際のマシンを知りません。私はRISCマシンが好きですが、実際にはその必要性も感じていません。

于 2010-02-22T03:32:04.780 に答える
1

x86には、まったく同じことを行うLOOP命令があります(ECXのカウンターを使用)。LOOPと一緒に使用することを目的としたJECXZ命令(ECXがゼロの場合はジャンプ)もあります。ループの前に配置して、最初にカウントがゼロだった場合にループ全体をスキップできるようにします。

このような:

  ;number of iterations in ECX
  JECXZ end
start:
  ;loop body
  LOOP start
end:

ただし、これらの命令は、現在のCPUではひどく非効率的であることに注意してください。通常のCMP/SUBおよびJcc命令を使用することをお勧めします。ちなみに、Intel Core2 CPUは、実際には、比較とジャンプの命令ペアを単一の命令であるかのように扱うことができます。これを「マクロ操作融合」と呼びます。

于 2010-03-15T17:16:21.663 に答える
0

Z80はCISCプロセッサでした。DJNZは、複雑な命令の典型的な例です。現代の流行は、より小さく、より単純で、より高速な命令を好むが、特に高度なパイプライン機能を使用して、より迅速に処理できるRISC命令セットに向けられています。たとえば、ARMファミリではこのようなものは得られないと思います。

于 2010-02-26T22:46:21.180 に答える