第六章 单片机CPU指令集架构_第1页
第六章 单片机CPU指令集架构_第2页
第六章 单片机CPU指令集架构_第3页
第六章 单片机CPU指令集架构_第4页
第六章 单片机CPU指令集架构_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章单片机CPU指令集架构何宾2023.08本节内容本节介绍控制指令,包括调用指令返回指令无条件跳转指令有条件跳转指令空操作指令控制指令

--调用指令ACALLaddr11(*)

该指令用于无条件调用指定地址的子程序其中addr11为11位的地址该指令将3字节PC递增两次以获得下一条指令的地址,然后将结果的字节0和1入栈(首先是字节0),并将堆栈指针递增两次目的地址由连续连接递增PC的15~11位、操作码的7~5位和指令的第二个字节组成因此,被调用的子程序必须在ACALL之后指令的第一个字节开始的同一个2KB程序存储块内该指令不影响标志位控制指令

--调用指令【例6-47】下面的指令执行子程序调用ACALLSUBRTN执行该条指令之前,堆栈指针SP的内容(SP)=0x07,且该指令的下一条指令地址为0x0123,标号为SUBRTN的子程序在程序存储空间的地址为0x0345在执行完该指令后,堆栈指针的内容(SP)=0x09,片上存储器RAM地址为0x08和0x09的位置保存数据0x23和0x01H。程序计数器PC的内容(PC)=0x0345控制指令

--调用指令

操作机器码字节数时钟数(PC)←(PC)+2(SP)←(SP)+1((SP))←(PC.7:0)(SP)←(SP)+1((SP))←(PC.15:8)(PC.10:0)←页面地址[a10a9a810001][a7a6a5a4a3a2a1a0]23控制指令

--调用指令该扩展调用指令位于指定地址的子程序该指令将程序计数器PC加2/4以生成下一条指令的地址,然后将24位结果入栈(高字节在前),堆栈指针增加3然后,将PC高字的8位和低字的16位分别装入ECALL指令的第2字节、第3字节和第4字节。程序继续执行该地址处的指令。因此,子程序可以在整个16MB存储空间中的任意地址开始。该调用不影响标志位控制指令

--调用指令【例6-48】下面的指令执行子程序调用ECALLSUBRTN在执行该指令之前,堆栈指针SP的内容(SP)=0x07,且该指令的下一条指令的地址为0x012345,标号为SUBRTN的子程序地址为0x123456在执行该指令后,堆栈指针SP的内容(SP)=0x0A。片上数据存储器RAM地址0x08、0x09和0x0A的位置分别保存着0x01、0x23和0x45,程序计数器PC的内容(PC)=0x123456控制指令

--调用指令ECALL@DRk

该指令执行的操作和机器指令格式uuuu为寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2(SP)←(SP)+1((SP))←(PC.23:16)(SP)←(SP)+1((SP))←(PC.15:8)(SP)←(SP)+1((SP))←(PC.7:0)(PC)←((DRk))[10011001][uuuu1000]23控制指令

--调用指令ECALLaddr24

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+4(SP)←(SP)+1((SP))←(PC.23:16)(SP)←(SP)+1((SP))←(PC.15:8)(SP)←(SP)+1((SP))←(PC.7:0)(PC)←(addr.23:0)[10011010][addr23~addr16][addr15~addr8][addr7~addr0]43控制指令

--调用指令长调用LCALL该指令长调用位于指定地址的子程序该指令将程序计数器加2或3(具体与指令长度有关)以生成下一条指令的地址,然后将16位结果入栈(低字节在前)堆栈指针递增2PC的高字节和低字节分别加载LCALL指令的第2字节和第3字节程序继续执行该地址处的指令子程序可以于下一条指令所在的64KB内存区域内起始控制指令

--调用指令【例6-49】下面的指令执行子程序调用LCALLSUBRTN在执行该指令前,堆栈指针SP的内容(SP)=0x07,标号SUBRTN的子程序所在的程序地址为0x1234,该指令的下一条指令的地址为0x123(即PC=0x123)在执行完该指令后,堆栈指针SP的内容为(SP)=0x09。片上数据RAM地址为0x08和0x09的位置分别保存着0x01和0x23,程序计数器PC的内容(PC)=0x1234控制指令

--调用指令LCALL@WRj

该指令执行的操作和机器指令格式tttt为寄存器WRj编号j/2后对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2(SP)←(SP)+1((SP))←(PC.7:0)(SP)←(SP)+1((SP))←(PC.15:8)(PC)←((WRj))[10011001][tttt0100]23控制指令

--调用指令LCALLaddr16(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+3(SP)←(SP)+1((SP))←(PC.7:0)(SP)←(SP)+1((SP))←(PC.15:8)(PC)←((WRj))[00010010][地址高字节][地址高字节]33控制指令

--返回指令RET(*)

该指令从子程序中返回当从子程序返回时,从堆栈中依次弹出PC的高字节和低字节,且堆栈指针SP减2。程序在恢复的PC地址处继续执行,该地址通常是紧跟在ACALL或LCALL之后的指令该指令不影响标志位控制指令

--返回指令【例6-50】下面的指令执行从子程序返回RET在执行该指令之前,堆栈指针SP的内容(SP)=0x0B,片上数据RAM地址为0x0A和0x0B的位置分别保存着0x01和0x23在执行该指令后,堆栈指针SP的内容(SP)=0x09。程序计数器PC的内容(PC)=0x0123控制指令

--返回指令RET指令执行的操作和机器指令格式操作机器码字节数时钟数(PC).15:8←((SP))(SP)←(SP)–1(PC).7:0←((SP))(SP)←(SP)–1[00100010]13控制指令

--返回指令ERET(*)

该指令实现扩展的返回当返回时,依次从堆栈中弹出3字节PC的字节2、字节1和字节0,并将堆栈指针减3。程序在恢复的程序计数器指向的地址处继续执行,通常是紧跟ECALL之后的指令该指令不影响标志位控制指令

--返回指令【例6-51】下面的指令执行从子程序返回ERET在执行该指令之前,堆栈指针SP的内容(SP)=0x0B。片上数据RAM地址为0x08、0x09和0x0A的位置分别保存着0x01、0x23和0x49执行该指令后,堆栈指针SP的内容(SP)=0x08,程序计数器PC的内容(PC)=0x012349控制指令

--返回指令ERET指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5。操作机器码字节数时钟数(PC.23:16)←((SP))(SP)←(SP)–1(PC.15:8)←((SP))(SP)←(SP)–1(PC.7:0)←((SP))(SP)←(SP)–1[10101010]23控制指令

--返回指令RETI(*)

该指令从中断返回。当返回时,该指令从堆栈中弹出两个或四个字节,具体取决于CONFIG1寄存器中的INTR位如果INTR=“0”,RETI将PC的高字节和低字节依次从堆栈中弹出,并作为FF:区域的16位返回地址。堆栈指针减2。其他寄存器不受影响,PSW和PSW1都不会自动恢复到中断前的状态如果INTR=“1”,RETI从堆栈中弹出四个字节:PSW1和PC的三个字节。PC的三个字节是返回地址,它可以是16MB内存空间中的任意位置。堆栈指针减四。PSW1恢复到中断前状态,但PSW没有恢复到中断前状态。其他寄存器不受影响控制指令

--返回指令对于INTR的任意值,硬件都会恢复中断逻辑以接受与刚刚处理的中断具有相同优先级的其他中断。程序在返回地址继续执行,该地址通常是检测到中断请求点之后的指令。如果在执行RETI指令时有相同或更低优先级的中断未处理,则在处理未处理中断之前执行该条指令RETI指令执行的操作和机器指令格式控制指令

--返回指令RETI指令执行的操作和机器指令格式操作机器码字节数时钟数INTR=0:(PC).15:8←((SP))(SP)←(SP)–1(PC).7:0←((SP))(SP)←(SP)–1INTR=1:(PC).15:8←((SP))(SP)←(SP)–1(PC).7:0←((SP))(SP)←(SP)–1(PC).23:16←((SP))(SP)←(SP)–1PSW1←((SP))(SP)←(SP)–1[00110010]13控制指令

--返回指令【例6-52】下面的指令执行从中断返回RETI在执行该指令之前,INTR=“0”。堆栈指针SP的内容(SP)=0x0B。在地址0x0122结束的指令期间检测到中断。片上RAM地址0x0A和0x0B的位置分别保存着0x01和0x23执行该指令后,堆栈指针SP的内容(SP)=0x09,程序计数器PC的内容(PC)=0x0123控制指令

--无条件跳转指令AJMPaddr11(*)

该指令实现绝对跳转具体来说,将程序执行转移到指定地址,该地址是在运行时通过连接PC的高5位(在PC递增两次之后)、11位地址addr11由操作码第7位~第5位和指令的第二个字节构成目标地址必须与AJMP之后指令的第一个字节位于程序存储器的同一个2KB“页面”内控制指令

--无条件跳转指令【例6-53】下面的指令执行无条件跳转AJMPJMPADR在执行该指令前,标号JMPADR所在的程序存储空间的地址为0x0123,AJMP这条指令在程序存储空间的地址为0x0345当执行该指令后,程序计数器PC的内容(PC)=0x0123注:AJMP指令的绝对调用必须使用绝对地址,或地址使用的标号或符号控制指令

--无条件跳转指令该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC.10:0)←页面地址[a10a9a800001][a7a6a5a4a3a2a1a0]23控制指令

--无条件跳转指令绝对跳转EJMP

该指令实现扩展跳转具体来说,通过将指令的第2字节、第3和第4个字节加载到PC的8位高字节和16位低字节,进行无条件跳转到指定地址目标地址可以在整个16MB内存空间中的任意位置该指令不影响标志位控制指令

--无条件跳转指令【例6-54】下面的指令执行绝对跳转EJMPJMPADR在该指令中,标号JMPADR处于程序存储器地址为0x123456H的位置注:绝对调用必须使用绝对地址,或地址使用的标号或符号控制指令

--无条件跳转指令EJMPaddr24

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(addr.23:0)[10001010][addr23~addr16][addr15~addr8][addr7~addr0]43控制指令

--无条件跳转指令EJMP@DRk

该指令执行的操作和机器指令格式uuuu为寄存器DRk编号k/4后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←((DRk))[10001001][uuuu1000]23控制指令

--无条件跳转指令长跳转LJMP

该指令执行长跳转具体来说,通过将指令的第2和第3个字节分别加载到PC高位和低位字节,进行无条件跳转到指定地址目标可以在整个64KB的程序存储器的任意地址不影响标志位控制指令

--无条件跳转指令【例6-55】下面的指令执行长跳转 LJMPJMPADR执行该指令前,标号JMPADR分配于程序代码空间地址为0x1234的位置,该条指令所在的程序代码空间的地址为0x0123在执行完指令后,程序计数器PC的内容(PC)=0x1234控制指令

--无条件跳转指令LJMP@WRj该指令执行的操作和机器指令格式tttt为寄存器WRj编号j/2后所对应的二进制数在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←((WRj))[10001001][tttt0100]23控制指令

--无条件跳转指令LJMPaddr16(*)

该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(addr.15:0)[00010010][地址高字节][地址高字节]33控制指令

--无条件跳转指令短跳转SJMPrel

该指令实现短跳转,控制程序无条件地跳转到指定地址具体来说,将PC递增两次后,PC加上指令第二个字节中的所有符号和相对偏移来计算跳转目标地址因此允许目标地范围是从该指令的前128个字节到它之后127个字节之间。不影响标志位该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+2(PC)←(PC)+rel[10000000][相对地址]23控制指令

--无条件跳转指令间接跳转JMP@A+DPTR(*)

该指令实现间接跳转具体来说,将累加器A的8位无符号内容与16位数据指针相加,并将结果的和加载到程序计数器PC的低16位中。这是后续指令取指的地址累加器A的内容和数据指针不受影响不影响标志位该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC.15:0)←(A)+(DPTR)[01110011]14控制指令

--无条件跳转指令【例6-56】下面的指令执行间接跳转累加器存放从0到6的偶数。以下指令序列跳转到从JMP_TBL开始的跳转表中的四个AJMP指令之一:MOVDPTR,#JMP_TBLJMP @A+DPTR JMP_TBL:AJMPLABEL0AJMPLABEL1AJMPLABEL2 LABEL3如果累加器在该序列开始时存放04H,则执行跳转到LABEL2注:AJMP是一个两字节指令,因此跳转指令每隔一个地址开始条件跳转指令

--进位标志CY控制的跳转指令JCrel(*)

如果设置进位标志CY,则跳转具体来说,如果置位了进位标志CY,则跳转到指定的地址;否则,继续执行下一条指令在将PC递增两次之后,通过将第二个指令字节中的有符号相对偏移加到PC来计算跳转的目标地址该指令不改变标志位该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+2如果(CY)=1,则(PC)←(PC)+rel[01000000][相对地址]21/3条件跳转指令

--进位标志CY控制的跳转指令【例6-57】下面的指令执行进位标志控制的跳转指令JCLABEL1 CPLCY JCLABEL2在执行该指令之前,清除进位标志CY当执行该指令后,设置进位标志CY,且程序将从标号为LABEL2处继续执行条件跳转指令

--进位标志CY控制的跳转指令JNCrel(*)

如果未设置CY标志位,则跳转具体来说,如果清除进位标志CY,则跳转到指定的地址;否则,继续下一条指令在将PC递增两次指向下一条指令之后,通过将第二个指令字节中的有符号相对偏移加到PC来计算目标地址该指令不影响标志位该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+2如果(CY)=0,则(PC)←(PC)+rel[01010000][相对地址]21/3条件跳转指令

--进位标志CY控制的跳转指令【例6-58】下面的指令执行进位标志控制的跳转指令JNCLABEL1 CPLCYJNCLABEL2在执行该指令之前,设置进位标志CY执行完该指令后,清除进位标志CY,且程序从LABEL2开始执行条件跳转指令

--设置指定位的跳转指令

如果设置了指定位,则跳转具体来说,如果设置了指定位,则跳转到指定的地址;否则,继续执行下一条指令在将指令递增到下一条指令的第一个字节之后,通过将指令字节中的有符号相对偏移加到PC来计算跳转的目标地址该指令不改变标志位和测试位条件跳转指令

--设置指定位的跳转指令【例6-59】下面的指令根据指定位进行跳转JBP1.2,LABEL1 JBACC.2,LABEL2在执行该指令之前,输入端口1的内容(P1)=“11001010”,累加器A的内容(A)=“01010110”在执行完该指令后,程序将跳转到LABEL2执行条件跳转指令

--设置指定位的跳转指令JBbit51,rel(*)该指令执行的操作和机器指令格式指令中的bit51为位地址操作机器码字节数时钟数(PC)←(PC)+3如果(bit51)=1,则(PC)←(PC)+rel[00100000][位地址][相对地址]31/3条件跳转指令

--设置指定位的跳转指令JBbit,rel该指令执行的操作和机器指令格式yyy为直接地址中指定的位偏移在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+4如果(bit)=1,则(PC)←(PC)+rel[10101001][00100yyy][直接地址][相对地址]41/3条件跳转指令

--清除指定位的跳转指令如果清除指定位,则跳转具体来说,如果清除了指定位,则跳转到指定的地址;否则,继续执行下一条指令在将指令递增到下一条指令的第一个字节之后,通过将指令字节中的有符号相对偏移加到PC来计算跳转的目标地址不改变标志位和测试位条件跳转指令

--清除指定位的跳转指令【例6-60】下面的指令根据指定位进行跳转JNBP1.3,LABEL1JNBACC.3,LABEL2在执行该指令前,输入端口1的内容(P1)=”11001010”,累加器A的内容(A)=“01010110”在执行完该指令后,程序从LABEL2开始执行条件跳转指令

--清除指定位的跳转指令JNBbit51,rel(*)

该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+3如果(bit51)=0,则(PC)←(PC)+rel[00110000][位地址][相对地址]31/3条件跳转指令

--清除指定位的跳转指令JNBbit,rel

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+4如果(bit)=0,则(PC)←(PC)+rel[10101001][00110yyy][直接地址][相对地址]41/3条件跳转指令

--指定位置位跳转后清零指定位置位则跳转,并且在跳转后清除指定位具体来说,如果指定位为“1”,则跳转到指定地址;否则继续下一条指令。如果该位为“0”,则不会清除该位在将PC递增到下一条指令的第一个字节之后,通过将指令字节中的有符号相对偏移加到PC来计算目标地址条件跳转指令

--指定位置位跳转后清零【例6-61】下面的指令根据指定位进行跳转并且清除指定位JBCACC.3,LABEL1JBCACC.2,LABEL2执行该指令前,累加器A的内容(A)=“01010110”在执行完当前指令后,累加器A的内容(A)=“01010010”,程序继续从标号为LABEL2的位置执行条件跳转指令

--指定位置位跳转后清零JBCbit51,rel(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+3如果(bit51)=1,则(bit51)=0,且(PC)←(PC)+rel[00010000][位地址][相对地址]31/3条件跳转指令

--指定位置位跳转后清零JBCbit,rel该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+4如果(bit)=1,则(bit)=0,且(PC)←(PC)+rel[10101001][00010yyy][直接地址][相对地址]41/3条件跳转指令

--有关累加器的跳转指令JZrel(*)

当累加器A内容为零时,则跳转具体来说,如果累加器A的所有位均为零,则跳转到指定的地址;否则,继续执行下一条指令。PC递增2次,PC加上指令的第二个字节中的所有符号相对位移来计算跳转地址该指令不修改累加器的内容,且不影响标志位该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+2如果(A)=0,则(PC)←(PC)+rel[01100000][相对地址]21/3条件跳转指令

--有关累加器的跳转指令【例6-62】下面的指令根据累加器A的内容执行跳转JZLABEL1DECAJZLABEL2当执行该指令前,累加器A的内容(A)=0x01在执行该指令后,累加器A的内容(A)=0x01,且继续从标号为LABEL2的位置执行程序条件跳转指令

--有关累加器的跳转指令JNZrel(*)

当累加器A的内容不等于零时,则跳转具体来说,如果累加器A的某位不等于零,则跳转到指定的地址;否则,继续执行下一条指令。PC递增2次,PC加上指令的第二个字节中的所有符号相对位移来计算跳转地址该指令不修改累加器的内容,且不影响标志位该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+2如果(A)≠0,则(PC)←(PC)+rel[01110000][相对地址]21/3条件跳转指令

--有关累加器的跳转指令【例6-63】下面的指令根据累加器A的内容执行跳转JNZLABEL1 INCA JNZLABEL2当执行该指令前,累加器A的内容(A)=0x00在执行该指令后,累加器A的内容(A)=0x01,且继续从标号为LABEL2的位置执行程序条件跳转指令

--由Z标志位控制的跳转指令JErel

若相等,则跳转具体来说,如果设置了标志位Z,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果(Z)=1,则(PC)←(PC)+rel[01101000][相对地址]21/3条件跳转指令

--由Z标志位控制的跳转指令【例6-64】下面的指令根据标志位Z执行跳转JELABEL1在执行该指令前,Z标志的内容(Z)=“1”在执行该指令后,程序将从LABEL1继续执行条件跳转指令

--由Z标志位控制的跳转指令JNErel

若不相等,则跳转具体来说,如果清零了标志位Z,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果(Z)=0,则(PC)←(PC)+rel[01111000][相对地址]21/3条件跳转指令

--由Z标志位控制的跳转指令【例6-65】下面的指令根据标志位Z执行跳转JNELABEL1在执行该指令前,Z标志的内容(Z)=“0”在执行该指令后,程序将从LABEL1继续执行条件跳转指令

--由Z和CY标志位控制的跳转指令JGrel如果大于,则跳转具体来说,如果同时清除了标志位Z和CY,则跳转到指定的地址;否则继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果(Z)=0且(CY)=0,则(PC)←(PC)+rel[00111000][相对地址]21/3条件跳转指令

--由Z和CY标志位控制的跳转指令【例6-66】下面的指令根据标志位Z和CY执行跳转 JGLABEL1在执行该指令前,同时清除了标志Z和CY,程序将从LABEL1处继续执行。条件跳转指令

--由Z和CY标志位控制的跳转指令JLErel

如果小于或等于,则跳转具体来说,如果设置了标志位Z或CY,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果(Z)=1或(CY)=1,则(PC)←(PC)+rel[00101000][相对地址]21/3条件跳转指令

--由Z和CY标志位控制的跳转指令【例6-67】下面的指令根据标志位Z和CY执行跳转JLELABEL1在执行该指令前,如果设置了标志Z或CY,程序将从LABEL1处继续执行条件跳转指令

--由标志N和OV控制的跳转指令JSLrel

如果小于,则跳转(带符号)具体来说,如果标志位N和OV不同,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果(N)≠(OV),则(PC)←(PC)+rel[01001000][相对地址]21/3条件跳转指令

--由标志N和OV控制的跳转指令【例6-68】下面的指令根据标志位N和OV执行跳转

JSLLABEL1当执行该指令时,如果标志位N和OV不同,程序将从LABEL1处继续执行条件跳转指令

--由标志N和OV控制的跳转指令JSGErel

如果大于等于,则跳转(带符号)具体来说,如果标志位N和OV具有相同的值,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果[(N)=(OV)],则(PC)←(PC)+rel[01011000][相对地址]21/3条件跳转指令

--由标志N和OV控制的跳转指令【例6-69】下面的指令根据标志位N和OV执行跳转JSGLABEL1在执行该指令时,如果N标志位和OV标志位具有相同的值,程序将从LABEL1处继续执行条件跳转指令

--标志位N、OV和CY控制的跳转指令JSLErel

如果小于等于,则跳转(带符号)具体来说,如果设置了标志位Z或者标志位N和OV不同,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5。操作机器码字节数时钟数(PC)←(PC)+2如果{(Z)=1或[(N)≠(OV)]},则(PC)←(PC)+rel[00001000][相对地址]21/3条件跳转指令

--标志位N、OV和CY控制的跳转指令【例6-70】下面的指令根据标志位Z、N和OV执行跳转JSLELABEL1当执行该指令时,如果设置标志位Z或N和OV标志位不同时,程序将从LABEL1处继续执行条件跳转指令

--标志位N、OV和CY控制的跳转指令JSGrel

如果大于,则跳转(有符号)具体来说,如果清除了标志位Z且标志位N和OV具有相同的值,则跳转到指定的地址;否则,继续执行下一条指令。在将PC递增两次之后,通过将第二个指令字节中的有符号相对位移加到PC来计算目标地址

该指令执行的操作和机器指令格式在二进制模式下,需要在机器码前面添加前缀0xA5操作机器码字节数时钟数(PC)←(PC)+2如果[(Z)=0且(N)=(OV)],则(PC)←(PC)+rel[00011000][相对地址]21/3条件跳转指令

--比较跳转指令CJNE<dest>,<src>,rel比较,如果不相等,则跳转具体来说,比较前两个操作数的大小,如果它们的值不相等,则分支在将PC递增到下一条指令的开头之后,通过将指令最后一个字节中的有符号相对偏移加到PC来计算目标地址如果<dest-byte>的无符号整数值小于<src-byte>的无符号整数值,则设置CY标志位,且不影响两个操作数条件跳转指令

--比较跳转指令CJNE<dest>,<src>,rel前两个操作数允许四种寻址模式组合累加器可以与任意直接寻址的字节或立即数数据进行比较,任意通过间接寻址的RAM空间或工作寄存器都可以与立即数进行比较CNJE指令影响CY标志,N标志和Z标志条件跳转指令

--比较跳转指令CJNE<dest>,<src>,rel【例6-72】下面的指令执行比较跳转CJNE R7,#60H,NOT_EQ; ……;R7=60HNOT_EQ:JC REQ_LOW;如果R7<60H; … … ;R7>60H在执行该指令之前,累加器A的内容(A)=0x34,寄存器R7的内容(R7)=0x56则执行该指令后,设置标志位CY且程序在标号NOT_EQ处继续执行。通过测试CY标志,该指令确定寄存器R7的内容是大于还是小于0x60条件跳转指令

--比较跳转指令如果提供给端口P1的数据也是0x34,则执行下面的指令WAIT:CJNE A,P1,WAIT清除标志位CY且继续执行序列中的下一条指令。因为累加器A的内容确实等于从P1读取的数据。(如果在P1上输入了其他值,程序会在此时循环,直到P1数据变为0x34)条件跳转指令

--比较跳转指令CJNEA,dir8,rel(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+3如果(A)≠dir8,则(PC)←(PC)+相对偏移如果(A)<dir8,则(CY)=1否则,(CY)=0[10110101][直接地址][相对地址]32/3条件跳转指令

--比较跳转指令CJNEA,#data,rel(*)该指令执行的操作和机器指令格式操作机器码字节数时钟数(PC)←(PC)+3如果(A)≠#data,则(PC)←(PC)+相对偏移如果(A)<#data,则(CY)=1否则,(CY)=0[10110101][立即数][相对地址

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论