BCD命令
BCD命令とは、BCD形式(Binary Coded Decimal:二進化十進数)のデータに対して演算や変換を行う命令の総称です。
コンピューターで数値を扱う場合、よくあるのは「1バイトで0から255の数値を表す方式」です。昨今のプログラミングの教科書にはこの方法しか書かれていないことが一般的です。
一方、BCD形式では「1バイトで0から9までの数字」を表します。つまり人間が見やすい10進数表現のまま「1桁=1バイト」のままメモリに格納しています。かなりメモリが無駄になります。ちなみにメモリ節約のため「4ビットで1桁」を表すパックドBCDという方式の方が一般的でした。
BCD形式は「人間が見やすい」という利点に加えて、BCD命令では「桁数を指定して演算できる」という特徴がありました。昨今のプログラミング言語でいえば関数の引数にbyte型の配列と桁数を指定するイメージです。
byte[] add(byte[] a, byte[] b, int digits)
{
byte[] result = new byte[digits];
int carry = 0;
for (int i = digits - 1; i >= 0; i--)
{
int sum = (a[i] & 0x0F) + (b[i] & 0x0F) + carry;
if (sum > 9)
{
sum = sum - 10;
carry = 1;
}
else
{
carry = 0;
}
result[i] = (byte)sum;
}
return result;
}
BCD命令はInt32やInt64のような大きな数値型が標準でなかった8ビットCPUの時代に大きな数値を手軽に扱いたい場合に重宝されました。