• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

keil无法实现乘法运算!

大名鼎鼎的keil51,竟然实现不了双字节乘以双字节的简单乘法运算.
我们都知道两个无符号双字节相乘,结果是一个无符号的四字节,但是keil51就认为是相乘的结果是一个双字节,岂有不错之理?

   286:         along= SetLengthA * FreqValueA;
C:0x1000    78C2     MOV      R0,#FreqValueA(0xC2)
C:0x1002    E6       MOV      A,@R0
C:0x1003    FC       MOV      R4,A
C:0x1004    08       INC      R0
C:0x1005    E6       MOV      A,@R0
C:0x1006    FD       MOV      R5,A
C:0x1007    78C7     MOV      R0,#SetLengthA(0xC7)
C:0x1009    E6       MOV      A,@R0
C:0x100A    FE       MOV      R6,A
C:0x100B    08       INC      R0
C:0x100C    E6       MOV      A,@R0
C:0x100D    FF       MOV      R7,A
C:0x100E    12072D   LCALL    C?IMUL(C:072D)
C:0x1011    E4       CLR      A
C:0x1012    8F37     MOV      0x37,R7
C:0x1014    8E36     MOV      0x36,R6
C:0x1016    F535     MOV      0x35,A
C:0x1018    F534     MOV      0x34,A
这其中的那个乘法子程序,我分析过了,就是:int=int*int
哪怕我用一个long型变量来接收结果,编译器也是调用这个子程序,这显然是错误的
全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法