4-5子程序的设计.pptVIP

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

微型计算机原理及应用 第4章 汇编语言程序设计 子程序编写注意1 作业 本讲小结 ※理解课堂上讲过的程序的编程思想和相应的指令 掌握伪指令ORG、SEGMENT、ASSUME、ENDS、END、PROC NEAR/FAR、ENDP的应用 掌握关系运算符、数值返回运算符中OFFSET、SEG、TYPE、LENGTH、SIZE运算符的定义 了解完整汇编程序的格式 会编写简单的控制程序,例如: 将AH中2位十六进制数拆开,分别放到内存单元BUF1和BUF2的低4位中。 若字型数据NUM是偶数,转向L2;反之,转向L1 * * 子程序的定义 程序设计中,把多次重复出现、具有通用性、能够完成特定处理任务的程序段编写成独立的程序模块。 子程序的优点 子程序结构使程序简洁;编写程序时可以将一个任务分成若干个子程序,分散到几个人手中,加快编程速度。 为便于主、子程序之间的联系,编写子程序前应注意: 1)确定子程序的功能 2)确定子程序名称 3)确定子程序的入口参数、出口参数 4)编写子程序时应注意:保护好返回地址,保护好主程序中寄存器的内容 8.5 子程序设计 要处理的数据从哪里来?通过什么给你? 处理好的数据怎么给人家?协作者间约定好,调用时处理的结果从哪里去拿 CALL完成 子程序内通过堆栈完成 子程序结构 保护返回地址,通常由CALL指令本身完成,返回地址存放在堆栈中 保护寄存器内容,可以放内存,但是一般也用堆栈。注意PUSH、POP指令要对称安排 : 主程序与子程序之间的参数传递,可以通过寄存器传递、存储器传递或者堆栈传递 8.5 子程序设计 子程序举例 (通过寄存器传递参数) BCD2BIN PROC NEAR (FAR) ;命名原则 PUSH CX ; 保护寄存器 MOV CH, AL ;AL作为入口 AND CH,0FH;分离出个位数 MOV CL,4 SHR AL,CL ; 分离出10位数 MOV CL,10 ; MUL CL;十位数乘以10放在AL中 ADD AL,CH ;AL作为处理结果的出口 POP CX ;恢复寄存器内容 RET ;必须的指令 BCD2BIN ENDP;子程序框架 8.5 子程序设计 SUBT PROC PUSH AX ;现场保护 PUSH BX PUSH CX PUSH DX …… ;子程序体 POP DX ;现场恢复 POP CX POP BX POP AX RET SUBT ENDP 例5-13 PUSH指令把子程序所需要使用的寄存器内容保存在堆栈中 POP指令把寄存器内容恢复原状 子程序结构形式—保护现场与恢复现场 注意:子程序中用到的寄存器是应该保护的。 如果使用寄存器在主程序和子程序之间传送参数,这种寄存器就不一定需要保护,特别是向主程序回送结果的寄存器,更不应该因保存和恢复寄存器而破坏了应该向主程序传送的信息。 先入后出的原则 掌握以下几点: 调用子程序用CALL指令,返回调用程序用RET指令。 子程序允许嵌套调用。 进入子程序后首先要保护主程序的运行状态(标志位)和使用的寄存器内容(称为保护现场),退出子程序前要恢复现场。 调用前要预先确定子程序中要使用哪些寄存器,并定义入口参数和出口参数。参数传递可利用寄存器、存储单元或堆栈(要用BP寻址)。 子程序设计总结 1. 在下列程序运行后,请给相应的寄存器及存储单元填入运行的结果。 MOV AL,10H MOV CX,1000H MOV BX,2000H MOV [CX],AL XCHG CX,BX MOV  DH,[BX] MOV  DL,01H XCHG CX,BX MOV [BX],DL HLT 2. 在下列程序运行后,请给相应的寄存器及存储单元填入运行的结果。 MOV AL,20H MOV BP,1000H MOV BX,2000H MOV [BP],AL MOV DH,20H MOV [BX],DH MOV DL,01H MOV DL,[BX] MOV CX,3000H HLT 3. 利用变址寄存器,编写一个程序,把自1000单元开始的100个数传送到自0170H开始的存储区中去。 编程题 1. 在自0500H单元开始,存有100个数(字节)。要求把它传送到1000H开始的存储区,但在传送过程中要检查数的值,遇到每一个零就停止传送。 2. 自0500H单元开始,有10个无符号数,编写一个程序求这个10个数的和(用8位数运算指令),把和放到050A及050B单元中(和用两个字节表示),且高

文档评论(0)

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

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

1亿VIP精品文档

相关文档