经KEIL UV4仿真,设置晶振为12M,按常规的每个机器周期12个振荡周期,优化等级为默认的8级。
使用 for (i=0;i<32768;i++);的执行时间为0.60642050-0.000195000。约为0.6秒。
全部的汇编代码为
0000: 02 00 33 LJMP 0033H
0003: B2 A1 CPL P2.1
0005: 90 00 00 MOV DPTR,#0000H
0008: AF 82 MOV R7,DPL
000A: AE 83 MOV R6,DPH
000C: E4 CLR A
000D: FC MOV R4,A
000E: FD MOV R5,A
000F: FB MOV R3,A
0010: 7A 80 MOV R2,#80H
0012: F9 MOV R1,A
0013: F8 MOV R0,A
0014: D3 SETB C
0015: 12 00 1D LCALL 001DH
0018: 40 E9 JC 0003H
001A: A3 INC DPTR
001B: 80 EB SJMP 0008H
001D: EB MOV A,R3
001E: 9F SUBB A,R7
001F: F5 F0 MOV B,A
0021: EA MOV A,R2
0022: 9E SUBB A,R6
0023: 42 F0 ORL B,A
0025: E9 MOV A,R1
0026: 9D SUBB A,R5
0027: 42 F0 ORL B,A
0029: EC MOV A,R4
002A: 64 80 XRL A,#80H
002C: C8 XCH A,R0
002D: 64 80 XRL A,#80H
002F: 98 SUBB A,R0
0030: 45 F0 ORL A,B
0032: 22 RET
0033: 78 7F MOV R0,#7FH
0035: E4 CLR A
0036: F6 MOV @R0,A
0037: D8 FD DJNZ R0,0036H
0039: 75 81 07 MOV SP,#07H
003C: 02 00 03 LJMP 0003H
使用 for (i=32768;i>0;i--);的执行时间为0.13133300-0.000195000。约为0.13秒。
全部的汇编代码为
0000: 02 00 14 LJMP 0014H
0003: B2 A1 CPL P2.1
0005: 7F 00 MOV R7,#00H
0007: 7E 80 MOV R6,#80H
0009: EF MOV A,R7
000A: 1F DEC R7
000B: 70 01 JNZ 000EH
000D: 1E DEC R6
000E: EF MOV A,R7
000F: 4E ORL A,R6
0010: 70 F7 JNZ 0009H
0012: 80 EF SJMP 0003H
0014: 78 7F MOV R0,#7FH
0016: E4 CLR A
0017: F6 MOV @R0,A
0018: D8 FD DJNZ R0,0017H
001A: 75 81 07 MOV SP,#07H
001D: 02 00 03 LJMP 0003H
可以看到,后者指令减少很多。
|