第三章 单片机汇编程序设计-精品·公开课件.ppt

第三章 单片机汇编程序设计-精品·公开课件.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3.4 控制转移指令 共有17条,包括无条件转移指令、条件转移指令、子程序调用及返回指令。 一.无条件转移指令 无条件转移指令是指当执行该指令后,程序将无条件地转移到指令指定的地方去。无条件转移指令包括长转移指令、绝对转移指令、相对转移指令和间接转移指令。 1.长转移指令LJMP 指令格式:LJMP addr16 ;PC ← addr16 指令后面带目的位置的16位地址,执行时直接将该16位地址送给程序指针PC,程序无条件地转到16位目标地址指明的位置去。指令中提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,故得名为“长转移”。该指令不影响标志位,使用方便。缺点是:执行时间长,字节数多。 2.绝对转移指令 指令格式:AJMP addr11 ;PC10~0 ← addr11 AJMP指令后带的是目的位置的低11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,执行后转移到PC指针指向的新位置。 由于11位地址addr11的范围是00000000000~11111111111,即2KB范围,而目的地址的高5位不变,所以程序转移的位置只能是和当前PC位置(AJMP指令地址加2)在同一2KB范围内。转移可以向前也可以向后,指令执行后不影响状态标志位。 【例3-10】若AJMP指令地址为3000H。AJMP后面带的11位地址addr11为123H,则执行指令AJMP addr11后转移的目的位置是多少? AJMP指令的PC值加2=3000H+2=3002H=00110 000 指令中的addr11=123H=001 转移的目的地址为00110 001=3125H 3.相对转移指令 指令格式:SJMP rel ;PC ← PC + 2 + rel SJMP指令后面的操作数rel是8位带符号补码数,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后再将程序指针PC的值与指令中的位移量rel相加得转移的目的地址。即: 转移的目的地址= SJMP指令所在地址+2+rel 因为8位补码的取值范围为-128~+127,所以该指令的转移范围是:相对PC当前值向前128字节,向后127字节。 【例3-11】在2100H单元有SJMP指令,若rel = 5AH(正数),则转移目的地址为215CH(向后转);若rel = F0H(负数),则转移目的地址为20F2H(向前转)。 用汇编语言编程时,指令中的相对地址rel往往用目的位置的标号(符号地址)表示。机器汇编时,能自动算出相对地址值;但手工汇编时,需自己计算相对地址值rel。rel的计算方法如下: rel = 目的地址-(SJMP指令地址+2) 如目的地址等于2013H,SJMP指令的地址为2000H,则相对地址rel为11H。 注意:在单片机程序设计中,通常用到一条SJMP指令: SJMP $ 该指令的功能是在自己本身上循环,进入等待状态。其中符号 $ 表示转移到本身,它的机器码为80 FEH。在程序设计中,程序的最后一条指令通常用它,使程序不再向后执行以避免执行后面的内容而出错。 4.间接转移指令 指令格式:JMP @A+DPTR ;PC ← A + DPTR 它MCS-51系统中唯一一条间接转移指令,转移的目的地址是由数据指针DPTR的内容与累加器A中的内容相加得到,指令执行后不会改变DPTR及A中原来的内容。数据指针DPTR的内容一般为基址,累加器A的内容为相对偏移量,在64 KB范围内无条件转移。 该指令的特点是转移地址可以在程序运行中加以改变。DPTR一般为确定值,根据累加器A的值来实现转移到不同的分支。在使用时往往与一个转移指令表一起来实现多分支转移。 【例3-12】下面的程序能根据累加器A的值0、2、4、6转移到相应的TAB0~TA6分支去执行。 MOV DPTR,#TABLE ;表首地址送DPTR JMP @A+DPTR ;根据A值转移 TABLE:AJMP TAB0 ;当(A)=0时转TAB0执行 AJMP TAB2 ;当(A)=2时转TAB2执行 AJMP TAB4 ;当(A)=4时转TAB4执行 AJMP TAB6 ;

您可能关注的文档

文档评论(0)

秦圈圈 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档