この理解は間違いです。キャリーが立つのは入力の下位ニブルが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:特許に全部書いてありますよ (スコア:1)
> これで比較的ローコストに、少なくともセレクタを使うよりずっと簡潔にADD/SUBとINC/DECが統合されました。
これを読んだときに気がついたのですが、特定(クロック速度の短い)のx86命令の各命令と先頭5ビットを並べると
INC Register 01000
DEC Register 01001
ADC Reg/Memory and register to ether 00010
SBB Reg/Memory and register to ether 00011
ADD Reg/Memory and register to ether 00000
SUB Reg/Memory and register to ether 00101
このようになり、ADD/SUBはちょっと違いますが、前から(0から数えて)0ビット目から3ビット目までは共通で、4ビット目だけが異なっており、このビットで+-の操作を決めているように見えます。
ALUへの操作命令は5ビット長で、一部の命令は直接ALUへ入力されているようですので、(その場合はマイクロコードでALU操作はせずにもう一方のALUへの入力だけをしているっぽい)
これらのビット列が命令取り込み時に直接ALUへ入力されていると考えてみると、
> ADD/SUBとINC/DECが統合
というのは確かにそのとおりなのでしょう。
もう少し考えると、とのビットがどういう操作に対応しているかわかるかもしれないです。