- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(汇编语言教程)9_子程序(过程)
四、子程序(过程)的设计方法 主要内容 子程序(过程)的设计 子程序(过程)的调用 参数传递的方法 1、子程序(过程) 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。 解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。 在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 主程序和子程序的调用关系 过程的调用子程序的嵌套 主程序是通过调用指令CALL来调用子程序的。 在调用指令执行时,先将下一条指令的地址(称为返回地址)保存在堆栈中,然后转入调用指令所在的子程序入口,去执行子程序。 子程序中必须写一条RET指令,以便在子程序执行完毕后,程序能顺利返回到主程序的调用处继续往下执行。 子程序又可以再调用另一个子程序,这样的情况称为子程序的嵌套。 子程序(过程)的适应范围 多次重复使用的程序段 具有通用性的程序段 具有特殊功能的程序段 模块化程序结构中的子模块 中断服务程序 2、子程序的基本结构 (1)子程序定义 (2)保护现场和恢复现场 (3)子程序体 (4)子程序返回 (1)子程序定义 子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下: 过程名 PROC [NEAR/FAR] ┆ 过程名 ENDP 其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。 一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性(NEAR 和 FAR)。 子程序的调用和返回——NEAR 如果调用程序和过程在同一代码段中,则使用NEAR属性。 子程序的调用和返回——FAR 如果调用程序和过程不在同一代码段中,则使用FAR属性。 (2)保护现场和恢复现场 例如: 若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用如下方法保护和恢复现场。 PROG PROC PUSH AX PUSH BX PUSH CX;保护现场 PUSH DX ┆ POP DX POP CX POP BX ;恢复现场 POP AX RET ;返回断点处 PROC ENDP 3、主程序与子程序参数传递方式 主程序和子程序之间通常需要传递参数: 入口参数(输入参数):主程序提供给子程序 出口参数(输出参数):子程序返回给主程序 参数的形式: ① 数据本身(传值) ② 数据的地址(传址) 传递的方法: ① 寄存器 ② 存储单元 ③ 堆栈 (1)通过寄存器传送参数 这是最常用的一种方式,使用方便。但受到寄存器个数的限制,一般用于参数较小的情况。 方法: 在主程序中将要传递的参数放入到指定的寄存器中,然后在子程序中再从相应的寄存器获取参数。 例子:在字节型变量BCDBUF中有一个组合BCD码,是将其转换为二进制数后存于BINBUF单元中。 问题分析: 组合BCD码如何转换为二进制码的过程? BCD码分离出相应于十进制数的十位和各位 十位数乘以10,加上个位数 运算后则得到对应的二进制码。 流程图: 程序清单: 书本194 例6-25 (2)利用内存缓冲区传送参数 用存储器传递参数的最简单方法是定义位置、格式确定的缓冲存储区,凡是需要过程处理的参数,无论存在什么地方,必须按格式要求先传入缓冲区。 过程从缓冲区取得数据进行规定的处理,产生的结果按格式要求存入缓冲存储区,调用程序(主程序)再从缓冲区取走结果。 例子:在内存缓冲区中有两个64位数,试定义一个过程使之完成这两个64位相加的运算。 问题分析: 参数的传递通过什么来传递? 通过内存缓冲区。 主程序将过程要用到的参数放入内存单元,并指定内存缓冲区的地址; 子程序中以这个地址来寻找内存的操作数; 结果可以直接放在内存。 流程图: 程序清单: 书本195 例6-26 (3)利用堆栈区传送参数 堆栈是一种特殊的存储结构,利用PUSH入栈和POP出栈指令,可以方便地保存和读取数据。 利用堆栈传参需要注意的是栈指针的变化,由于栈指针所指位置就是要索取数据的存储单元,因此必须保证栈指针的正确。 利用堆栈传参,可以简化程序结构,但是设计思路必须清晰。 例:把内存中字变量BUF的值,转换为4个用ASCⅡ码表示的16进制数码,串的起始地址为STR 。 问题分析: 十六进制转换为ASCII码过程? 0~9、A~F 利用堆栈区在主程序与过程中传递参数,传递的参数包括: 要转换的十六进制数 转换后ASCII码串的内存单元首地址 流程图 程序清单: 4、多个模块之间的参数传送问题 (1) PUBLIC伪指令
您可能关注的文档
最近下载
- 2025南京市专业技术人员继续教育公需课答案:《从大模型到智能超算的思考》(100分).doc VIP
- GKG-GSE-印刷机使用说明书.pdf VIP
- 历史记载-中西闻见录20.pdf VIP
- 历史记载-中西闻见录19.pdf VIP
- 活跃气氛课前热身小游戏破冰课堂游戏看图猜成语.pptx
- 2025秋苏教版(2024)科学三年级上册第四单元空气的性质《14 称空气》教学设计.docx VIP
- 2025秋苏教版(2024)科学三年级上册第四单元空气的性质《13 吹气球》教学设计.docx VIP
- 2025秋苏教版(2024)科学三年级上册第四单元《16 风的形成》教学设计.docx VIP
- 干货调料食材配送服务投标方案(技术方案).doc
- 2025秋苏教版(2024)科学三年级上册第四单元《15热气球》教学设计.docx VIP
文档评论(0)