- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.4.2 分支程序 分支结构可以分成单分支、双分支和多分支几种情况 : 一、单分支程序 设在外部RAM的3个连续存储单元ST1、ST2和ST3中,ST1和ST2存放着两个不带符号的二进制数,请找出其中的大数并存入ST3单元中。实现程序如下: START:CLR C ;进位位清0 MOV DPTR,#ST1 ;设置数据指针 MOVX A,@DPTR ;取第一个数 MOV R7,A ;暂存R7 INC DPTR ;数据指针加1 MOVX A,@DPTR ;取第二个数 SUBB A,R7 ;比较两数的大小 JNC BIG1 ;第二个数大转移 XCH A,R7 ;第一个数大送A BIG0:INC DPTR ;数据指针加1 MOVX @DPTR,A ;存大数 RET BIG1:MOVX A,@DPTR ;第二个数送A SJMP BIG0 二、双分支程序 例 设变量 x 以补码的形式存放在片内RAM的30H单元,变量 y 与 x 的关系是:当 x 大于0时,y =x;当 x =0时,y =20H;当 x 小于0时,y =x+5。编制程序,根据 x 的大小求y并送回原单元。程序段如下: START:MOV A,30H JZ NEXT ANL A,#80H ;判断符号位 JZ LP MOV A,#05H ADD A,30H MOV 30H,A SJMP LP NEXT:MOV 30H,#20H LP:SJMP $ 三 多分支选择结构 当程序的判别部分有两个以上的出口流向时,称为多分支结构。 多分支结构通常有两种形式,参见图4–3。 分支结构程序允许嵌套.即一个程序的分支又由另一个分支程序所组成,从而形成多级分支程序结构。汇编语言本身并不限制这种嵌套的层次数,但过多的嵌套层次将使程序的结构变得复杂和臃肿,以致造成逻辑上的混乱,应尽力避免。 80C51设有两条多分支选择指令: 散转指令 JMP @A+DPTR 散转指令由数据指针DPTR决定多分支转移程序的首地址,由累加器A中内容动态地选择对应的分支程序。因此,可从多达256个分支中选一。 比较指令 CJNE A,direct,rel(共有4条)。 比较两个数的大小,必然存在大于、等于、小于三种情况,这时就需从三个分支中选一。 另外,还可以使用查地址表的办法、查转移指令表的办法或通过堆栈来实现多分支程序转移。 三、多分支程序 例 根据R7的内容转向相应的处理程序。 设R7的内容为0~N,对应的处理程序的入口地址分别为PP0~PPN。程序段如下: START:MOV DPTR,#TAB ;置分支入口地址表首址 MOV A,R7 ;分支转移序号送A ADD A,R7 ;分支转移序号乘以2 ; MOV R3,A ;暂存于R3 ; MOVC A,@A+DPTR ;取高位地址 ; PUSH ACC ; MOV A, R3 ; INC A ; MOVC A,@A+DPTR ;取低位地址 ; PUSH A ; RET JMP @A+DPTR TAB: DW PP0 DW PP1 … … … DW PPN 4.4.3 循环程序 按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构
文档评论(0)