keilc4软件
main()
{
uchar c,a;
c=0xfe;
while(1)
{
a=0x10+(~c);
if(a==0x11)
led5=0;
}
}这样程序执行是正确的led5点亮
main()
{
uchar c,a;
c=0xfe;
while(1)
{
if((0x10+(~c))==0x11)
led5=0;
}
}这样程序执行就不正确,led5不亮,查了一天资料了,纠结啊,求大神解惑
我自己查了keilc的汇编程序发现keilc是这样编译的
C:0x0005 EF MOV A,R7
C:0x0006 F4 CPL A
C:0x0007 FD MOV R5,A
C:0x0008 E4 CLR A
C:0x0009 F4 CPL A
C:0x000A FC MOV R4,A
C:0x000B ED MOV A,R5
C:0x000C 2410 ADD A,#0x10
C:0x000E FD MOV R5,A
C:0x000F E4 CLR A
C:0x0010 3C ADDC A,R4
C:0x0011 FC MOV R4,A
C:0x0012 ED MOV A,R5
C:0x0013 6411 XRL A,#0x11
C:0x0015 4C ORL A,R4
C:0x0016 70ED JNZ C:0005
19: led5=0;
C:0x0018 C285 CLR led5(0x80.5)根据这个汇编程序运行到C:0x0016 70ED JNZ C:0005 A里面内容是0xff所以没执行led5=0。不知道怎么会这样,是keilc的bug么?
|