8051中的程序分支组

在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


例子

序号说明及描述
1LJMP标签
这是LJMP addr16的示例。LJMP代表跳远。它可以跳到符号位置标签。地址是由汇编程序根据label的值生成的。使用此指令,我们可以在程序中的任何位置跳转。
2ACALL SUBR
这是ACALLa ddr11类型的指令。ACALL是绝对呼叫。使用该指令,它从符号位置SUBR调用子例程。在调用之前,它将程序计数器的值存储在堆栈的顶部。
3SJMP标签
此指令类似于SJMP rel.SJMP表示短跳转。这里的LABEL是由汇编程序生成的8位地址。使用此指令,我们可以停止8051中的程序。
4JZ LABEL
该指令类似于JZ rel指令。当A寄存器的值为00h时,只有它跳到LABEL,否则将被忽略。汇编器根据指令生成8位带符号位移。
5RET
这是返回指令。执行该程序时,将从堆栈顶部弹出程序计数器的下一个地址,并且SP的值减2。
6RETI
这是中断返回。这也类似于RET指令。但是它也恢复了中断逻辑。因此,还原后,它可以接受相同优先级的其他中断。
7DJNZ 80H,标签
这就像DJNZ a8,相对。如果不为零,则表示减量和跳跃。因此,将端口P0的内容减1。减后的值不为00H时,发生分支指令。此处LABEL是一个带符号的8位数字。
8CJNE R5,#90H,标签
这类似于CJNE Rn,#d8,相关指令。CJNE代表比较和跳转(如果不相等)。因此,这是比较和跳跃的综合说明。在此将R5的含量与90H进行比较。如果值不相同,则跳转到标签。LABEL是8位带符号的数字。


在执行ACALL或AJMP的过程中,我们可以认为程序存储器分为2K字节块。从16位地址开始,前5位是固定的。此外,可以将2K内存块划分为256个字节的页面。因此,我们需要3位来选择页面。

有三种无条件的跳转。SJMP,LJMP和AJMP,但两种无条件调用指令ACALL,LCALL。没有呼叫存在。