汇编语言:8421 BCD码加减法的修正问题

1.文章内容概述

首先要明白,web

8421 BCD码的取值是从0000到1001(也就是十进制的0到9)
有时对BCD码进行加法或减法会有这个范围之外的值出现,须要人为调整方能得出正确的结果。svg

而本文即讲对此的修正方法。xml

2.8421 BCD码加法修正

举例:23 + 48 = 71
对这个例子,先转换为BCD码:
  0010 0011 (23)
 +0100 1000 (48)
 --------------------
  0110 1011
能够看到1011已经属于不合法的BCD码表示。ci

2.1调整方法

对0110 1011的修正,咱们采起对低4位加6(也就是0110B的方法来修正)
加六后的结果是,
  0110 1011
 +0000 0110 (6)
 --------------------
  0111 0001it

结果是0111 0001,也就是8421 BCD码对应的10进制的71,是咱们须要的正确结果。

3.BCD码减法修正

举例:45 - 28 = 17
首先转换为BCD码:
  0100 0101 (45)
  -0010 1000 (28)
 --------------------
   0001 1101
能够看到低位1101不符合BCD码的表示。class

3.1调整方法

这里低四位对高四位产生了借位,因此咱们须要对低四位都进行减6操做。
解释:由于高四位的最低位的权重是16,因此给第四位借1其实是借了16!因此咱们须要减去多借来的6.
下面对0001 1101低四位进行减6操做:
  0001 1101
 -0000 0110
 ------------------
  0001 0111(也就是BCD码对应的十进制17,是咱们须要的正确答案)webkit

4.更特殊:21 - 45 = -24类的修正方法的思考

对于这种特殊计算的修正方法我如今还不清楚,由于这是汇编语言偏后面一点才会提到的内容,等后面学到了我再来补充。
我以前有两种想法来修正:
1.低四位向高四位借了16,须要减去多借来的6。那么类比低四位我猜想高四位向高四位更高的天然位借了256(根据权重计算),那么须要减去多借来的156。加起来就是让原来的数减去156+6=162。可是计算出来结果并不是这样的,看来是个人方法错误了。
2.把减法21-45换成21+(-45)是否能解?仍是被我本身否认了,,
因此方法之后我再来修改。方法

5.总结

  • BCD码相加(本文中未说明都是8421型BCD码),若低位不符合要求,那么须要加0110(也就是6)
  • BCD码相减,若低四位向高四位产生借位则须要减6
  • BCD(Binary Code Decimal)码是一个很广的概念,8421只是其中最经常使用的一种。
  • 特殊状况之后再来修改