毕业论文4_汇编语言程序设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
毕业论文4_汇编语言程序设计

子程序的调用   调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加2, “LCALL”加3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令(RET或RETI)时, 再将 PC值弹出。 子程序调用中,主程序应先把有关的参数存入约定的位置,子程序在执行时,可以从约定的位置取得参数,当子程序执行完,将得到的结果再存入约定的位置,返回主程序后,主程序可以从这些约定的位置上取得需要的结果,这就是参数的传递。 * 在编写子程序时应注意以下几点:   (1) 要给每个子程序赋一个名字。   子程序的第一条指令的地址被称为子程序的地址或入口地址,该指令前的标号就是该子程序的名称,也是子程序入口地址的代号。   (2) 在子程序的末尾必须有子程序返回指令RET / RETI。   (3) 要能正确地传递参数。 首先要有入口条件,说明进入子程序时它所要处理的数据如何得到,另外,要有出口条件,即处理的结果是如何存放的。 * (4) 注意保护现场和恢复现场。 注意保存主程序和子程序共同涉及的,但值不同的累加器、寄存器和单元的内容。 保护现场: PUSH, 恢复现场:POP (5) 注意子程序的通用性。   子程序中操作对象尽量采用地址或寄存器形式,而不用立即数。 主程序调用子程序的指令:“LCALL”,“ACALL”。 子程序返回指令:RET / RETI。    子程序可以嵌套,嵌套次数从理论上说是无限的,但实际上由于受堆栈深度的影响,嵌套次数是有限的。 * 子程序调用与返回过程示意图 * 例:设有a,b,c三个数(0~9),存于内部RAM的DataA、DataB和DataC三个单元。 编程实现: c = a2 + b2。 设DataA、DataB、DataC分别对应内部RAM的40H、41H和42H单元。 * ORG 5000H DataA EQU 40H DataB EQU 41H DataC EQU 42H START: MOV A, DataA ;取第一操作数 ACALL SQR ;调用查表子程序 MOV R1,A ;a2暂存R1 MOV A,DataB ;取第二操作数 ACALL SQR ;调用查表子程序 ADD A,R1 ;A←a2+b2 MOV DataC,A ; 保存结果 * 子程序: SQR: INC A ;偏移量调整 MOVC A, @A+PC ;查平方表 RET TAB:DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 END * 4.3 常用程序设计举例 4.3.1 代码转换类程序   计算机能识别和处理的仅仅是二进制数,而计算机外设(显示器、LED数码管、打印机等)常使用ASCII码和BCD码,因此,经常需要通过程序完成二进制到BCD码/ASCII码的转换。   程序设计中常采用算法处理和查表方式来实现代码转换。 * 1. 十六进制数与ASCII码之间的转换 例:将从30H单元开始的连续8个单元中存放的十六进制数转换成其所对应的ASCII码,并分别存放在从40H开始的16个单元中。 ; 十六进制数(0~F)转换成ASCII码子程序 HEXAS: CLR C SUBB A,#10 JC LOOP ADD A, #7 LOOP: ADD A, #10 ; 补偿减掉的10 ADD A, #30H RET * ; 完整程序 ORG 2000H MOV R0, #30H ; 设定地址指针 MOV R1, #40H MOV R7, #8 ; 循环次数 NEXT:MOV A, @R0 ; 高字节转换 SWAP A ANL A, #0FH ACALL HEXAS MOV @R1, A INC R1 ; 修改存储地址指针 MOV A, @R0 ; 低字节转换 ANL A, #0FH ACALL HEXAS MOV @R1, A * INC R1 I

文档评论(0)

aena45 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档