BCD码乘法运算的问题。

mustmust 2011-11-15 11:52:55
书本上说:对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?
...全文
1037 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mustmust 2011-11-18
  • 打赏
  • 举报
回复
谢谢了,我对汇编完全不懂,以前也没有太深厚的编程基础,只会一点浮浅的DELPHI编程。现在开始学习汇编,完全不知道书上说的对不对,也不知道那些重要,那些不重要,只能照着书上按部就班的学习。
zara 2011-11-18
  • 打赏
  • 举报
回复
就是你能接触到的待处理数据的最初的格式了。待处理数据来源不同,格式就有可能不同。象你所说的从键盘输入的,其实不是十进制的数据格式,而是字符串格式,我们就需要把这个字符串按照十进制规则转换为数值,然后进行下一步的运算。如果是从其它程序来的,或是外部接口来的,也可能是其它约定的格式,有时也需要转换;虽然不一定是必须的。这个,全看实际情况。
BCD码,现在的通常程序里,一般都不再使用了吧。
zara 2011-11-17
  • 打赏
  • 举报
回复
可以这样的。不过,具体还是要看你的数据的原始格式。如果最初数据就是非组合的BCD码,就要有个转换为普通数据这么个过程。如果不是,就没有必要通过非组合BCD码了。
mustmust 2011-11-17
  • 打赏
  • 举报
回复
依楼上所说,那么计算 26 × 39,在电脑里面计算的步骤是不是这样的:

先将 26 的非组合bcd码 0000 0010 0000 0110 和
   39 的非组合bcd码 0000 0011 0000 1001 转换成

   26 的二进制码(补码)  0001 1100    和
   39 的二进制码(补码   0010 0111

再用 mul 进行运算?
zara 2011-11-17
  • 打赏
  • 举报
回复
计算方法,也就是自己使用普通的 mul/imul 指令了。对原始的字符串或bcd码格式的,转换我正常的数据格式。
mustmust 2011-11-17
  • 打赏
  • 举报
回复
zara,你说“看你的数据的原始格式”,这个是怎么理解的呢?因为从程序中,或是从键盘中输入的数肯定是十进制的,难道还有其它格式?
不好意思,因为不理解,所以看起来有些像胡搅蛮缠,谢谢了。
zara 2011-11-16
  • 打赏
  • 举报
回复
看它调整时所进行的操作,只对 AL 里的内容进行操作,这就意味着对前面的乘法运算的操作数上,只有两个数的低 4 位是有效的。即只有个位数非压缩BCD码数据被认为是可支持的。
所以,你这里的 13*7 被当做了 3*7,所以,结果就是 21 了。哪怕你前面用的是 mul bx (bx=0103 or 0007) 指令,但是实际的只有 3*7 的结果反映在了 AL 里。
mustmust 2011-11-16
  • 打赏
  • 举报
回复
“十进制数的运算在电脑中是以BCD码表示的,电脑以bcd码进行二进制运算,再将结果进行调整”,“二进制乘法的两个操作数必须是非组合BCD码,否则结果将无法调整”这就是书上说的。
那么13×7也就是 0000 0001 0000 0011 × 0000 0111
按楼上两位说的,是不是只能乘法只能进行如 2×3 5×6 这样的运算,也就是两个操作数都不能大于 10?
那么如 13×7 566×799 这样的数据又是怎么计算的呢?总得有个计算的方法吧?
大熊猫侯佩 2011-11-16
  • 打赏
  • 举报
回复
建议楼主仔细读一下AAM支持的位数
mustmust 2011-11-15
  • 打赏
  • 举报
回复
没人能回答吗?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧