首先要明白,web
8421 BCD码的取值是从0000到1001(也就是十进制的0到9)
有时对BCD码进行加法或减法会有这个范围之外的值出现,须要人为调整方能得出正确的结果。svg
而本文即讲对此的修正方法。xml
举例:23 + 48 = 71
对这个例子,先转换为BCD码:
0010 0011 (23)
+0100 1000 (48)
--------------------
0110 1011
能够看到1011已经属于不合法的BCD码表示。ci
对0110 1011的修正,咱们采起对低4位加6(也就是0110B的方法来修正)
加六后的结果是,
0110 1011
+0000 0110 (6)
--------------------
0111 0001it
举例:45 - 28 = 17
首先转换为BCD码:
0100 0101 (45)
-0010 1000 (28)
--------------------
0001 1101
能够看到低位1101不符合BCD码的表示。class
这里低四位对高四位产生了借位,因此咱们须要对低四位都进行减6操做。
解释:由于高四位的最低位的权重是16,因此给第四位借1其实是借了16!因此咱们须要减去多借来的6.
下面对0001 1101低四位进行减6操做:
0001 1101
-0000 0110
------------------
0001 0111(也就是BCD码对应的十进制17,是咱们须要的正确答案)webkit
对于这种特殊计算的修正方法我如今还不清楚,由于这是汇编语言偏后面一点才会提到的内容,等后面学到了我再来补充。
我以前有两种想法来修正:
1.低四位向高四位借了16,须要减去多借来的6。那么类比低四位我猜想高四位向高四位更高的天然位借了256(根据权重计算),那么须要减去多借来的156。加起来就是让原来的数减去156+6=162。可是计算出来结果并不是这样的,看来是个人方法错误了。
2.把减法21-45换成21+(-45)是否能解?仍是被我本身否认了,,
因此方法之后我再来修改。方法