我给你来个试试
- 16 void Delay_ms01(int Cnt)
- 17 {
- 18 1 while(Cnt--)
- 19 1 {
- 20 2 int t=100;
- 21 2 while(--t);
- 22 2 }
- 23 1 }
- 24
- 汇编的传统计算方法:
- ; FUNCTION _Delay_ms01 (BEGIN)
- ; SOURCE LINE # 16
- ;---- Variable 'Cnt' assigned to Register 'R6/R7' ----
- ; SOURCE LINE # 17
- 0000 ?C0001:
- ; SOURCE LINE # 18
- 0000 EF MOV A,R7 ;1指令周期
- 0001 1F DEC R7 ;1指令周期
- 0002 AC06 MOV R4,AR6 ;2指令周期
- 0004 7001 JNZ ?C0051 ;2指令周期
- 0006 1E DEC R6 ;1指令周期
- 0007 ?C0051:
- 0007 4C ORL A,R4 ;1指令周期
- 0008 6015 JZ ?C0005 ;2指令周期
- ; SOURCE LINE # 19
- ; SOURCE LINE # 20
- 000A 750000 R MOV t,#00H ;3指令周期
- 000D 750064 R MOV t+01H,#064H ;3指令周期
- 0010 ?C0003:
- ; SOURCE LINE # 21
- 0010 E500 R MOV A,t+01H ;2指令周期
- 0012 1500 R DEC t+01H ;2指令周期
- 0014 7002 JNZ ?C0052 ;2指令周期
- 0016 1500 R DEC t ;2指令周期
- 0018 ?C0052:
- 0018 14 DEC A ;1指令周期
- 0019 4500 R ORL A,t ;2指令周期
- 001B 60E3 JZ ?C0001 ;2指令周期
- 001D 80F1 SJMP ?C0003 ;2指令周期
- ; SOURCE LINE # 23
- 001F ?C0005:
- 001F 22 RET ;1指令周期
- ; FUNCTION _Delay_ms01 (END)
- 25 void Delay_ms02(int Cnt)
- 26 {
- 27 1 unsigned int t = 0;
- 28 1 while(Cnt) if(!t) { Cnt--; t=99; } else --t;
- 29 1 }
- ; FUNCTION _Delay_ms02 (BEGIN)
- ; SOURCE LINE # 25
- ;---- Variable 'Cnt' assigned to Register 'R6/R7' ----
- ; SOURCE LINE # 26
- ; SOURCE LINE # 27
- ;---- Variable 't' assigned to Register 'R4/R5' ----
- 0000 E4 CLR A ;1指令周期
- 0001 FD MOV R5,A ;1指令周期
- 0002 FC MOV R4,A ;1指令周期
- 0003 ?C0006:
- ; SOURCE LINE # 28
- 0003 EF MOV A,R7 ;1指令周期
- 0004 4E ORL A,R6 ;1指令周期
- 0005 6016 JZ ?C0010 ;2指令周期
- 0007 ED MOV A,R5 ;1指令周期
- 0008 4C ORL A,R4 ;1指令周期
- 0009 700B JNZ ?C0008 ;2指令周期
- 000B EF MOV A,R7 ;1指令周期
- 000C 1F DEC R7 ;1指令周期
- 000D 7001 JNZ ?C0053 ;2指令周期
- 000F 1E DEC R6 ;1指令周期
- 0010 ?C0053:
- 0010 7C00 MOV R4,#00H ;2指令周期
- 0012 7D63 MOV R5,#063H ;2指令周期
- 0014 80ED SJMP ?C0006 ;2指令周期
- 0016 ?C0008:
- 0016 ED MOV A,R5 ;1指令周期
- 0017 1D DEC R5 ;1指令周期
- 0018 70E9 JNZ ?C0006 ;2指令周期
- 001A 1C DEC R4 ;1指令周期
- 001B ?C0054:
- 001B 80E6 SJMP ?C0006 ;2指令周期
- ; SOURCE LINE # 29
- 001D ?C0010:
- 001D 22 RET ;1指令周期
- ; FUNCTION _Delay_ms02 (END)
- Delay_ms01(10); //5.063 ms
- Delay_ms02(10); //5.4325 ms
- 0.00019450
- 0.00525750 5.063 ms
- 0.01069000 5.4325 ms
复制代码 |