- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
例11根據工作寄存器R0內容的不同,使程式轉入相應的分支。(R0)=0對應的分支程式標號為PR0;(R0)=1對應的分支程式標號為PR1;(R0)=N對應的分支程式標號為PRN。…程式如下:LP0:MOVDPTR,#TAB;取表頭地址MOVA,R0ADDA,R0;R0內容乘以2JNCLP1;無進位轉移INCDPH;加進位位LP1:JMP@A+DPTR;跳至散轉表中相應位置TAB:AJMPPR0AJMPPR1AJMPPRN……本例程式僅適用於散轉表首地址TAB和處理程式入口地址PR0,PR1,…,PRN在同一個2KB範圍的存儲區內的情形。若超出2KB範圍可在分支程式入口處安排一條長跳轉指令,可採用如下程式:MOVDPTR,#TABMOVA,R0MOVB,#03H;長跳轉指令占3個位元組MULABXCHA,BADDA,DPHMOVDPH,AXCHA,BJMP@A+DPTR;跳至散轉表中相應的位置TAB:LJMPPR0;跳至不同的分支LJMPPR1LJMPPRN……4.2.5副程式和參數傳遞一、副程式的概念通常把這些基本操作功能編制為程式段作為獨立的副程式,以供不同程式或同一程式反復調用。在程式中需要執行這種操作的地方放置一條調用指令,當程式執行到調用指令,就轉到副程式中完成規定的操作,並返回到原來的程式繼續執行下去。二、副程式的調用調用副程式的指令有“ACALL”和“LCALL”,執行調用指令時,先將程式地址指針PC改變(“ACALL”加2,“LCALL”加3),然後PC值壓入堆疊,用新的地址值代替。執行返回指令時,再將PC值彈出。副程式調用中,主程序應先把有關的參數存入約定的位置,副程式在執行時,可以從約定的位置取得參數,當副程式執行完,將得到的結果再存入約定的位置,返回主程序後,主程序可以從這些約定的位置上取得需要的結果,這就是參數的傳遞。例12把內部RAM某一單元中一個位元組的十六進制數轉換成兩位ASCII碼,結果存放在內部RAM的連續兩個單元中。假設一個位元組的十六進制數在內部RAM40H單元,而結果存入50H#,51H單元,可以用堆疊進行參數傳遞,程式如下:MAIN:MOVR1,#50H;R1為存結果的指針MOVA,40H;A為需轉換的十六進制數SWAPA;先轉換高位半字PUSHACC;壓棧LCALLHEASC;調用將低半位元組的內容轉換;成ASCII碼子程式HEASCPOPACCMOV@R1,A;存高半位元組轉換結果INCR1PUSH40HLCALLHEASCPOPACCMOV@R1,A;存低半位元組轉換結果ENDHEASC:MOVR0,SPDECR0DECR0;R0指向十六進制數參數地址XCHA,@R0;取被轉換參數ANLA,#0FH;保留低半位元組ADDA,#2;
文档评论(0)