この理解は間違いです。キャリーが立つのは入力の下位ニブルが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;
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,
特許に全部書いてありますよ (スコア:0)
また同時にキャリーフラグの検査を行う。キャリーフラグは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,
Re: (スコア:0)
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
Re:特許に全部書いてありますよ (スコア:0)
> データ計算は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のとき、になります。これも命令やマイクロコードでうまくエンコードされているでしょう。