在8051单片机中,逻辑组下有17条不同的指令。总共有46个操作码。这些指令不影响标志位,但是CJNE影响CY标志。在这些指令中,使用的是11位地址和16位地址。
在下表中,我们将以机器周期,操作码数量等形式查看助记符,长度,执行时间。
助记符 | 字节数 | 执行时间处理时间 | 操作码计数 |
---|---|---|---|
ACALL地址 | 2 | 2 | 8 |
LCALL地址 | 3 | 2 | 1 |
RET | 1 | 2 | 1 |
RETI | 1 | 2 | 1 |
AJMP地址 | 2 | 2 | 8 |
LJMP地址 | 3 | 2 | 1 |
SJMP相关 | 2 | 2 | 1 |
JMP @ A + DPTR | 1 | 2 | 1 |
JZ rel | 2 | 2 | 1 |
JNZ rel | 2 | 2 | 1 |
CJNE A,A8,相对 | 3 | 2 | 1 |
CJNE A,#d8,rel | 3 | 2 | 1 |
CJNE Rn,#d8,rel | 3 | 2 | 8 |
CJNE @ Ri,#d8,rel | 3 | 2 | 2 |
DJNE Rn,rel | 2 | 2 | 8 |
DJNZ a8,相对 | 3 | 2 | 1 |
NOP | 1 | 1 | 1 |
序号 | 说明及描述 |
---|---|
1 | LJMP标签 这是LJMP addr16的示例。LJMP代表跳远。它可以跳到符号位置标签。地址是由汇编程序根据label的值生成的。使用此指令,我们可以在程序中的任何位置跳转。 |
2 | ACALL SUBR 这是ACALLa ddr11类型的指令。ACALL是绝对呼叫。使用该指令,它从符号位置SUBR调用子例程。在调用之前,它将程序计数器的值存储在堆栈的顶部。 |
3 | SJMP标签 此指令类似于SJMP rel.SJMP表示短跳转。这里的LABEL是由汇编程序生成的8位地址。使用此指令,我们可以停止8051中的程序。 |
4 | JZ LABEL 该指令类似于JZ rel指令。当A寄存器的值为00h时,只有它跳到LABEL,否则将被忽略。汇编器根据指令生成8位带符号位移。 |
5 | RET 这是返回指令。执行该程序时,将从堆栈顶部弹出程序计数器的下一个地址,并且SP的值减2。 |
6 | RETI 这是中断返回。这也类似于RET指令。但是它也恢复了中断逻辑。因此,还原后,它可以接受相同优先级的其他中断。 |
7 | DJNZ 80H,标签 这就像DJNZ a8,相对。如果不为零,则表示减量和跳跃。因此,将端口P0的内容减1。减后的值不为00H时,发生分支指令。此处LABEL是一个带符号的8位数字。 |
8 | CJNE R5,#90H,标签 这类似于CJNE Rn,#d8,相关指令。CJNE代表比较和跳转(如果不相等)。因此,这是比较和跳跃的综合说明。在此将R5的含量与90H进行比较。如果值不相同,则跳转到标签。LABEL是8位带符号的数字。 |
在执行ACALL或AJMP的过程中,我们可以认为程序存储器分为2K字节块。从16位地址开始,前5位是固定的。此外,可以将2K内存块划分为256个字节的页面。因此,我们需要3位来选择页面。
有三种无条件的跳转。SJMP,LJMP和AJMP,但两种无条件调用指令ACALL,LCALL。没有呼叫存在。