パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

8086マイクロコードの読み方」記事へのコメント

  • また同時にキャリーフラグの検査を行う。キャリーフラグは3つめの命令(CR=2)のときに格納したflagsで立つことがある。ざっくり条件を書くと、6を足した(AAAの場合)計算結果が9を超えた場合である。

    この理解は間違いです。キャリーが立つのは入力の下位ニブルが9より大きい時です。計算結果ではありません。インテルのマニュアルからだと

    IF ((AL AND 0FH) > 9) OR (AF ← 1)
    THEN
            AL ← AL + 6;
            AH ← AH + 1;
            AF ← 1;
            CF ← 1;
    ELSE
            AF ← 0;
            CF ← 0;
    FI;
    AL ← AL AND 0FH;

    キャリーを設定するのはCR=0の命令です。

    特許のページからですが、まず、この文書のAレジスタはAL、Xレジスタ82はAHに相当するようです。Xレジスタ82とXレジスタ108は全くの別物です。

    There are six types of microcode instructions in the present invention. Type 1 is an ALU conditioning instruction which sets up ALU 134, which is taken to include PSW 136, to perform a specified function. A type 0 microcode instruction is a short jump which provides for a conditional jump within the microcode burst or sequence. A type 4 instruction is a bookkeeping instruction. Other types include a type 6 memory cycle, type 5 jump cycle and type 6 long jump cycle with an address save.

    AAA/AASの例に出てくるのはタイプ0,1,4だけです。

    In the case of the ASCII addition adjust and subtract adjust, as shown in TABLE 7,

    • by Anonymous Coward

      AAAとAASの+6と-6の切り替えはワイヤ一本でインプリシットにできるのに、インクリメントとデクリメントはマイクロコードで切り替えているのは不思議かもしれません。しかしAH←AH+1をマイクロコードで書くと

      0 X tmpa 1 ADD tmpa
      1 1 tmpb
      2 Σ X

      どのみち3命令必要な上、定数「1」の発生回路が余分に必要になります。定数はセレクタが爆発するので普通は定数ROMに格納されますが、それでも結構なリソース喰いです。

      一般に、A-B-CY = A+~B+!CYです。BとCYを反転させるだけで加算回路で減算できます。ビットの反転はOP=SUB信号とBの各データビットやCYをXO

      • by Anonymous Coward on 2021年10月15日 7時00分 (#4132576)

        > データ計算はBの全ビットにOP=SUBをxorすれば望みのものが得られます。ボロ―計算はBの全ビットにOP=SUB or OP=DECをxorしたものを使えばよいです。

        OP=SUBとOP=DECは決して両立しないので、orはロジックは不要で、加減算計算用B'=B xor (OP=SUB)*16とすると、キャリー・ボロ―計算用はB''=B' xor (OP=DEC)*16ですみます。

        > Aの全ビットにOP=ADD or OP=SUBをandすれば、容易に0を手に入れられます。

        オペランドが一つしかなく、相手が0である命令にNEGやNOTがありますが、こういった情報はマイクロコードから供給され、orのようなロジックは不要でしょう。とくにNEGは0からの減算なので、2nd OPでしかできないと思います。
        NEGはA=0,CY=0として、0+~B+1です。これは減算とインクリメントの合いの子のようなものです。NOTは論理演算命令ですが、notゲートで反転することも、定数1とxorすることも考えづらく、0+~B+0として実装されていると思われます。フラグはまあ好きなように設定できます。INC/DECはALUを使うがキャリーフラグには影響しないし。なので、Bが反転されるのはOP=SUB(SBB),NEG,NOTのとき、になります。これも命令やマイクロコードでうまくエンコードされているでしょう。

        親コメント

アレゲは一日にしてならず -- アレゲ見習い

処理中...