1

私は楽しみのために 4 ビット命令を使用して 8 ビット プロセッサ アーキテクチャをレイアウトしていますが、4 ビット命令にはいくつかの制限があります。

SHR(右シフト) と(左シフト) の命令を含めたいのSHLですが、それらを入れる余地がないようです。私は現在、JGE(より大きいか等しい場合はジャンプ)、JLE(より小さいか等しい場合はジャンプ)、 JFE(等​​しい場合はジャンプ)、(等​​しくない場合はジャンプ)を持っていますJNEが、これらの4つすべてが必要かどうか疑問に思っています。

JFEこれら 4 つのジャンプ条件はすべて、きれいなコードに必要ですか、またはandJNEに対してSHRandを安全に削除できSHLますか?

編集:私は持っていますがJMP、絶対ではありません。

4

3 に答える 3

4

Carl Norum の回答に加えて、無条件ジャンプ命令 (JMP) をサポートしている場合、JFE があれば、JFE を JMP にコーディングできるため、その補数である JNE は必要ありません。同様に、JG、JFE、および JMP がある場合、JLE は必要ありません。

シフトの場合、命令が引数を取り、その引数が単語サイズよりも大きな値を許可する場合、左シフトと右シフトに同じ命令を使用して、引数の値がどちらであるかを決定できます。

于 2013-01-22T19:19:28.550 に答える
3

JFE と JNE を削除する 1 つの方法を次に示します。

このコードは、テストが等しいかどうか (venue_equal に分岐する) かどうか (enknown_not_equal に分岐する) に応じて、さまざまな場所に分岐します。

   JGE maybe_equal
   JLE definitely_not_equal
maybe_equal:
   JLE definitely_equal
   JGE definitely_not_equal

これがクリーンなコードと見なされるかどうかは、あなたの判断にお任せします...

于 2013-01-22T19:20:21.300 に答える
3

「きれい」が「読みやすい」を意味する場合、指示が多ければ多いほど良い. とにかく、ある程度までは。

実際には、条件付きジャンプ命令は 1 つだけ必要です。

たとえば、Brainfuckには 8 つの「指示」しかありません。これには 2 つのジャンプがあります。1 つは前方に、もう 1 つは後方ですが、プロセッサが絶対ジャンプを使用している場合、それらは同じになる可能性があります。

プロセッサ用のアセンブラを作成していますか? その場合、さまざまなジャンプ形式を管理するマクロ命令を追加し、それらをチップで実際にサポートされている低レベルの操作に変換できます。

于 2013-01-22T18:53:49.153 に答える