当前位置: 代码迷 >> 汇编语言 >> BCD码乘法运算的有关问题
  详细解决方案

BCD码乘法运算的有关问题

热度:9461   发布时间:2013-02-26 00:00:00.0
BCD码乘法运算的问题。
书本上说:对BCD码数据进行乘法运算时,要求乘数和被乘数都用 非组合的BCD码 表示,否则得到的结果无法调整。

那么计算:13×7

  13    0000 0001 0000 0011  (非组合)
 × 7 0000 0111   
  -------------------------
  0000 0001 0000 0011
  00000 0010 0000 011
  000000 0100 0000 11
  --------------------------
  0000 0111 0001 0101  

再用AAM进行调整:将AL中的内容除以10,商送入AH中,余数送入AL中。
        
  0000 0010
         /-------  
  1010 / 0001 0101  
  1 010
  ---------------  
  1

那么最终AH中送入的为:0000 0010 = 2
  最终AL中送入的为:0000 0001 = 1

那么结果等于 21,而不是 91?

------解决方案--------------------------------------------------------
看它调整时所进行的操作,只对 AL 里的内容进行操作,这就意味着对前面的乘法运算的操作数上,只有两个数的低 4 位是有效的。即只有个位数非压缩BCD码数据被认为是可支持的。
所以,你这里的 13*7 被当做了 3*7,所以,结果就是 21 了。哪怕你前面用的是 mul bx (bx=0103 or 0007) 指令,但是实际的只有 3*7 的结果反映在了 AL 里。
------解决方案--------------------------------------------------------
建议楼主仔细读一下AAM支持的位数
  相关解决方案