- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2)子程序嵌套 子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。 子程序SUB1 主程序MAIN LCALL SUB1 RET 子程序SUB2 RET LCALL SUB2 (3)子程序的调用与返回 问题:子程序调用、返回到主程序中的正确位置,并接著执行主程序中的后续指令呢? 为了解决这个问题,我们采用了堆栈技术。 子程序SUB1 主程序MAIN RET 子程序SUB2 RET 2010 2013 2110 2113 2100 2200 20 13 20 13 PC 21 13 13 21 堆栈指针SP 堆栈 LCALL SUB1 LCALL SUB2 21 13 20 13 子程序设计注意事项 (1)要给每个子程序起一个名字,也就是入口地址的代号。 (2)要能正确地传递参数。即首先要有入口条件,说明进入子程序时,它所要处理的数据放在何处(如:是放在A中还是放在某个工作寄存器中等)。另外,要有出口条件,即处理的结果存放在何处。 (3)注意保护现场和恢复现场。在子程序使用累加器、工作寄存器等资源时,要先将其原来的内容保存起来,即保护现场。当子程序执行完毕,在返回主程序之前,要将这些内容再取出,送还到累加器、工作寄存器等原单元中,这一过程称为恢复现场。 ? (1)运算类子程序设计 例:假如在MCS-51单片机内部RAM中30H~37H单元、 38H~3FH单元分别存放有两个8字节BCD码十进制数,设计一段程序将这两个数相加,并把结果存于2FH~37H单元中,小地址存数据的高字节。分析:先清Cy位,把(37H)和(3FH)进行带Cy相加,在进行十进制调整,结果存于37H单元中;把(36H)和(3EH)进行带Cy相加,在进行十进制调整……循环至结束,结果把最高字节的Cy存入2FH单元。 ORG 0000H MOV R2,#08H MOV R0,#37H MOV R1,#3FH CLR C LOP:MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A DEC R0 DEC R1 DJNZ R2,LOP CLR A RLC A MOV 2FH,A SJMP $ END 设定循环次数,R0和R1分别指向加数和被加数的首地址 相加,并回存结果 开始 R0?37H(被加数首地址) R1?3FH(加数首地址) R2?08H(循环次数) 清Cy位 加数和被加数 相加,十进制 调整,并回存 Cy存入2FH单元 结束 调整数据指针 R0?(R0)-1 R1?(R1)-1 (R2)-1=0? N Y R0和R1分别指向加数和被加数的下一地址,判断循环次数 存进位标志 极值查找程序 例:在MCS-51单片机内部RAM的40H-47H单元中存有8个无符号数,设计一段程序找出其中的最大值,并存放到48H单元中。 这是一个求最大值的问题。 分析:先把(A)?(40H),然后将(41H)和(A)进行比较,如果(41H)(A),则(A)?(41H),然后和下一个字节进行比较,依次类推,最后(A)必定是最大值。 40H 41H 42H 43H 44H 45H 46H 47H 48H 开始 R0?40H(数据区首地址) R2?07H(循环次数) A?((R0))(取第一个数) R0?(R0)+1(指向下一个数) B ?((R0)) 结束 A≥B? N Y A ?(B) (R2)-1=0? 48H?(A) N Y ORG 0000H MOV R2,#07H MOV R0,#40H MOV A,@R0 LOOP:INC R0 MOV B,@R0 CJNE A,B,NEX NEX: JNC NET MOV A,B NET: DJNZ R2,LOOP MOV 48H,A SJMP $ END 设定循环次数R1,R0作为数据指针,指向数据区第一个字节 取出下一个字节,存入B 如果(A)(B), 则(A)?(B) 次数到否,到则取出(A)?48H (2)查表程序设计 程序使用的专用指令: MOVC A, @A+PC MOVC A, @A+DPTR 一般情况下,
文档评论(0)