14课单片机条件转移指令

合集下载

单片机数据传送指令c语言

单片机数据传送指令c语言

单片机数据传送指令c语言单片机是一种集成电路,也称为微控制器。

它内部集成了处理器、存储器和各种外围设备接口,并且可以通过程序来控制其工作。

在单片机编程过程中,数据传送指令是常用的指令之一。

数据传送指令用于在单片机中传输数据,可以实现寄存器之间的数据传递、数据移动和数据保存等功能。

下面我将详细介绍单片机数据传送指令的使用方法。

首先,我们需要了解数据传送指令的基本格式。

数据传送指令通常以下面的形式出现:MOV destination, source。

其中,destination表示目标操作数,source表示源操作数。

要执行一条数据传送指令,首先需要确定传输数据的源和目标,然后根据具体需求选择合适的寻址方式来指定源和目标的地址。

下面我将介绍几种常用的寻址方式。

第一种寻址方式是立即寻址(Immediate Addressing)。

在立即寻址中,source指定了一个立即数,表示需要传送的数据。

立即数是在指令中给出的常数值,可以直接传送到目标寄存器或内存地址中。

例如,MOV A, #15表示将立即数15传送到A寄存器中。

第二种寻址方式是直接寻址(Direct Addressing)。

直接寻址中,source 指定了一个源寄存器或内存地址,将该寄存器或内存地址中的内容传送到目标寄存器或内存地址中。

例如,MOV A, B表示将B寄存器中的内容传送到A寄存器中。

第三种寻址方式是寄存器间接寻址(Register Indirect Addressing)。

在寄存器间接寻址中,source指定了一个寄存器的地址,将该寄存器中的内容传送到目标寄存器或内存地址中。

例如,MOVX @DPTR, A表示将A 寄存器中的内容传送到DPTR寄存器指向的内存地址中。

第四种寻址方式是间接偏移寻址(Indirect Offset Addressing)。

在间接偏移寻址中,source指定了一个源寄存器和一个偏移量,将源寄存器地址加上偏移量得到的地址中的内容传送到目标寄存器或内存地址中。

转移指令及位操作指令

转移指令及位操作指令

7
• 例:利用子程序调用编写令20H-2AH, 30H-3EH,40H-4FH 三个区域清零的程 序
可编辑版
8
ORG 1000H
MOV SP,#70H
MOV R0,#20H
MOV R2,#0BH
ACALL ZERO
MOV R0,#30H
MOV R2,#0FH
ACALL ZERO
MOV R0,#40H
• 1、已知某单片机监控程序始址为A080H, 问用什么办法是单片机开机后自动执行 监控程序
• 2、已知MA=0500H,问8051单片机执行 如下指令

MOV SP ,#70H
• MA:LCALL 8192H
• 堆栈中数据如何变化,PC中内容是什么
可编辑版
11
• 3、已知外部RAM中以3000H为始址的数 据块以零为结束标志,试编程将之传送 到以30H为始址的内部RAM区
LCALL 标号 ;标号表示子程序首地址 ACALL 标号 来调用子程序。
可编辑版
5
(2)返回指令 (2条)
子程序执行完后必须回到主程序,如何返
回呢?只要执行一条返回指令就可以了。
RET
;子程序返回指令
RETI
;中断子程序返回指令
两者不能互换使用。
可编辑版
6
4. 空操作指令(1条)
NOP
可编辑版
可编辑版
17
(2)判位直接寻址位转移指令 JB bit,rel JNB bit,rel JBC bit,rel 第一条指令:如果指定的(bit)=1,则转移,否 则顺序执行,第二条指令功能相反。
同样理解:JB bit,标号 第三条指令是如果指定的(bit)=1,则转移, 并把该位清0,否则顺序执行。

单片机指令大全

单片机指令大全

引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。

本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。

正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。

2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。

3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。

4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。

5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。

二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。

2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。

3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。

4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。

5.逻辑移位指令:将操作数进行逻辑左移或右移。

三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。

2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。

3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。

4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。

5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。

四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。

2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。

3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。

4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。

汇编条件转移指令

汇编条件转移指令

汇编条件转移指令1. 指令简介在汇编语言中,条件转移指令用于根据某个条件是否满足来决定是否跳转到某个指定的目标地址。

条件转移指令根据条件码寄存器中的标志位来进行判断,根据不同的条件码进行跳转或不跳转。

条件转移指令可以根据标志位的值来实现各种条件的判断,例如比较两个数的大小、判断某位是否为1等。

2. 有符号数的比较和跳转条件转移指令可以用于有符号数的比较和跳转。

在进行有符号数的比较时,需要使用特定的条件码,例如OF、SF、ZF等。

下面是一些常用的有符号数比较和跳转的条件码及其含义:•JO:溢出时跳转•JNO:不溢出时跳转•JS:结果为负时跳转•JNS:结果为非负时跳转•JE/JZ:结果为零时跳转•JNE/JNZ:结果不为零时跳转•JL/JNGE:结果为小于时跳转•JLE/JNG:结果为小于等于时跳转•JG/JNLE:结果为大于时跳转•JGE/JNL:结果为大于等于时跳转例如,我们可以通过如下汇编代码实现有符号数的比较和跳转:MOV AX, 10CMP AX, 20JL Less ; 如果AX小于20,则跳转到Less标签处在上面的例子中,如果AX的值小于20,则跳转到Less标签处继续执行代码。

3. 无符号数的比较和跳转与有符号数类似,条件转移指令也可以用于无符号数的比较和跳转。

在进行无符号数的比较时,需要使用特定的条件码,例如CF、ZF等。

下面是一些常用的无符号数比较和跳转的条件码及其含义:•JC:进位时跳转•JNC:不进位时跳转•JAE/JNB:大于等于时跳转•JB/JNAE:小于时跳转•JBE/JNA:小于等于时跳转•JA/JNBE:大于时跳转例如,在对无符号数进行比较时,可以使用如下汇编代码:MOV AX, 10CMP AX, 20JAE GreaterEqual ; 如果AX大于等于20,则跳转到GreaterEqual标签处在上面的例子中,如果AX的值大于等于20,则跳转到GreaterEqual标签处继续执行代码。

单片机指令大全(一)

单片机指令大全(一)

单片机指令大全(一)引言概述:本文是关于单片机指令的大全,主要介绍了单片机指令的基本概念和应用。

单片机指令是单片机操作的核心,具有重要的意义。

本文将按照不同的功能对单片机指令进行分类和阐述,为读者提供一份全面而简明的单片机指令资料。

正文:一、数据传送相关指令1. mov指令:用于将数据从一个寄存器传送到另一个寄存器2. ldi指令:用于将立即数存入寄存器3. ld指令:用于将存储器中的数据传送到寄存器4. st指令:用于将寄存器中的数据传送到存储器5. push和pop指令:用于将数据存入和取出堆栈二、算术运算指令1. add指令:用于将两个寄存器中的数据相加2. sub指令:用于将一个寄存器中的数据减去另一个寄存器中的数据3. inc和dec指令:用于将一个寄存器中的数据递增或递减4. mul和div指令:用于进行乘法和除法运算5. clr指令:用于将一个寄存器中的数据清零三、逻辑运算指令1. and指令:用于对两个寄存器中的数据进行按位与运算2. or指令:用于对两个寄存器中的数据进行按位或运算3. xor指令:用于对两个寄存器中的数据进行按位异或运算4. not指令:用于对一个寄存器中的数据进行取反运算5. test指令:用于对寄存器数据进行测试四、跳转指令1. jmp指令:用于无条件跳转到指定的地址2. jc、jnc、jz、jnz指令:用于根据特定条件进行跳转3. call和ret指令:用于子程序调用和返回4. cmp指令:用于比较两个寄存器中的数据5. loop指令:用于循环执行指定次数的程序五、I/O操作指令1. in指令:用于输入外设数据到寄存器中2. out指令:用于将寄存器中的数据输出到外设3. stc和clc指令:用于设置和清除进位标志位4. ei和di指令:用于开启和关闭中断5. hlt指令:用于控制单片机暂停执行总结:本文介绍了单片机指令的基本概念和分类,并详细阐述了每类指令的具体功能和使用方法。

03.10 第三章 - 单片机指令系统(条件转移类指令LJMP、AJMP、SJMP、JMP、JZ、DJNZ、CJNE、RET、RETI)

03.10 第三章 - 单片机指令系统(条件转移类指令LJMP、AJMP、SJMP、JMP、JZ、DJNZ、CJNE、RET、RETI)

09:42
单片机技术
12
第三章:MSC-51 单片机指令系统
3.10.2 - 条件转移类指令
❖ 理解条件的概念 ❖ 掌握JZ、JNZ的特点和用法 ❖ 掌握DJNZ的特点和用法 ❖ 掌握CJNE的特点和用法
09:42
单片机技术
13
3.10.2 条件转移指令(JZ、DJNZ、CJNE)
❖ 1.判A转移指令(JZ、JNZ)
09:42
单片机技术
4
3.10 控制转移类指令 ❖ 控制转移类指令分类
▪ 无条件转移指令: 指执行此类指令,程序将无条件转移到目的地址
包括:LJMP 、AJMP 、SJMP 、JMP
Long(长-64KB)Absolutely(绝对-2KB)Short(短-256B)Jump(跳)
▪ 条件转移指令:
指程序需满足某种条件时,才转移到目的地址,否则顺 序执行下一条指令。
包括:JC、JB、JBC、JZ、DJNZ、CJNE
09:42
单片机技术
5
3.10.1 无条件转移指令(LJMP、AJMP、SJMP、JMP)
❖ 1.长转移指令(LJMP)
▪ 格式:LJMP addr16 ;PC =(PC)+ 3
;PC ← addr15~0 ▪ 范围:216B = 64KB,(0000H~FFFFH)
▪ 格式:JZ rel ;当A = 00H时转向rel,PC' =(PC)+ 2+rel ;否则顺序执行,PC' =(PC)+ 2
▪ 格式:JNZ rel ;当A ≠ 00H时转向rel,PC' =(PC)+2+rel ;否则顺序执行,PC' =(PC)+ 2

51单片机汇编语言教程:14课单片机条件转移指令

51单片机汇编语言教程:14课单片机条件转移指令

51单片机汇编语言教程:第14课-单片机条件转移指令(基于HL-1、HJ-C52、HJ-3G实验板)(图片HL-1开发板)条件转移指令是指在满足一定条件时进行相对转移。

判A内容是否为0转移指令JZ relJNZ rel第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)。

转移到什么地方去呢?如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了。

因此这第指令我们能这样理解:JZ标号。

即转移到标号处。

下面举一例说明:MOV A,R0JZ L1MOV R1,#00HAJMP L2L1:MOV R1,#0FFHL2:SJMP L2END在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。

而如果R0中的值不等于0,则次序执行,也就是执行MOV R1,#00H指令。

最终的执行结果是R1中的值等于0。

第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。

把上面的那个例程中的JZ改成JNZ试试吧,看看程序执行的结果是什么?比较转移指令CJNE A,#data,relCJNE A,direct,relCJNE Rn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNE A,#data,标号。

这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。

但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。

如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。

例:MOV A,R0CJNE A,#10H,L1MOV R1,#0FFHAJMP L3L1:JC L2MOV R1,#0AAHAJMP L3L2:MOV R1,#0FFHL3:SJMP L3上面的程序中有一条单片机指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。

单片机的指令系统

单片机的指令系统

单片机的指令系统单片机的指令系统是指由微处理器内部电路执行的一系列指令集合。

它们定义了微处理器如何解析和执行机器语言指令,控制计算机内部各个部件的运行方式,以及与外部设备的数据交换方式。

单片机的指令系统对于开发者来说至关重要,因为它直接影响着单片机的功能和性能。

一、指令的分类和功能单片机的指令可以分为多类,包括数据传送指令、算术运算指令、逻辑运算指令、控制转移指令等。

1. 数据传送指令数据传送指令用于将数据从一个存储器单元复制到另一个存储器单元,或者将数据从存储器单元传送到寄存器中。

这些指令通常用于数据的读写操作,包括加载数据、保存数据等。

2. 算术运算指令算术运算指令用于执行各种数学运算,如加法、减法、乘法、除法等。

这些指令使单片机能够进行数值计算,从而实现各种复杂的算法。

3. 逻辑运算指令逻辑运算指令用于执行逻辑运算,如与、或、非等。

这些指令主要用于判断条件和处理逻辑关系,可以实现逻辑判断、控制流程等功能。

4. 控制转移指令控制转移指令用于改变代码的执行顺序,实现程序的跳转和循环。

这些指令包括无条件跳转指令和条件跳转指令,能够根据不同的条件选择不同的执行路径。

二、指令系统的设计与优化设计一个高效的指令系统是提高单片机性能的关键。

指令系统的设计应考虑以下几个方面:1. 指令集的合理性指令集应包含满足大多数应用要求的基本指令,并尽量减少冗余指令。

合理的指令集能够简化程序设计和编写,提高代码效率。

2. 指令的执行速度指令的执行速度直接影响单片机的工作效率。

为了提高执行速度,可以采用流水线技术、并行处理等方法来优化指令的执行过程。

3. 指令的编码方式指令的编码方式直接影响指令译码的效率和硬件资源的利用率。

应选择合适的编码方式来减少指令译码的复杂度和硬件成本。

4. 指令的优先级和中断处理指令的优先级和中断处理是实现实时控制和响应的关键。

指令系统的设计应考虑到不同指令的优先级和中断处理机制,以满足实时性要求。

单片机指令表汇总

单片机指令表汇总

51单片机指令表汇总51单片机是一种广泛应用的微控制器,其指令集是进行编程的基础。

下面将51单片机的指令表进行汇总,以帮助初学者更好地理解其指令集。

一、数据传输指令1、MOV指令:将源操作数的内容传送到目标操作数。

2、XCH指令:将两个操作数的内容互换。

3、MOVC指令:从外部存储器将数据传送到目标操作数。

4、MOVX指令:将外部存储器中的数据传送到目标操作数。

5、PUSH指令:将数据压入堆栈。

6、POP指令:从堆栈中弹出数据。

二、算术运算指令1、ADD指令:将两个操作数相加,并将结果存放在目标操作数中。

2、SUB指令:从目标操作数中减去源操作数,并将结果存放在目标操作数中。

3、MUL指令:将两个操作数相乘,并将结果存放在目标操作数中。

4、DIV指令:将目标操作数除以源操作数,并将结果存放在目标操作数中。

5、ANL指令:对目标操作数和源操作数进行按位与运算,并将结果存放在目标操作数中。

6、ORL指令:对目标操作数和源操作数进行按位或运算,并将结果存放在目标操作数中。

7、XRL指令:对目标操作数和源操作数进行按位异或运算,并将结果存放在目标操作数中。

8、CPL指令:对目标操作数进行按位取反运算,并将结果存放在目标操作数中。

9、INC指令:将目标操作数加1。

10、DEC指令:将目标操作数减1。

11、ASR指令:将目标操作数右移n位,最高位用符号位补齐。

12、LSR指令:将目标操作数右移n位,最低位用0补齐。

13、ROL指令:将目标操作数循环左移n位,最高位移入最低位。

14、ROR指令:将目标操作数循环右移n位,最低位移入最高位。

单片机汇编指令表一、概述在单片机的世界里,汇编语言扮演着举足轻重的角色。

它是一种低级语言,能够直接与硬件进行交互,提供高效的代码执行效率。

下面,我们将详细列出一些常见的单片机汇编指令,以及它们的功能。

二、指令表1、MOV指令:用于将数据从一个寄存器移动到另一个寄存器。

例如,MOV R1, R2将把 R2的内容移动到 R1中。

条件转移类指令范例

条件转移类指令范例

条件转移类指令范例——方案将00H~0FH这16个数顺序地置入片内RAM20H~2FH单元中。

一、MOV R0,#20HCLR ALOOP:MOV @R0,AINC AINC R0DJNZ R7,LOOPSJMP $三、MOV R0,#20HMOV A,#0FHMOV 30H,#00HLOOP:MOV @R0,30HINC 30HINC R0DEC AJNZ LOOPSJMP $四、MOV R0,#20HMOV A,#0FHMOV 30H,#00HLOOP:MOV @R0,30HINC 30HINC R0SUBB A,#01HJNC LOOPSJMP【例】设(SP)=30H,符号地址PROG1指向程序存储器的5678H单元,当前PC值为0123H。

从0123H处执行指令“LCALL PROG1”,分析执行后PC、SP的值和相关存储器的内容。

解:执行过程为:(PC)+3=0123H+3=0126H。

将PC内容压入堆栈:向(SP)+1=31H中压入26H,向(SP)+1=32H中压入01H,(SP)=33H。

将PROG1=5678H送入PC,即(PC)=5678H。

程序转向以5678H为首地址的子程序执行。

最终执行结果是:(PC)=5678H、(SP)=33H、(31H)=26H、(32H)=01H。

【例】利用DJNZ指令和NOP指令编写一循环程序,实现延时1ms(晶振频率为12MHz)。

解:程序如下:DELAY: MOV R1,#0AH ;1µsLOOP: MOV R2,#30H ;1µsDJNZ R2,$ ;2×48µsDJNZ R1,LOOP ;1µs×(1+2×48+2)×10NOP ;1µsNOP ;1µsNOP ;1µsNOP ;1µsNOP ;1µsRET ;2µs总的延时时间为:1+(1+2×48+2)×10+7=998µs,若再加上调用本子程序的调用指令所用的时间2µs共1000µs,即1ms【例】利用逻辑运算指令实现逻辑关系:Y=(A∧B)∨(C∧D),A、B、C、D均为位变量。

指令系统转移指令

指令系统转移指令
test dl,0ffh ;使CF=0,同时设置PF标志 jpe done ;DL中“1”的个数为偶数 ;正好CF=0,转向done stc ;DL中“1”的个数为奇数,设置CF=1 done: …… ;完成
2. 比较无符号数高低
无 符 号 数 的 大 小 用 高 ( Above ) 、 低 (Below)表示,需要利用CF确定高低、 利用ZF标志确定相等(Equal) 两数的高低分成4种关系,对应4条指令
⑴ JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等)
⑵ JS和JNS 利用符号标志SF,判断结果是正是负
⑶ JO和JNO 利用溢出标志OF,判断结果是否产生溢出
⑷ JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中“1”的个数是偶是奇
⑸ JC/JB/JNAE和JNC/JNB/JAE 利用进位标志CF,判断结果是否进位或借位
JB(JNAE):目的操作数(<)源操作数 JNB(JAE):目的操作数(>=)源操作数 JBE(JNA):目的操作数(<=)源操作数 JNBE(JA):目的操作数(>)源操作数
3. 比较有符号数大小
判 断 有 符 号 数 的 大 ( Greater ) 、 小 ( Less ) , 需 要 组 合 OF 、 SF 标 志 、 并 利 用ZF标志确定相等与否 两数的大小分成4种关系,分别对应4条指 令
目标地址的寻址范围:段内寻址
段内转移——近转移(near)
在 当 前 代 码 段 64KB 范 围 内 转 移 代
( ±32KB范围)
码 段
不需要更改CS段地址,只要改变IP偏
移地址
段内转移——短转移(short)
代 码

控制转移类指令

控制转移类指令

语音信号及单片机处理
C= 0? N
C= 1? N
Y 跳 转 到 loop1 执 行 下 一 条 指 令
(a) JCC的 执 行 过 程
Y 跳 转 到 loop1 执 行 下 一 条 指 令
(b) JCS的 执 行 过 程
图5.5 指令JCC和JCS的执行过程
第15页
2021年12月12日星期日

例5 用JCC指令。 R1=0x0020 R1+=1 JCC loop1 R1=0x00FF
第12页
2021年12月12日星期日
例4 用JNGE指令。 R1=-2 R2=3 CMP R1,R2 JNGE loop1 R2=0x00FF
//赋初值, 分别为有符号数
//比较R1和R2的大小 //R1小于R2(S=1)时跳转到loop1

loop1: R1=0x0000
第13页
2021年12月12日星期日
loop1: R1=0x0000
//赋初值 //如果C=0跳转到loop1
第16页
2021年12月12日星期日

例6 用JCS指令。 R1=0x0002 R1-=1 JCS loop1 R1=0x00FF
loop1: R1=0x0000
//赋初值 //如果C=1跳转到loop1
第17页
2021年1Байду номын сангаас月12日星期日
3. 其它跳转指令 判C跳转指令JCC 和JCS: JCC loop1 JCS loop1 JCC是以C=0作为判断的标准,决定程序的跳转;JCS 是以 C=1作为判断的标准,决定程序的跳转。 这两条指令的执行过程如图3.5所示。
第14页
2021年12月12日星期日

汇编教程条件转移指令

汇编教程条件转移指令
两数的大小分成4种关系:
⑴ 小于(不大于等于):JL(JNGE) ⑵ 不小于(大于等于):JNL(JGE) ⑶ 小于等于(不大于):JLE(JNG) ⑷ 不小于等于(大于):JNLE(JG )
例:比较有符号数
next:
cmp ax,bx ;比较ax和bx jnl next ;若ax≥bx,转移 xchg ax,bx ;若ax<bx,交换
je next
shlain
...
;AL保存1的个数
另一种做法
again: next:
xor al,al cmp bx,0 jz next shl bx,1 adc al,0 jmp again ...
记录BX中“1”的个数 ;AL=0,CF=0 ;也可使用 shr bx,1 ;AL保存1的个数
例:JO/JNO指令
;计算X-Y; ;X和Y为存放于X单元和Y单元的16位操作数 ;若溢出,则转移到overflow处理
mov ax,X sub ax,Y jo overflow ... ;无溢出,结果正确 overflow: ... ;有溢出处理
例:JP/JNP指令
;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数时 ;则令其最高位为“0”;否则令最高位为“1”
果是否为零(或相等) ⑵JS和JNS:利用符号标志SF,判断结果是
正是负 ⑶JO和JNO:利用溢出标志OF,判断结果是
否产生溢出 ⑷JP/JPE和JNP/JPO:利用奇偶标志PF,判
断结果中“1”的个数是偶是奇 ⑸ JC/JB/JNAE 和 JNC/JNB/JAE : 利 用 进 位
标志CF,判断结果是否进位或借位
相对寻址方式

单片机原理及应用第三章 指令系统(循环、位操作)

单片机原理及应用第三章 指令系统(循环、位操作)

注意:子程序首地址须与该指令后第一字节地址在同一 2KB范围内。
三、调用和返回指令(4条)
2、长调用指令 (3字节)
LCALL addr16
; 先(PC)+3 → PC,断点值
;(SP)+1 → SP
;(PC0~7)→(SP) ;(SP)+1 → SP
压入断点
;(PC8~15)→(SP)
; addr160~15→ PC0~15
AJMP Main END
DJNZ R2, DELAY RET
跳转过程为:
先(PC)+2 → PC,再(PC)+ rel → PC 。
四、位操作指令
4、位条件转移类指令
(2)判位变量转移指令 JB bit,rel ;(bit)=“1”就跳转;否则不跳转。 JNB bit,rel ;(bit)“1”就跳转;否则不跳转。 (3)判位变量并清“0”转移指令 JBC bit,rel ;(bit)=“1”就先将其清零 再跳转;
先(PC)+3 → PC,再将目的操作数与源操作数相比较。 (1)若相等,则顺序执行,且0 →Cy; (2)若不相等,则(PC)+ rel→PC,同时,若目的操作数 > 源操作数,则 0 →Cy; 否则, 1 →Cy。
二、循环转移指令(2条)
它属于条件转移类指令。
1. DJNZ Rn, rel 2. DJNZ direct, rel
或 DJNZ 20H,LOOP。
二、循环转移指令
例1:请编出将RAM内 20H ~ 2FH 中的数据传到 60H ~ 6FH 的程序。
ORG 1000H
Start: MOV R2, #16 ; 16 → R2

单片机跳转语句

单片机跳转语句

单片机跳转语句
单片机跳转语句可以用来实现程序的分支或循环。

常见的单片机跳转语句包括:
1. 无条件跳转语句:JMP label。

该语句会将程序跳转到标记为label的位置。

2.条件跳转语句:
IF condition JMP label。

如果条件condition为真,程序会跳转到标记为label的位置。

常见的条件包括:
- 等于:IF A == B JMP label。

- 不等于:IF A != B JMP label。

- 大于:IF A > B JMP label。

- 小于:IF A < B JMP label。

- 大于等于:IF A >= B JMP label。

- 小于等于:IF A <= B JMP label。

3.循环语句:
LOOP count。

...//循环体。

DEC count。

JNZ label。

该语句表示循环count次,执行循环体中的指令,每次循环count减一,直到count为0跳出循环。

4.无限循环语句:
WHILE1。

...//循环体。

END。

该语句表示无限循环,直到程序被终止为止。

7--控制转移类指令

7--控制转移类指令

例1:
0000H 0002H 0004H 0006H ┇
例2:
EB B0 B3 B1
04 01 02 03
jmp mov mov next:
short next al, 1 bl, 2 mov cl, 3 ┇
0000H B0 0002H B3 0004H B1 0006H EB 0008H B2 ┇
操作: 如果不满足测试条件cc,则该指令不作任何操作。 如果满足测试条件cc,则 (IP)←(IP)+ 8位位移量 其中的8位位移量由机器指令代码提供,其大小由汇编程序按下式计 算得出。 位移量 = 目标地址 - 当前IP值(Jcc指令的下一条指令的地址) 说明: (1)测试条件不同,指令助记符也各不相同,具体见下表所示。
(一)无条件转移指令
(1)段内转移 在同一代码段的范围内进行的转移称为段内转移。此时,CPU只需要修 改IP寄存器的内容。 1)段内直接短转移 格式: JMP SHORT 标号 ;标号表示转移目标地址。 功能: 无条件地转移到由标号所指定的转移目标地址处。 操作: (IP)←(IP)+ 8位位移量 ;8位位移量由汇编程序按照下式计 算得出,并存放在机器指令代码中。 8位位移量 = 转移目标地址 - 当前IP值(JMP指令的下一条指令的地址) 说明: ① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。 ② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
01 02 03 F8 04
next:
mov mov mov jmp mov
al, 1 bl, 2 cl, 3 short next dl, 4 ┇
2)段内直接近转移
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

14课:单片机条件转移指令
作者:佚名来源:本站原创点击数:18867 更新时间:2007年08月15日【字体:大中小】
条件转移指令是指在满足一定条件时进行相对转移。

判A内容是否为0转移指令
JZ rel
JNZ rel
第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)。

转移到什么地方去呢?如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了。

因此这第指令我们能这样理解:JZ 标号。

即转移到标号处。

下面举一例说明:
MOV A,R0
JZ L1
MOV R1,#00H
AJMP L2
L1: MOV R1,#0FFH
L2: SJMP L2
END
在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。

而如果R0中的值不等于0,则次序执行,也就是执行MOV R1,# 00H指令。

最终的执行结果是R1中的值等于0。

第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。

把上面的那个例程中的JZ改成JNZ试试吧,看看程序执行的结果是什么?
比较转移指令
CJNE A,#data,rel
CJNE A,direct,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJN E A,#data,标号。

这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。

但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。

如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。

例:
MOV A,R0
CJNE A,#10H,L1
MOV R1,#0FFH
AJMP L3
L1: JC L2
MOV R1,#0AAH
AJMP L3
L2: MOV R1,#0FFH
L3: SJMP L3
上面的程序中有一条单片机指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。

分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。

如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。

因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。

弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。

CJNE A,10H ;把A中的值和10H中的值比较(注意和上题的区别)
CJNE 10H,#35H ;把10H中的值和35H中的值比较
CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较
循环转移指令
DJNZ Rn,rel
DJNZ direct,rel
第一条指令在前面的例程中有详细的分析,这里就不多谈了。

第二条指令,只是将Rn改成直接地址,其它一样,也不多说了,给一个例程。

DJNZ 10H,LOOP
3.调用与返回指令
(1)主程序与子程序在前面的灯的实验中,我们已用到过了子程序,只是我们并没有明确地介绍。

子程序是干什么用的,为什么要用子程序技术呢?举个例程,我们数据老师布置了10道算术题,经过观察,每一道题中都包含一个(3*5+2)*3的运算,我们能有两种选择,第一种,每做一道题,都把这个算式算一遍,第二种选择,我们能先把这个结果算出来,也就是51,放在一边,然后要用到这个算式时就将51代进去。

这两种办法哪种更好呢?不必多言。

设计程序时也是这样,有时一个功能会在程序的不一样地方反复使用,我们就能把这个功能做成一段程序,每次需要用到这个功能时就“调用”一下。

(2)调用及回过程:主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么回到什么地方呢?是回到调用子程序的下面一条指令继续执行(当然啦,要是还回到这条指令,不又要再调用子程序了吗?那可就没完没了了……)。

参考图1
调用指令
LCALL addr16 ;长调用指令
ACALL addr11 ;短调用指令
上面两条指令都是在主程序中调用子程序,两者有一定的区别,但在开始学习单片机的这些指令时,能不加以区别,而且能用LCALL 标号,ACALL 标号,来理解,即调用子程序。

(5)返回指令则说了,子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就能了,即执行 ret指令
4.空操作指令
nop 就是空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。

相关文档
最新文档