8051程序分支组


在 8051 微控制器中,逻辑组下有 17 条不同的指令。总共有 46 个操作码。这些指令不影响标志位,但 CJNE 影响 CY 标志位。在这些指令中,使用了 11 位地址和 16 位地址。

在下表中,我们将看到助记符、长度、机器周期执行时间、操作码数量等。

助记符
字节数
执行时间
操作码数量
ACALL addr11
2
2
8
LCALL addr16
3
2
1
RET
1
2
1
RETI
1
2
1
AJMP addr11
2
2
8
LJMP addr16
3
2
1
SJMP rel
2
2
1
JMP @A+DPTR
1
2
1
JZ rel
2
2
1
JNZ rel
2
2
1
CJNE A, a8, rel
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, rel
3
2
1
NOP
1
1
1


示例

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


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

有三种无条件跳转:SJMP、LJMP 和 AJMP,但有两种无条件调用指令 ACALL、LCALL。没有 SCALL。


更新于: 2020 年 6 月 27 日

4K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告