C控制转移类指令及位操作指令实用.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C控制转移类指令及位操作指令实用.pptx》由会员分享,可在线阅读,更多相关《C控制转移类指令及位操作指令实用.pptx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、条件转移指令仅仅在满足指令中规定的条件(如累加器内容是否为零,两个操作数是否相等)时才执行无条件转移,否则程序顺序执行。6条指令可分为累加器判零转移指令、数值比较转移指令和减1条件转移指令。条件转移指令第1页/共45页累加器判零转移指令JZrel;若(A)=0,则(PC)=(PC+2)+rel;若(A)0,则(PC)=(PC)+2JNZrel;若(A)0,则(PC)=(PC+2)+rel;若(A)=0,则(PC)=(PC)+2满足各自条件时,程序转向指定的目标地址执行(相当于执行SJMPrel)。当不满足各自条件时,程序顺序往下执行。偏移量rel是用补码形式表示的带符号的8位数,因此程序转移的
2、目标地址为指令前128B或指令后127B。这些指令执行后不影响任何操作数和标志位。第2页/共45页数值比较转移指令 CJNEA,direct,relCJNEA,data,relCJNERn,data,relCJNERi,data,rel其指令格式为:CJNE(操作数1),(操作数2),rel数值比较转移指令是三字节指令,是80C51单片微机指令系统中仅有的四条三个操作数的指令,在程序设计中非常有用。同时具有比较转移和数值大小比较的功能。第3页/共45页这组指令的功能是对指定的两操作数进行比较,即(操作数1)(操作数2),但比较结果均不改变两个操作数的值,仅影响标志位CY。若不等,程序转移到(P
3、C)十3加上第三字节带符号的8位偏移量(rel)所指向的目标地址;若(操作数1)(操作数2),清进位标志(CY)。若(操作数1)(操作数2),则置位进位标志(CY)。值相等,程序继续执行。程序转移的范围是从(PC)3为起始的127一128B的单元地址。比如CJNERn,#data,rel指令第4页/共45页例:温度控制程序 某温度控制系统,A中存温度采样值Ta,(20H)=温度下限值T20,(30H)=温度上限值T30。若TaT30,程序转降温JW,若TaT20,程序转升温SW,若T30TaT20程序转FH返回主程序。CJNEA,30H,LOOPAJMPFH;等于T30,转FHLOOP:JNC
4、JW;大于T30,降温CJNEA,20H,LOOP1AJMPFH;等于T20,转FHLOOP1:JCSW;小于T20,升温FH:-;保温JW:-;降温SW:-;升温第5页/共45页DJNZRn,relDJNZdirect,rel指令功能是:每执行一次本指令,先将指定的Rn或direct的内容减1,再判别其内容是否为0。若不为0,转向目标地址,继续执行循环程序;若为0,则结束循环程序段,程序往下执行。减1 1条件转移指令第6页/共45页例:某应用系统外扩了8K字节RAM,要求把内部RAM的20H2FH单元内容发送到外部RAM的800H80FH单元中。执行指令:MOVDPTR,#800HMOVR0
5、,#20HMOVR7,#10HAGAIN:MOVA,R0MOVXDPTR,AINCR0INCDPTRDJNZR7,AGAIN?:请将以上循环控制改用CJNE指令来实现?:请将以上循环控制改用JZ指令来实现第7页/共45页请看KeilC下演示实例,程序段如下:ORG 0000HLJMP MAINORG 0030HMAIN:MOV A,#01HJZ Lable1DEC AJZ Lable2NOPLable1:NOPLable2:MOV B,#0FFHEND第8页/共45页指令SJMPrelAJMPaddr11LJMPaddrl6JMPADPTR 这类指令的功能是程序无条件地转移到各自指定的目标地址
6、去执行,不同的指令形成的目标地址不同。无条件转移指令第9页/共45页1.长转移指令LJMP addr16该指令提供16位地址,目标地址由指令第二字节(高8位地址)和第三字节(低8位地址)组成。因此,程序转向的目标地址可以包含程序存储器的整个64KB空间。例:设(PC)0123H,标号ADR所指单元地址为3456H。执行指令 LJMPADR执行结果为(PC)3456H程序转向3456H单元执行。第10页/共45页绝对转移指令AJMP addr11该指令提供11位地址,目标地址由指令提供的11位地址去取代当前PC的低11位,形成新的PC值,即为本绝对转移地址。因此,程序的目标地址必须包含AJMP指
7、令后第一条指令的第一个字节(即当前PC地址)在内的2KB范围内(即高5位地址必须相同)。第11页/共45页例:设(PC)0456H,标号ADR所指的单元为0123H。执行指令 AJMPADR执行结果程序转向为(PC)0123H。例:0000H2111AJMP0111H;转移有效07FEH8110AJMP0C10H;当前PC值为0800H;转移有效0100HAJMP0B11H;转移无效第12页/共45页3短转移指令:SJMPrel其目标地址是由当前PC(程序计数器)值和指令的第二字节提供的8位带符号的相对地址相加而成的。指令可转向指令前128B或指令后127B。rel为8位带符号数。(PC)=(
8、PC)+2+rel第13页/共45页例:2100H80FEHERE:SJMPHERErel:2100H2102H=FFFEH。高8 8位是FFH,表示负跳,偏移量为FEH(2)。这是一条原地踏步指令。可用作程序结束或中断等待。当相对地址为FEH(-02)FEH(-02)时,SJMPSJMP指令实现原地转圈的运行状态。第14页/共45页间接转移指令JMPA+DPTR其目标地址是将累加器A中的8位无符号数与数据指针DPTR的内容相加而得(在程序运行时动态决定)。相加运算不影响累加器A和数据指针DPTR的原内容。若相加的结果大于64KB,则从程序存储器的零地址往下延续。当DPTR的值固定,而给A赋以
9、不同的值,即可实现程序的多分支转移。如实现键盘译码散转功能。第15页/共45页例:设(A)5,(DPTR)4567H。执行指令为JMPADPTR执行结果为:(PC)(A)(DPTR)05H4567H456CH程序转向456CH单元执行。第16页/共45页绝对调用指令ACALLaddr11无条件地调用首址为addr11处的子程序。操作不影响标志位。断点地址自动压栈:把PC加2以获得下一条指令的地址(当前PC),将这16位的地址压进堆栈(先PCL,后PCH),同时栈指针加2。然后将指令提供的11位目标地址,送入PC10PC0,而PC15PC11的值不变,程序转向子程序的首地址开始执行。目标地址由指
10、令第一字节的高三位和指令第二字节所组成;所调用的子程序的首地址必须与ACALL后面指令的第一个字节在同一个2KB区域内。3.5.4 子程序调用指令子程序调用与返回指令组第17页/共45页例:设(SP)60H,(PC)0123H,子 程 序SUBRTN的首地址为0456H。执行指令为ACALLSUBRTN执行结果为(PC)20123H20125H(PC),将(PC)=0125H压入堆栈:25H压入(SP)161H,01H压入(SP)十l62H,此时(SP)62H。addr11PC100,PC=0456H第18页/共45页长调用指令LCALLaddr16无条件地调用首址为addr16处的子程序。操
11、作不影响标志位。断点地址自动压栈:把PC加3以获得下一条指令的地址,将这16位的地址压进堆栈(先PCL,后PCH),同时栈指针加2。将指令第2和第3字节所提供的16位目标地址,送PC15PC0,程序转向子程序的首地址开始执行。所调用的子程序的首地址可以在64KB范围内。第19页/共45页例:设(SP)60H,(PC)0123H,子程序SUBRTN的首地址为3456H。执行指令为LCALLSUBRTN第20页/共45页例:设(SP)62H,RAM中的(62H)0lH,(61H)26H。子程序SUBRTN的首地址为3456H。执行指令:LCALLSUBRTN执行结果:(PC)30123H30126
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制 转移 指令 操作 实用
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内