MCS-51单片机指令周期详解表:快速掌握机器周期判断技巧
前菜:一些判断指令周期的小技巧:
-
基本原则:
- 单字节指令(通常是简单的寄存器操作、立即数操作等):一般需要1个机器周期。
- 双字节指令(大多数直接操作、间接操作等):一般需要2个机器周期。
- 三字节指令(主要是带有地址的跳转指令):一般需要3个机器周期。
-
特定类型指令的规则:
- 立即数操作:大多数立即数操作指令(如MOV A, #data)需要2个机器周期。
- 寄存器操作:寄存器直接操作(如ADD A, Rn)通常只需要1个机器周期。
- 直接地址操作:操作直接地址(如MOV direct, A)通常需要2个机器周期。
- 间接地址操作:使用间接地址寄存器的操作(如MOV A, @Ri)通常需要1个机器周期。
- 跳转指令:短跳转(如SJMP rel)一般需要2个机器周期,长跳转(如LJMP addr16)需要3个机器周期。
-
特例指令:
- 乘法和除法指令:如MUL AB和DIV AB,通常需要4个机器周期。
- CALL和RET指令:如ACALL、LCALL、RET、RETI等通常需要2个机器周期。
- DJNZ指令:如DJNZ Rn, rel需要2个机器周期,DJNZ direct, rel需要3个机器周期。
-
指令类型与机器周期的关联:
- 数据传输指令:如MOV指令,根据操作数类型,通常需要1到3个机器周期。
- 算术和逻辑指令:如ADD、SUBB、ANL、ORL等,大多数操作寄存器的指令需要1个机器周期,而涉及直接地址或立即数的需要2到3个机器周期。
以下是MCS-51单片机(如8051)指令集的指令周期表,每个指令对应的机器周期;注意,机器周期是根据单片机的时钟频率计算的。例如,指令周期为2个机器周期,即执行一条指令需要2个时钟周期。如果时钟频率为1 MHz,则每个时钟周期为1微秒。因此,两机器周期为2微秒。
指令 | 机器周期 | 指令 | 机器周期 |
---|---|---|---|
ADD A, Rn | 1 | MOV A, @Ri | 1 |
ADD A, direct | 2 | MOV A, direct | 2 |
ADD A, @Ri | 1 | MOV A, #data | 2 |
ADD A, #data | 2 | MOV Rn, A | 1 |
ADDC A, Rn | 1 | MOV Rn, direct | 2 |
ADDC A, direct | 2 | MOV Rn, #data | 2 |
ADDC A, @Ri | 1 | MOV direct, A | 2 |
ADDC A, #data | 2 | MOV direct, Rn | 2 |
SUBB A, Rn | 1 | MOV direct, direct | 3 |
SUBB A, direct | 2 | MOV direct, @Ri | 2 |
SUBB A, @Ri | 1 | MOV direct, #data | 3 |
SUBB A, #data | 2 | MOV @Ri, A | 1 |
INC A | 1 | MOV @Ri, direct | 2 |
INC Rn | 1 | MOV @Ri, #data | 2 |
INC direct | 2 | MOV DPTR, #data16 | 3 |
INC @Ri | 1 | MOVC A, @A+DPTR | 2 |
DEC A | 1 | MOVC A, @A+PC | 2 |
DEC Rn | 1 | MOVX A, @DPTR | 2 |
DEC direct | 2 | MOVX A, @Ri | 2 |
DEC @Ri | 1 | MOVX @DPTR, A | 2 |
MUL AB | 4 | MOVX @Ri, A | 2 |
DIV AB | 4 | NOP | 1 |
DA A | 1 | PUSH direct | 2 |
CPL A | 1 | POP direct | 2 |
CPL bit | 2 | XCH A, Rn | 1 |
CLR A | 1 | XCH A, direct | 2 |
CLR bit | 2 | XCH A, @Ri | 1 |
SETB bit | 2 | XCHD A, @Ri | 1 |
ANL A, Rn | 1 | DJNZ Rn, rel | 2 |
ANL A, direct | 2 | DJNZ direct, rel | 3 |
ANL A, @Ri | 1 | JNZ rel | 2 |
ANL A, #data | 2 | JZ rel | 2 |
ANL direct, A | 2 | JC rel | 2 |
ANL direct, #data | 3 | JNC rel | 2 |
ORL A, Rn | 1 | JB bit, rel | 3 |
ORL A, direct | 2 | JNB bit, rel | 3 |
ORL A, @Ri | 1 | JBC bit, rel | 3 |
ORL A, #data | 2 | ACALL addr11 | 2 |
ORL direct, A | 2 | LCALL addr16 | 2 |
ORL direct, #data | 3 | RET | 2 |
XRL A, Rn | 1 | RETI | 2 |
XRL A, direct | 2 | AJMP addr11 | 2 |
XRL A, @Ri | 1 | LJMP addr16 | 2 |
XRL A, #data | 2 | SJMP rel | 2 |
XRL direct, A | 2 | JMP @A+DPTR | 2 |
XRL direct, #data | 3 | INC DPTR | 2 |
CLR C | 1 | CLR bit | 2 |
SETB C | 1 | SETB bit | 2 |
CPL C | 1 | CPL bit | 2 |
ANL C, bit | 2 | ORL C, bit | 2 |
MOV C, bit | 2 | MOV bit, C | 2 |
作者:深泓点