编译如下代码
#include <p30f3011.h> //dsPIC30F3011标准头文件
#include"math.h"
/*配置位*/
_FOSC(CSW_FSCM_OFF & XT_PLL4); //4倍频晶振,Failsafe 时钟关闭
unsigned long Sum=0;
unsigned long Sum2=0;
unsigned int temp=0;
int main(void)
{
Sum2=0XFEEE;
temp=0X3FF;
Sum=temp*temp;
Sum2=Sum+Sum2;
Sum=Sum/32;
while (1)
{
;
}
}
编译后的汇编代码为:
30: Sum=temp*temp;
019E 804041 mov.w 0x0808,0x0002
01A0 804040 mov.w 0x0808,0x0000
01A2 B98800 mul.ss 0x0002,0x0000,0x0000
01A4 200001 mov.w #0x0,0x0002 ***问题在这本来 0x0002 为32位结果的高16位,它把它清零了 ,为什么?
01A6 884000 mov.w 0x0000,0x0800
01A8 884011 mov.w 0x0002,0x0802
31: Sum2=Sum+Sum2; |