网站大量收购独家精品文档,联系QQ:2885784924

指令系统与程序设计.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

3.5.2子程序调用与堆栈*反之,现在要将堆栈单元的内容弹出的话,过程如下: ?将SP所指堆栈单元(72H)的内容34H弹出;SP自动减1,SP=71H; ?将SP所指堆栈单元(71H)的内容12H弹出;SP自动减1,SP=70H。 初始状态??74H73HSP?72H34H71H12H70H74H73H72H34H71H12HSP?70H74H73H72H34HSP?71H12H70H3.5.2子程序调用与堆栈*?堆栈操作的原则:先进后出,后进先出。?堆栈的作用:用来保护断点地址和保护现场。?堆栈操作指令压入堆栈PUSHdirect;SP先自动加1,然后将direct单元内容压入SP所指的堆栈单元弹出堆栈POPdirect;先将SP所指堆栈单元的内容弹给direct,然后SP自动减13.5.2子程序调用与堆栈*返回主程序继续执行?返回指令堆栈,然后将子程序入口地址addr16?调用指令RET;将断点地址从堆栈单元弹出送入PC,送入PC,转入子程序执行LCALLaddr16;先将当前PC值(断点地址)压入?子程序调用与返回指令3.5.2子程序调用与堆栈*?子程序的编写与应用?编写子程序应注意的问题?子程序在功能上应具有通用性,结构上具有独立性;?给子程序赋一个名字,实际上是入口地址的代号;?注意保护现场和恢复现场;?应有子程序相关说明:如子程序的功能、入口条件、出口条件、占用寄存器或存储单元的情况。3.5.2子程序调用与堆栈*?应用例:编程实现c=a2+b2,设a、b均小于10,a存在31H,b存在32H,c存入33H。设计求平方值子程序SQR:功能:求平方值入口条件:待求数存入A出口条件:平方值存于A使用寄存器:A,B程序清单:3.5.2子程序调用与堆栈* ORG2000H;子程序2000HC0F0SQR:PUSHB;保护现场2002HF5F0MOVB,A2004HA4 MULAB;求平方值2005HD0F0 POPB;恢复现场2007H22 RET;返回 ORG2100H;主程序2100H758170MOVSP,#60H;设置堆栈指针2103HE531 MOVA,31H;取a2105H122000LCALLSQR;调用子程序求a22108HF9 MOVR1,A;a2暂存入R13.5.2子程序调用与堆栈*2109HE532 MOVA,32H;取b210BH122000 LCALLSQR;调用子程序求b2210EH29 ADDA,R1;求a2+b2210FHF533 MOV33H,A;存结果2111H80FE SJMP$第一次调用时堆栈单元状态第二次调用时堆栈单元状态63HSP?62H21H61H08H60H63HSP?62H21H61H0EH60H?子程序嵌套3.5.2子程序调用与堆栈*?子程序嵌套是指在子程序执行过程中还可以调用另一个子程序。?子程序嵌套的过程假设某一主程序在执行的过程中调用子程序1,子程序1执行的过程中又调用子程序2,则子程序嵌套的过程及对堆栈的操作如下图所示:3.5.2子程序调用与堆栈*?堆栈先进后出的操作原则保证子程序嵌套的实现。3.5.3条件转移指令*?判零条件转移指令 JZrel;若A=0转移至PC+2+rel,否则顺序执行 JNZrel;若A?0转移至PC+2+rel,否则顺序执行 例:编程实现下列函数 假设x存放在片内RAM30H单元,将y值存入31H。 0;x=0y=f(x)= 1;x?03.5.3条件转移指令*ORG1000H01MOV

文档评论(0)

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

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

1亿VIP精品文档

相关文档