大名鼎鼎的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型變量來接收結果,編譯器也是調用這個子程序,這顯然是錯誤的
keil無法實現乘法運算!
全部回復(0)
正序查看
倒序查看
現在還沒有回復呢,說說你的想法