首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

BCD码乘法运算的有关问题

2012-03-31 
BCD码乘法运算的问题。书本上说:对BCD码数据进行乘法运算时,要求乘数和被乘数都用 非组合的BCD码 表示,否则

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支持的位数

热点排行