控制转移类指令_第1页
控制转移类指令_第2页
控制转移类指令_第3页
控制转移类指令_第4页
控制转移类指令_第5页
已阅读5页,还剩19页未读 继续免费阅读

VIP免费下载

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

文档简介

3.3.5控制转移类指令1.无条件转移指令(4条)a.相对转移指令(1条)SJMPb.长跳转指令(1条)LJMPc.短跳转指令(1条)AJMPd.间接转移指令(1条)JMP2.子程序调用和返回指令(4条)a.调用指令(2条)ACALLLCALLb.返回指令(2条)RETRETI3.空操作指令(1条)NOP4.条件转移指令(13条)a.判C转移指令(2条)JCJNCb.判bit转移指令(3条)JBJNBJBCc.判A转移指令(2条)JZJNZd.减1非0则转移指令(2条)DJNZ两种形式e.比较不相等则转移指令(4条)CJNE四种形式一.无条件转移指令(4条)

1.长跳转指令LJMP

(3字节)

LJMPaddr16 ;PCaddr16

执行该指令时,将目标语句的16位地址addr16装入PC,程序无条件转向指定的目标语句执行。由于长跳转指令提供的是16位地址,对应64KB的程序存储器地址空间,所以可跳转到64KB程序存储器地址空间的任何地方。实际应用中长跳转汇编指令写作“LJMP目标语句标号”的形式,如“LJMPLOOP”。2.短跳转指令AJMP

(2字节)

AJMPaddr11;PC10~0addr11这是2KB范围内的无条件跳转指令。执行该指令时,将目标语句的低11位地址送入PC的低11位,而PC的高5位保持不变,这样得到跳转的目的地址。实际应用中短跳转汇编指令写作“AJMP目标语句标号”的形式,如“AJMPLOOP”。注意:目标地址与AJMP后面一条指令必须在同一个2KB区域。表3-2所示为ROM空间中32个2KB区间。表3-2ROM空间中的32个2KB区间3.相对转移指令SJMP

(2字节)

SJMPrel ;PCPC+2+rel执行该指令时,先将(PC)+2,再把指令中带符号的偏移量加到PC上,得到跳转的目标地址送入PC。rel为相对偏移量,是有符号8位二进制数(补码形式),取值范围为+127~-128(00H~7FH对应表示0~+127,80H~FFH对应表示-128~-1)。负数表示反向转移,正数表示正向转移。实际应用中SJMP的汇编指令写作“SJMP目标语句标号”的形式,如“SJMPLOOP”。由汇编程序在汇编过程中自动计算偏移地址rel。4.间接转移指令JMP

(1字节)

JMP@A+DPTR;PC(A)+(DPTR)本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。跳转的目标地址不是由标号简单地决定,而是累加器A和数据指针DPTR之和,它可以是64KB存储空间的任何地方。指令对A、DPTR和标志位均无影响。

注意:以上四条指令结果均不影响程序状态字寄存器PSW。

5.LJMP、AJMP、SJMP、JMP四条无条件转移指令的区别:(1)转移范围不一样。LJMP、JMP转移范围是64KB;AJMP转移范围是与当前PC值同一个2KB区间;SJMP转移范围是相对当前PC值的-128B~+127B范围内。(2)指令长短不一样。LJMP是3字节指令;AJMP、SJMP是2字节指令;JMP是1字节指令。(3)指令机器码构成不同。AJMP、LJMP、JMP后跟的是绝对地址,而SJMP后跟的是相对地址。(4)地址特点不同。LJMP、AJMP、SJMP的转移目标地址是固定的,程序执行过程中不变;JMP的转移目标地址随程序的执行是动态变化的。(5)原则上,所有用SJMP或AJMP的地方都可以用LJMP来替代。二.条件转移指令(13条)条件转移指令是指在满足一定条件时进行相对转移,程序跳转到目标地址执行;否则程序继续执行本指令的下一条指令。转移的目标指令首地址必须在以下一条指令的起始地址为中心的256个字节范围之内(-128~+127),否则汇编出错,无法执行。当条件满足时,PC←(PC)+N+rel,其中(PC)为条件转移指令(机器指令)的第一个字节的地址,N为该转移指令的字节数(长度)。条件转移指令根据判断条件可分为:a.判C转移指令(2条)JCJNCb.判bit转移指令(3条)JBJNBJBCc.判A转移指令(2条)JZJNZd.减1非0则转移指令(2条)DJNZ两种形式e.比较不相等则转移指令(4条)CJNE四种形式1.判C转移指令(2条)(1)(CY)=1则转移指令

JCrel

指令功能:若(CY)=1,则PC←(PC)+rel,转移;若(CY)=0,则程序顺序执行。实际应用中JC的汇编指令写作“JC目标语句标号”的形式,如“JCLOOP”。(2)(CY)=0则转移指令

JNCrel

指令功能:若(CY)=0,则PC←(PC)+rel,转移;若(CY)=1,则程序顺序执行。2.判bit转移指令(3条)(1)(bit)=1则转移指令

JBbit,rel

指令功能:若(bit)=1,则PC←(PC)+rel,转移;若(bit)=0,则程序顺序执行。(2)(bit)=0则转移指令

JNBbit,rel

指令功能:若(bit)=0,则PC←(PC)+rel,转移;若(bit)=1,则程序顺序执行。(3)(bit)=1则转移并清0指令

JBCbit,rel

指令功能:若(bit)=1,则bit←0且PC←(PC)+rel,转移;若(bit)=0,则程序顺序执行。3.判A转移指令(2条)(1)(A)=0则转移指令

JZrel

指令功能:若(A)=0,则PC←(PC)+rel,转移;若(A)

0,则程序顺序执行。(2)(A)

0则转移指令

JNZrel

该指令功能:若(A)

0,则PC←(PC)+rel,转移;若(A)=0,则程序顺序执行。4.减1非0则转移指令(2条)(1)Rn减1非0则转移指令DJNZRn,rel

指令功能:Rn←(Rn)-1,若(Rn)

0,则PC←(PC)+rel,转移;若(Rn)=0,则程序顺序执行。(2)direct减1非0则转移指令DJNZdirect,rel指令功能:direct←(direct)-1,若(direc)

0,则PC←(PC)+rel,转移;若(direc)=0,则程序顺序执行。例:将内部RAM中40H~4FH的数依次送到60H~6FH单元中。程序如下:ORG0000HLJMPSTARTORG0030HSTART:MOVR0,#30H;数据源首地址MOVR1,#4FH;数据存放目标首地址MOVR2,#16;数据个数LOOP:MOVA,@R0MOV@R1,AINCR0

DECR1DJNZR2,LOOPSJMP$END5.比较不相等则转移指令(4条)这组指令的功能是:比较前面两个操作数的大小,如果它们的值不相等则转移。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志CY置“1”,否则清“0”,但不影响任何操作数的内容。(1)CJNEA,direct,rel该指令功能:若(A)≥(direct),(CY)=0;若(A)<(direct),CY=1;若(A)≠(direct),则PC←(PC)+rel,转移;若(A)=(direct),则程序顺序执行。(2)CJNEA,#data,rel

该指令功能:若(A)≥data,(CY)=0;若(A)<data,CY=1;若(A)≠data,则PC←(PC)+rel,转移;若(A)=data,则程序顺序执行。(3)CJNERn,#data,rel该指令功能:若(Rn)≥data,(CY)=0;若(Rn)<data,CY=1;若(Rn)≠data,则PC←(PC)+rel,转移;若(Rn)=data,则程序顺序执行。(4)CJNE@Ri,#data,rel该指令功能:若((Ri))≥data,(CY)=0;若((Ri))<data,CY=1;若((Ri))≠data,则PC←(PC)+rel,转移;若((Ri))=data,则程序顺序执行.例:如果(A)≠00H,转移到CX1;如果(R1)≠10H,转移到CX2;如果(A)≠(60H),转移到CX3。程序段如下:CJNEA,#00H,CX1……CJNER1,#10H,CX2……CJNEA,60H,CX3……CX1:…………CX2:…………CX3:……三.调用和返回指令(4条)在程序设计中,通常把具有一定功能的公用程序段编制成子程序,当主程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。有两条调用指令,可以实现子程序的短调用和长调用。目标地址的形成方式与AJMP和LJMP相似。这两条指令的执行不影响任何标志位。1.长调用指令LCALL指令格式:LCALLaddr16

这条指令无条件调用目标地址addr16的子程序。LCALL指令执行步骤如下:①产生当前PC:PC←(PC)+3,(PC)+3是因为该指令为三字节指令。②断点地址低8位保存到堆栈中:SP←(SP)+1,(SP)←(PC0~7)③断点地址高8位保存到堆栈中:SP←(SP)+1,(SP)←(PC8~15)④形成转移目标地址:PC←addr16,转去执行以该地址为入口的程序。LCALL指令可以调用程序存储器64KB范围内任何地方的子程序。指令执行后不影响任何标志。汇编语句写作“LCALL目标子程序标号”的形式,如“LCALLDELAY”(调用DELAY子程序,即起始标号为DELAY的子程序)。2.短调用指令ACALL指令格式:ACALLaddr11ACALL指令执行步骤如下:①产生当前PC:PC←(PC)+2,该指令为双字节指令②断点地址低8位保存到堆栈中:SP←(SP)+1,(SP)←(PC0~7)③断点地址高8位保存到堆栈中:SP←(SP)+1,(SP)←(PC8~15)④形成转移目标地址:PC0~10←addr11,PC11~15不变,转去执行以该地址为入口的程序这是一条2KB范围内的子程序调用指令。所用的子程序的入口地址必须与ACALL下面一条指令的第一个字节在同一个2KB区域的存储器区内,否则汇编出错,程序无法执行。汇编语句写作“ACALL目标子程序标号”的形式,如“ACALLDELAY”(调用DELAY子程序,即起始标号为DELAY的子程序)。3.返回指令(2条)RETRETI

(1)RET ;子程序返回

;PC15~8←(SP),SP←SP-1 ;PC7~0←(SP),SP←SP-1指令功能:从堆栈中弹出了由调用指令压入堆栈保护的断点地址送入PC,从而结束子程序的执行,程序返回到断点处继续执行。

(2)RETI ;中断程序返回

;PC

温馨提示

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

评论

0/150

提交评论