书本上说:对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支持的位数