一段纯延时的C程序,KEIL编译后,查看汇编窗口,发现P0口参与了运算,百思不解,贴出来求大家赐教:
17: void delay(unsigned char x)
18: {
19: int i,j;
20: for(i=0;i<x;i++)
C:0x0E30 E4 CLR A
C:0x0E31 FD MOV R5,A
C:0x0E32 FC MOV R4,A
C:0x0E33 EF MOV A,R7
C:0x0E34 FB MOV R3,A
C:0x0E35 C3 CLR C
C:0x0E36 ED MOV A,R5
C:0x0E37 9B SUBB A,R3
C:0x0E38 7480 MOV A,#P0(0x80)
C:0x0E3A F8 MOV R0,A
C:0x0E3B 6C XRL A,R4
C:0x0E3C 98 SUBB A,R0
C:0x0E3D 5015 JNC C:0E54
21: {
22: for(j=0;j<110;j++);
C:0x0E3F E4 CLR A
C:0x0E40 FB MOV R3,A
C:0x0E41 FA MOV R2,A
C:0x0E42 0B INC R3
C:0x0E43 BB0001 CJNE R3,#0x00,C:0E47
C:0x0E46 0A INC R2
C:0x0E47 EB MOV A,R3
C:0x0E48 646E XRL A,#0x6E
C:0x0E4A 4A ORL A,R2
C:0x0E4B 70F5 JNZ C:0E42
23: }
C:0x0E4D 0D INC R5
C:0x0E4E BD0001 CJNE R5,#0x00,C:0E52
C:0x0E51 0C INC R4
C:0x0E52 80DF SJMP C:0E33
24: }
25:
C:0x0E54 22 RET
其中C:0x0E38 7480 MOV A,#P0(0x80) 这一行,读取P0口状态到ACC,这是何意?实在不理解。 求高手指点,不胜感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
多谢指点!是这么回事!这编译器干嘛不直接写#0x80呢?因为0x80跟P0口地址重复了,就顺便用#P0表示了?
-----------------------------------------------------------------------
是反编译器干的。
一周热门 更多>