内容正文:
四川省(对口招生)电子信息类《单片机原理及应用》
知识点讲解
考点17 掌握条件转移移指令
(JZ、JNZ、CJNZ、DJNZ)
【考情分析】
本考点是单片机程序设计核心进阶内容,承接内部数据传送与基本程序结构,是实现条件分支、计数循环的基础,在高职单招、中职升高职联考及电子信息类专业技能高考中高频考查。考查形式以单选题、判断题、程序分析题、简单程序编写题为主,侧重各条件转移指令的功能、转移条件、对标志位的影响,以及条件分支和固定次数循环的程序实现,需准确区分不同指令的适用场景与执行流程。
考纲解读
1
掌握51单片机JZ、JNZ指令的格式、功能及使用方法
2
掌握CJNE指令的格式、功能及对进位标志CY的影响
3
掌握DJNZ指令的格式、功能及计数循环的实现方法
4
能编写简单的条件分支和条件循环结构程序
条件转移指令概述
条件转移指令根据特定条件判断是否改变程序执行流程,实现程序的分支跳转和有条件重复执行,是单片机实现逻辑判断与智能控制的核心指令。
所有条件转移指令均采用相对寻址方式,转移偏移量rel的范围为 - 128~+127,即只能在当前指令前后256字节范围内跳转。
1. 累加器判零转移指令(JZ、JNZ)
指令格式与核心功能:
JZ rel ;若累加器 A 的内容为 0,则程序转移到目标地址执行;否则顺序执行下一条指令。
JNZ rel ;若累加器 A 的内容不为 0,则程序转移到目标地址执行;否则顺序执行下一条指令。
使用注意事项;
仅以累加器 A的内容是否为 0 作为唯一转移条件,不能直接判断其他寄存器或存储单元。
指令执行过程中不修改累加器 A 的内容,也不影响程序状态字 PSW 的任何标志位。
汇编语言中rel通常用标号表示,汇编器会自动计算偏移量。
2. 比较不等转移指令(CJNE)
指令格式与核心功能:
将两个无符号操作数进行比较,若两个操作数不相等则转移,同时根据比较结果设置进位标志 CY。
CJNE A, #data, rel ;累加器 A 与立即数比较,不等则转移。
CJNE A, direct, rel ;累加器 A 与直接地址单元内容比较,不等则转移。
CJNE Rn, #data, rel ;寄存器 Rn 与立即数比较,不等则转移。
CJNE @Ri, #data, rel ;间接地址单元内容与立即数比较,不等则转移。
标志位影响:
若目的操作数 < 源操作数,则进位标志CY=1。
若目的操作数 ≥ 源操作数,则进位标志CY=0。
使用注意事项:
只能用于无符号数的大小比较,不能直接比较有符号数。
是51单片机中唯一能影响标志位的转移类指令。
可结合JC(CY=1 转移)、JNC(CY=0 转移)指令实现多分支判断。
3. 减 1 不为零转移指令(DJNZ)
指令格式与核心功能:
先将指定操作数减 1,再判断结果是否为 0,若不为 0 则转移,是实现固定次数循环(计数循环)的核心指令。
DJNZ Rn, rel ;寄存器 Rn 内容减 1,若结果不为 0 则转移。
DJNZ direct, rel ;直接地址单元内容减 1,若结果不为 0 则转移。
使用注意事项:
指令执行过程中不影响 PSW的任何标志位。
循环次数由操作数的初始值决定,初始值为N则循环执行N次。
可嵌套使用实现多重循环,常用于编写延时程序、数据块处理程序。
典型程序示例
【示例1】用JZ/JNZ指令实现:若内部 RAM 30H单元内容为 0,则P1口全置0;否则P1口全置1。
asm
ORG 0000H
MOV A, 30H ;将30H单元内容送入累加器A
JZ L1 ;若A=0,跳转到标号L1处
MOV P1, #0FFH ;A≠0,P1口全置1
SJMP $ ;程序暂停
L1: MOV P1, #00H ;A=0,P1口全置0
SJMP $
END
【示例 2】用DJNZ指令实现:将内部RAM 40H~49H共16个单元全部清零。
asm
ORG 0000H
MOV R0, #40H ;设置数据块首地址指针
MOV R2, #16 ;设置循环次数(16次)
LOOP: MOV @R0, #00H ;将当前地址单元清零
INC R0 ;地址指针加1,指向下一个单元
DJNZ R2, LOOP ;R2减1,不为0则跳转到LOOP继续循环
SJMP $ ;循环结束,程序暂停
END
例题 1. 下列指令中,属于累加器判零转移指令的是()
A. DJNZ R2, LOOP B. JZ L1 C. CJNE A, #30H, L2 D. SJMP $
【解析】JZ是累加器为0转移指令,DJNZ是减1不为0转移,CJNE是比较不等转移,SJMP是无条件转移。答案:B
例题 2. 指令“CJNE A, #50H, L1”执行后,若A=40H,则CY标志位的值为()
A. 0 B. 1 C. 不确定 D. 不变
【解析】CJNE比较无符号数时,若目的操作数(A=40H)小于源操作数(#50H),则 CY=1。答案:B
例题 3. 实现固定次数循环最常用的指令是()
A. JZ B. JNZ C. DJNZ D. CJNE
【解析】DJNZ 通过“减 1 + 判断”的方式实现精确的计数循环,是固定次数循环的核心指令。答案:C
例题 4.(判断题)JZ 指令执行时会改变累加器A的内容。()
【解析】JZ仅判断A的内容是否为0,不修改A的值,也不影响任何标志位。答案:×
【参考答案】 B B C ×
【高考题实战】
真题 1(2025 高考 单选)指令“DJNZ R1, LOOP”的功能是()
A. R1 内容减 1,若结果不为 0 则跳转到 LOOP
B. R1 内容加 1,若结果不为 0 则跳转到 LOOP
C. 判断 R1 是否为 0,为 0 则跳转到 LOOP
D. 比较 R1 与 0,不相等则跳转到 LOOP
真题 2(2024 高考 单选)下列指令中,会影响进位标志CY的是()
A. JZ L1 B. DJNZ R2, LOOP
C. CJNE A, #20H, L3 D. MOV A, 30H
真题 3(2025 高考 判断)DJNZ指令只能使用寄存器Rn作为循环计数器。()
真题 4(2023 单招 单选)要实现“若累加器A不为0则跳转到 NEXT”,应使用的指令是()
A. JZ NEXT B. JNZ NEXT
C. CJNE A, #00H, NEXT D. DJNZ A, NEXT
【参考答案】A C × B
【模拟演练】
一、单选题
1.下列不属于条件转移指令的是()
A. JZ L1 B. DJNZ R2, LOOP
C. CJNE A, #10H, L2 D. MOV A, R0
2.JNZ指令的转移条件是()
A. A=0 B. A≠0 C. CY=0 D. CY=1
3.指令“CJNE A, 30H, L1”的源操作数采用的寻址方式是()
A. 立即寻址 B. 直接寻址 C. 寄存器寻址 D. 寄存器间接寻址
4.用 DJNZ 实现20次循环,循环计数器的初始值应设为()
A. 0 B. 19 C. 20 D. 21
5.结合CJNE指令实现“若 A<30H 则转移”,应搭配的指令是()
A. JZ L1 B. JNZ L1 C. JC L1 D. JNC L1
6.CJNE指令比较两个无符号数时,若目的操作数大于源操作数,则()
A. CY=0,不转移 B. CY=0,转移
C. CY=1,不转移 D. CY=1,转移
7.下列关于条件转移指令的说法,正确的是()
A. 所有条件转移指令都影响 PSW 标志位
B. 条件转移指令只能实现向前转移
C. 相对寻址的偏移量范围是 -128~+127
D. JZ指令可以判断任意寄存器是否为 0
8.指令“DJNZ 50H, LOOP”的功能是()
A. 50H单元内容减1,若结果不为0则跳转到 LOOP
B. R50内容减1,若结果不为0 则跳转到 LOOP
C. 50H单元内容加1,若结果不为0则跳转到 LOOP
D. 判断50H单元是否为 0,不为0则跳转到 LOOP
9.要实现“将内部 RAM 20H~2FH单元全部置为 0FFH”,最适合使用的指令组合是()
A. MOV+JZ B. MOV+DJNZ C. MOV+CJNE D. MOV+SJMP
10.下列程序段执行后,R2的值为()
MOV R2, #5
LOOP: DJNZ R2, LOOP
A. 0 B. 1 C. 4 D. 5
二、判断题
1.条件转移指令根据指定条件决定是否改变程序执行流程。()
2.JZ指令执行时会将累加器A清零。()
3.CJNE指令执行后会保存两个操作数相减的结果。()
4.DJNZ指令先判断操作数是否为0,再将其减 1。()
5.所有条件转移指令都采用相对寻址方式。()
6.CJNE指令可以直接比较两个有符号数的大小。()
7.用DJNZ实现循环时,循环次数等于计数器的初始值。()
8.JNZ指令不影响 PSW的任何标志位。()
9.条件转移指令既可以实现向前转移,也可以实现向后转移。()
10.CJNE 指令是51单片机中唯一能影响进位标志CY的转移类指令。()
【参考答案】
一、单选题
D B B C C B C A B A
二、判断题
√ × × × √ × × √ √ √
原创精品资源学科网独家享有版权,侵权必究
学科网(北京)股份有限公司zxxk.com
学科网(北京)股份有限公司
$