内容正文:
举一反三考点练
《单片机技术与应用》单片机程序设计-讲义
1. 重点掌握简单程序编写(内部数据传送,顺序结构、无条件循环结构);
2. 重点掌握单片机分支程序读识(分支结构、有限循环结构);
3. 理解条件分支程序编写;
知识点一 简单程序编写(内部数据传送,顺序结构、无条件循环结构)
一、内部数据传送
概念:内部数据传送是指单片机内部各个寄存器、存储单元之间的数据传递过程。它包括寄存器与寄存器之间的数据传送、寄存器与存储单元之间的数据传送以及存储单元与存储单元之间的数据传送。
相关知识点:
(1)寄存器:单片机内部具有多种寄存器,如累加器(ACC)、寄存器R0-R7、程序状态字(PSW)等。
(2)数据传送指令:主要包括MOV、MOVC、MOVX等指令,用于实现不同类型的数据传送。
(3)寻址方式:单片机内部数据传送涉及多种寻址方式,如立即寻址、直接寻址、寄存器寻址、寄存器间接寻址等。
二、顺序结构
概念:顺序结构是指程序按照代码的先后顺序依次执行的结构。在顺序结构中,每个语句都会被执行一次,且执行顺序与代码书写顺序一致。
相关知识点:
(1)程序执行流程:顺序结构是最基本的程序执行流程,遵循“自上而下,从左到右”的原则。
(2)语句:顺序结构中的语句可以是数据传送指令、算术运算指令、逻辑运算指令等。
(3)顺序执行:在顺序结构中,程序按照语句的先后顺序依次执行,不会发生跳转。
三、无条件循环结构
概念:无条件循环结构是指程序在满足一定条件之前,反复执行某段代码的结构。无条件循环结构中,循环体至少被执行一次。
相关知识点:
(1)循环指令:主要包括DJNZ(减1不为0跳转)和JMP(无条件跳转)等指令。
(2)循环条件:无条件循环结构中的循环条件通常是固定的,如寄存器的值不为0。
(3)循环体:循环体是指需要反复执行的代码段。
(4)循环次数:通过修改循环条件,可以控制循环体执行的次数。
1. (单项选择题)下列关于单片机内部数据传送的说法,错误的是?( )
A. 内部数据传送可以在寄存器与寄存器之间进行
B. 内部数据传送只能通过MOV指令实现
C. 内部数据传送可以在寄存器与存储单元之间进行
D. 内部数据传送的寻址方式包括立即寻址、直接寻址等
【答案】B
【解析】内部数据传送不仅可以通过MOV指令实现,还可以通过MOVC、MOVX等指令实现。
【要点】考查单片机内部数据传送的指令和寻址方式。
1. (单项选择题)以下哪个指令不属于顺序结构中的数据传送指令?( )
A. MOV B. ADD C. MOVC D. JMP
【答案】D
【解析】JMP指令是无条件跳转指令,不属于顺序结构中的数据传送指令。
【要点】考查顺序结构中的数据传送指令。
2. (单项选择题)关于无条件循环结构,以下说法正确的是?( )
A. 无条件循环结构中的循环体至少被执行一次
B. 无条件循环结构的循环次数是固定的
C. 无条件循环结构只能通过DJNZ指令实现
D. 无条件循环结构的循环条件是可变的
【答案】A
【解析】无条件循环结构中的循环体至少被执行一次,循环次数和循环条件可能根据程序设计而变化。
【要点】考查无条件循环结构的基本概念。
3. (判断题)顺序结构中的程序执行流程是“自上而下,从左到右”。( )
【答案】√
【解析】顺序结构确实遵循“自上而下,从左到右”的执行流程。
【要点】考查顺序结构的执行流程。
1. (判断题)在单片机内部数据传送过程中,寄存器间接寻址方式的速度比立即寻址方式快。( )
【答案】×
【解析】立即寻址方式的速度通常比寄存器间接寻址方式快。
【要点】考查单片机内部数据传送的寻址方式。
2. (填空题)在单片机程序设计中,用于实现寄存器与寄存器之间数据传送的指令是______。
【答案】MOV
【解析】MOV指令可以实现寄存器与寄存器之间的数据传送。
【要点】考查数据传送指令。
3. (填空题)在无条件循环结构中,用于控制循环次数的指令通常是______。
【答案】DJNZ
【解析】DJNZ指令用于实现寄存器值的减1操作,并根据结果决定是否跳转,从而控制循环次数。
【要点】考查无条件循环结构的控制指令。
· 单片机内部数据传送涉及多种寻址方式和指令,如MOV、MOVC、MOVX等,这些指令可以实现寄存器与寄存器、寄存器与存储单元之间的数据传递。
· 顺序结构是程序设计中的基本结构,其执行流程是按照代码的先后顺序“自上而下,从左到右”进行,确保程序按预定顺序执行。
· 无条件循环结构在程序中至少执行一次循环体,通过特定的循环控制指令(如DJNZ)来控制循环次数,适用于需要重复执行某段代码的场景。
· 程序设计中的数据传送和循环结构是构建复杂程序的基础,掌握这些基本概念和指令对于编写高效、可靠的单片机程序至关重要。
知识点二 单片机分支程序读识(分支结构、有限循环结构)
一、分支结构
概念:分支结构是指程序根据特定的条件判断结果来选择不同的执行路径。在单片机编程中,分支结构通过条件跳转指令来实现。
相关知识点:
条件跳转指令:如JZ(结果为零则跳转)、JNZ(结果不为零则跳转)、JC(进位标志为1则跳转)等。
分支条件:通常是基于单片机的标志寄存器中的状态位,如零标志位(Z)、进位标志位(C)等。
分支语句:在汇编语言中,分支语句通常是一条或多条条件跳转指令。
分支类型:
单分支结构:只有一个判断条件,根据条件是否满足执行不同的代码段。
例:
START: MOV AX,DATA
MOV DS,AX
LEA SI,BUF
MOV AL,[SI]
CMP AL,[SI+1]
JNB NEXT ;如果X1不小于X2,则转到NEXT
MOV AL,[SI+1] ;如果X1小于X2,则将A2送给AL
NEXT: CMP AL,[SI+2]
JNB NEXT1
MOV AL,[SI+2]
NEXT1: MOV Y,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
双分支结构:有两个判断条件,形成两个执行路径。
多分支结构:有多个判断条件,形成多个执行路径。
二、有限循环结构
概念:有限循环结构是指程序中的一段代码在满足特定条件之前会重复执行一定次数。与无条件循环不同,有限循环结构通常有一个明确的结束条件。
一个循环程序通常由四部分构成:
(1)初始化部分
建立循环初始值。如初始化地址指针,计数器,其他循环参数的起始值等。
(2)工作部分
它是循环程序的这主要部分,是为完成某种特定功能而设计的程序段。
(3)修改部分
为保证正确的循环而修改某些参数。如修改计数器的值、操作数地址等。
(4)控制部分
判断循环结束条件是否成立。
通常判断循环是否结束的办法有两种:
①用计数控制循环:循环是否已进行预定次数,它适用于已知循环次数的循环程序设计;
②用条件控制循环:循环终止条件是否已成立, .它适用于未知循环次数的循环程序设计。
跳转指令:
jmp
格式:Jump short 标号
jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP; jmp指令要给出两种信息:转移的地址,转移的距离(段间转移、段内短转移,段内近转移)。
LOOP 重复控制
格式: LOOP OPR
执行的操作: (CX) ←(CX)-1。 若CX≠0,跳转到标号OPR处循环执行;若CX=0,则退出循环,执行LOOP的下一条指令。
相关知识点:
循环指令:如DJNZ(减1不为0则跳转)、LOOP(循环指令,配合寄存器操作)等。
循环条件:循环的执行次数通常由一个计数器来控制,当计数器减到0时,循环结束。
循环体:循环体内包含需要重复执行的代码。
循环类型:
计数循环:使用计数器来控制循环次数,如使用DJNZ指令。
条件循环:根据特定的条件判断结果来决定是否继续循环。
例:将ARRAY数组中的50个数求和,并将和存入字变量S中。
MOV AX,0 ;累加求和寄存器清0
MOV BX,OFFSET ARRA Y ; 数组始址送BX中
MOV CX,50 ;循环控制计数初始化
AGAIN : ADD AX,[BX]
ADD BX,2 ;数组地址增2,BX指向下一个元素
DEC CX ;循环控制计数减1
JNZ AGAIN ;计数不为0时继续循环
MOV S,AX ;计数为0时循环结束,和存于S中
1. (单项选择题)下列关于单片机分支结构的说法,错误的是?( )
A. 分支结构通过条件跳转指令实现
B. 分支结构可以根据程序状态选择不同的执行路径
C. 分支结构只能用于简单的条件判断
D. 分支结构包括单分支、双分支和多分支
【答案】C
【解析】分支结构不仅适用于简单的条件判断,也可以用于复杂的条件判断。
【要点】考查分支结构的应用范围。
1. (单项选择题)在单片机程序中,以下哪个指令用于实现条件跳转?( )
A. JMP B. DJNZ C. JZ D. MOV
【答案】C
【解析】JZ指令用于在累加器A的值为0时进行条件跳转。
【要点】考查条件跳转指令的识别。
2. (单项选择题)以下关于有限循环结构的说法,正确的是?( )
A. 有限循环结构没有明确的结束条件
B. 有限循环结构的循环次数是无限的
C. 有限循环结构通常使用计数器来控制循环次数
D. 有限循环结构不能使用条件跳转指令
【答案】C
【解析】有限循环结构通常使用计数器来控制循环次数,确保循环在一定次数后结束。
【要点】考查有限循环结构的特点。
3. (判断题)在单片机程序设计中,分支结构可以用来实现程序的跳转和选择不同的执行路径。( )
【答案】√
【解析】分支结构确实可以用来实现程序的跳转和选择不同的执行路径。
【要点】考查分支结构的功能。
1. (判断题)在有限循环结构中,DJNZ指令是用来无条件跳转到指定地址的。( )
【答案】×
【解析】DJNZ指令是用来在寄存器值减1后不为0时跳转到指定地址,是有条件跳转。
【要点】考查DJNZ指令的功能。
2. (填空题)在单片机程序设计中,用于根据条件是否满足来选择执行路径的指令是______。
【答案】条件跳转指令
【解析】条件跳转指令如JZ、JNZ等,用于根据条件是否满足来选择执行路径。
【要点】考查条件跳转指令的作用。
3. (填空题)在有限循环结构中,用于控制循环次数的寄存器通常被称为______。
【答案】计数器
【解析】在有限循环结构中,计数器用于记录循环的次数,从而控制循环的执行。
【要点】考查有限循环结构中的计数器。
· 程序结构理解:单片机程序设计中的基本结构包括顺序结构、分支结构和循环结构。顺序结构是程序执行的默认模式,分支结构用于根据条件选择不同的执行路径,而循环结构则用于重复执行一段代码。
· 数据传送操作:内部数据传送是单片机编程中的基本操作,涉及寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的数据传递,这是实现程序功能的基础。
· 条件跳转指令:在单片机程序设计中,条件跳转指令是实现分支结构的关键,它们根据特定的条件来决定程序是否跳转到指定地址执行,从而实现程序流程的控制。
· 循环控制:循环结构通过设置循环条件和循环体来实现代码的重复执行。有限循环结构通常使用计数器来控制循环次数,确保程序在执行一定次数后能够退出循环。
知识点三 条件分支程序编写
一、与分支有关的指令
1.1 无条件转移指令
格式:JMP label
功能:JMP 指令无条件跳转到目标地址,该地址用代码标号(label)来标识,并被汇编器转换为偏移量。
说明:当 CPU 执行一个无条件转移时,目标地址的偏移量被送入指令指针寄存器,从而导致迈从新地址开始继续执行。
1.2 条件转移指令
格式:Jcc label
功能:指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令。
说明:
(1)操作数label是采用段内短转移;
(2)Jcc指令不影响标志,但要利用标志。
Jcc指令的分类:根据利用的标志位不同,16条指令分成3种情况。
(1)判断单个标志位状态
(2)比较无符号数高低
(3)比较有符号数大小
1.2.1 判断单个标志位状态
这组指令单独判断5个状态标志之一:
JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等)。 JZ/JE表示结果为零(或相等),则转移。
JS和JNS:利用符号标志SF,判断结果是正是负, JS表示结果为负则转移。
JO和JNO:利用溢出标志OF,判断结果是否产生溢出, JO表示溢出则转移。
JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中“1”的个数是偶是奇。JP表示偶个数个1。
JC和JNC:利用进位标志CF,判断结果是否进位或借位。进位或借位为1则转移。
1.2.2 比较无符号数高低
无符号数高低有4种关系:
高于(不低于等于):JA 和JNBE
高于等于(不低于):JAE 和JNB
低于(不高于等于):JB和JNAE
低于等于(不高于):JBE和JNA
1.2.3 比较有符号数大小
两数的大小分成4种关系:
大于(不小于等于):JG和JNLE
大于等于(不小于):JGE和JNL
小于(不大于等于):JL和JNGE
小于等于(不大于):JLE和JNG
二、分支的概念
分支程序根据条件是真或假决定执行与否,判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志与条件转移指令Jcc联合可以实现分支控制。
1.1 单重分支
条件成立跳转到标号所在的指令执行,否则顺序执行分支语句体。
注意:选择正确的条件转移指令和转移目标地址。
例:编程求|X-Y|,结果存于RESULT单元中,设X和Y都为16位数。
DATA SEGMENT
X DW -10
Y DW 20
RESULT DW?
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
SUB AX,Y
JNS NONNEG
NEG AX
NONNEG:
MOV RESULT,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.2 双分支
条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。
注意第1个分支体后一定要有一个JMP指令跳到第2个分支体后。
1. (单项选择题)下列关于无条件转移指令的说法,错误的是?( )
A. JMP 指令可以无条件跳转到目标地址
B. JMP 指令的目标地址由代码标号(label)标识
C. JMP 指令执行后,程序会继续执行下一条指令
D. JMP 指令会影响指令指针寄存器的值
【答案】C
【解析】JMP 指令执行后,程序会跳转到目标地址执行,而不是继续执行下一条指令。
【要点】考查无条件转移指令的基本功能。
1. (单项选择题)下列关于条件转移指令的说法,正确的是?( )
A. Jcc 指令在条件不成立时跳转到目标地址
B. Jcc 指令会影响标志寄存器的值
C. Jcc 指令的目标地址可以是段间转移
D. Jcc 指令在条件成立时跳转到目标地址
【答案】D
【解析】Jcc 指令在条件成立时跳转到目标地址执行。
【要点】考查条件转移指令的基本功能。
2. (单项选择题)下列关于分支程序的说法,错误的是?( )
A. 分支程序可以根据条件真假决定执行与否
B. 分支程序中的条件判断可以使用 CMP 指令
C. 分支程序只能实现单重分支
D. 分支程序中的条件转移指令需要与状态标志联合使用
【答案】C
【解析】分支程序可以实现单重分支和多重分支。
【要点】考查分支程序的概念。
3. (判断题)无条件转移指令 JMP 可以实现段间转移。( )
【答案】×
【解析】无条件转移指令 JMP 通常实现段内转移,而不是段间转移。
【要点】考查无条件转移指令的使用范围。
1. (判断题)条件转移指令 Jcc 在条件不成立时会改变程序执行顺序。( )
【答案】×
【解析】条件转移指令 Jcc 在条件不成立时,程序会顺序执行下一条指令,不会改变执行顺序。
【要点】考查条件转移指令的功能。
2. (填空题)用于判断结果是否为零(或相等)的条件转移指令是______。
【答案】JZ/JE
【要点】考查判断单个标志位状态的条件转移指令。
3. (填空题)在分支程序中,用于比较无符号数高低的条件转移指令有______、______、______和______。
【答案】JA、JNBE、JB、JNAE
【要点】考查比较无符号数高低的条件转移指令。
· 分支指令是汇编语言中用于控制程序执行流程的关键手段,包括无条件转移指令和条件转移指令。
· 无条件转移指令 JMP 用于实现程序的无条件跳转,它会改变指令指针寄存器的值,从而改变程序的执行流程。
· 条件转移指令 Jcc 依赖于 CPU 的状态标志寄存器,根据不同的条件判断结果,决定是否跳转到目标地址执行,从而实现程序的条件分支。
· 分支程序设计时,需要根据实际需求选择合适的条件转移指令,并正确设置转移目标地址,以实现程序逻辑的正确执行。分支程序可以分为单重分支和双重分支,分别对应单一条件和双向选择的程序结构。
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$