第5章MCS51语言设计.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 这就是所谓的“冒泡法”。 4个数排序最多经过 3 次外循环就可排出,每次外循环都包含3次内循环。实际上大多情况不用 3 次外循环就可排完。 对于20个数排序也是如此,用不到19次循环,排序就结束。为了提高排序速度,程序中可设一交换标志位,如10H位, 每次循环中:若有交换则 SETB 10H 若无交换则 CLR 10H 每次循环结束时,测10H位,判断排序是否结束。 * ORG 0030H First DATA 20H Secend DATA 21H MOV B,#20 MOV SP,#50H L0: MOV R0,#30H CLR F0 DEC B ; 长度计数 push B LOOP: MOV A,@R0 ; 内循环的入口 MOV First,A ; 暂存,为交换作准备 INC R0 MOV Secend, @R0 CJNE A, Secend,Next ; 若 first ≠ second转移 Next: JNC NEXT1 ; first≥second转移,否则,交换 MOV @R0,First DEC R0 ; 使R0退格指向小地址first MOV @R0,Second INC R0 ; 恢复R0指向大地址second SETB F0 ; 置交换标志 NEXT1: DJNZ B,LOOP ; 内循环是否结束的判断 POP B JB F0,L0 ; 判断标志位为1否?外循环 sjmp $ ; 结束的判断 END * 子程序是构成单片机应用程序必不可少的部分,通过ACALL和LCALL两条子程序调用指令,可以十分方便地用来调用任何地址处的子程序。 子程序节省占用的存储单元,使程序简短、清晰,善于灵活的使用子程序,是程序设计的重要技巧之一。 子程序必须以RET指令结尾. 在设计、调用子程序时,有以下几点应注意: 当一段程序需多次应用,或为多人应用时,这段程序编为子程序。 * 子程序名;子程序功能;入口参数;出口参数; 占用资源;现场的保护与恢复。 子程序名: 现场保护 --- ---- --- 现场恢复 子程序返回ret Lcall 子程序名 保护现场: 如果在调用前,主程序已经使用了某些存储单元或寄存器,在调用时,这些寄存器和存储单元又有其他用途,就应先把这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使主、子程序使用不同的寄存器组。 * 子程序名;子程序功能;入口参数;出口参数; 现场的保护与恢复;占用资源。 子程序名: 现场保护 --- ---- --- 现场恢复 子程序返回ret Lcall 子程序名 入口参数和出口参数: 用之前主程序要按子程序的要求设置好地址单元或存储器(称为入口参数),以便子程序从指定的地址单元或存储器获得输入数据; 子程序经运算或处理后的结果存放到指定的地址单元或寄存器(称为出口参数),主程序调用后从指定的地址单元或寄存器读取运算或处理后的结果,只有这样,才能完成子程序和主程序间的数据的正确传递。 * 子程序名;子程序功能;入口参数;出口参数; 现场的保护与恢复;占用资源。子程序嵌套 子程序名: 现场保护 --- ---- --- 现场恢复 子程序返回ret Lcall 子程序名 子程序中可包括对另外子程序的调用,称为子程序嵌套。 正在执行主程序 CPU正在执行子程序SubA CPU正在执行子程序SubB * 例: ORG 0000H Main: mov sp,#5FH mov R0,#40H mov R7,#10H

文档评论(0)

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

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

1亿VIP精品文档

相关文档