1# 此生不再
我用的是MPLAB 8.5运行的,也就是PIC单片机的集成环境PICC编译器。
我把程序作了如下修改
char abc;
abc=3;
char m = 5;
if(m++>5)
abc=0x34;
else abc=0x56;
效果是一样的,经过编译后把反汇编文件拿出来看,
具体如下:
9: char abc;
10: abc=3;
1D4 C03 MOVLW 0x3
1D5 03D MOVWF 0x1d
11: char m = 5;
1D6 C05 MOVLW 0x5
1D7 03C MOVWF 0x1c
12: if(m++>5)
1D8 C07 MOVLW 0x7
1D9 2BC INCF 0x1c, F
1DA 09C SUBWF 0x1c, W
1DB 703 BTFSS 0x3, 0
1DC BDF GOTO 0x1df
13: abc=0x34;
1DD C34 MOVLW 0x34
1DE BE0 GOTO 0x1e0
14: else abc=0x56;
1DF C56 MOVLW 0x56
1E0 03E MOVWF 0x1e
可以看见
12: if(m++>5)
1D8 C07 MOVLW 0x7
也就是if(m++>5)
编译后成为了if(m>6)或者说if(m>=7)。
这也就是为什么结果是执行后一条了,而不是执行前一条。
我估计是因为++是右结合的符号,所以先计算右边的,也就是++5.
也许是这样吧。
但奇怪的是m得确又自加了,真是好神奇啊。
12: if(m++>5)
1D8 C07 MOVLW 0x7
1D9 2BC INCF 0x1c, F
0X1C就是m了。 |