多倍長整数クラス add sub 命令
足し算と引き算のも作ってみました。
インラインアセンブラだと CF(キャリーフラグ) を取得する方法がすぐには見つからなかった。(尚、ジャンプ命令は使いたくないので jz などの命令は却下)
非常に無駄が多いコードになってしまいましたが、足し算引き算は使う事を想定していないので、とりあえず以下のコードで作り進めます。
Plate& Plate::operator+=(const Plate& p) { unsigned long long b0, b1, b2; b0 = bits[0]; b1 = bits[1]; b2 = bits[2]; b0 += p.bits[0]; b1 += p.bits[1]; b2 += p.bits[2]; b1 += (b0 >> 16 >> 16); b2 += (b1 >> 16 >> 16); bits[0] = (unsigned long)b0; bits[1] = (unsigned long)b1; bits[2] = (unsigned long)b2; return *this; } Plate& Plate::operator-=(const Plate& p) { unsigned long long b0, b1, b2; b0 = bits[0]; b1 = bits[1]; b2 = bits[2]; b0 -= p.bits[0]; b1 -= p.bits[1]; b2 -= p.bits[2]; b1 -= ((b0 >> 16 >> 16) & 1); b2 -= ((b1 >> 16 >> 16) & 1); bits[0] = (unsigned long)b0; bits[1] = (unsigned long)b1; bits[2] = (unsigned long)b2; return *this; }