这个,其实是编译器的优化干的事,首先说你的程序,a变量只用了一次,所以编译器没给他分配内存,你如果查看汇编代码会发现,生产的代码为
MOV R3 #0x0a
MOV R2 #0x00
也就是说 变量a 对应的是内存为 工作寄存器R3 和 R2
而后面做乘法运算的时候,R3、R2被重新赋值了,所以从KEIL里面看,A的值变了;
如果用下面的程序:
void main()
{
int a=10,d=0;
float b=0.4, c;
c=a*b;
d=a;
while(1);
}
看出区别了吗??
变量a后面又被使用了,所以编译器会给它分配“真正的”内存,对应的汇编代码为:
MOV 0X08 0X00
MOV 0X09 0X0A
所以,这个时候,你再查看的话,就会发现,a的值没变....
怎么样,20分能给我不。。。
|