32位汇编语的言05.ppt

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

32位汇编语言程序设计 第5章 模块化程序设计 第5章 模块化程序设计 5.1 子程序结构 5.2 参数传递 5.3 多模块程序结构 5.4 宏结构 第5章 模块化程序设计 以子程序结构为主体,围绕数码转换实现键盘输入和显示输出 掌握子程序、文件包含、宏汇编等各种多模块编程的方法 5.1 子程序结构 经常用到的应用问题编写成一个通用子程序 大型处理过程分解成能够解决的模块 使用子程序可以 使程序的结构更为清楚 程序的维护更为方便 有利于大程序开发时的多个程序员分工合作 5.1.1 子程序指令 子程序 与主程序分开、完成特定功能的一段程序 主程序(调用程序) 执行调用指令CALL调用子程序 子程序(被调用程序) 执行返回指令RET返回主程序 1. 子程序调用指令CALL CALL指令用在主程序中,实现子程序的调用 分成段内调用(近调用)和段间调用(远调用) 目标地址采用相对寻址、直接寻址或间接寻址 入栈返回地址:将CALL下条指令的地址压入堆栈 CALL label ;调用标号指定的子程序 CALL reg32/reg16 ;调用寄存器指定地址的子程序 CALL mem48/mem32/mem16 ;调用存储单元指定地址的子程序 2. 子程序返回指令RET RET指令用在子程序结束,实现返回主程序 RET ;无参数返回:出栈返回地址 RET i16 ;有参数返回:出栈返回地址 ;ESP←ESP+i16 3. 过程定义伪指令 MASM利用过程定义伪指令获得子程序信息 过程名 PROC …… ;过程体 过程名 ENDP ;过程名为符合语法的标识符 PROC后面可加参数:NEAR或FAR 简化段定义源程序格式中,通常不需指定 〔例5-1〕子程序调用程序-1 ;代码段,主程序B8mov eax,1BDmov ebp,5 0000000A E8 call subp ;子程序调用 0000000F B9 retp1: mov ecx,3BAretp2: mov edx,4E8E call disprd 〔例5-1〕子程序调用程序-2 ;代码段,子程序 subp proc ;过程定义,过程名为subp push ebp mov ebp,esp mov esi,[ebp+4] ;ESI=CALL下条指令(标号RETP1)偏移地址 mov edi,offset retp2 ;EDI=标号RETP2的偏移地址 mov ebx,2 pop ebp ;弹出堆栈,保持堆栈平衡 ret ;子程序返回 subp endp ;过程结束 子程序调用的堆栈 5.1.2 子程序设计 子程序的编写方法与主程序一样 但需要留意几个问题: 利用过程定义,获得子程序名和调用属性 RET指令返回主程序,CALL指令调用子程序 压入和弹出操作要成对使用,保持堆栈平衡 开始保护寄存器,返回前相应恢复 安排在代码段的主程序之外 子程序允许嵌套和递归 〔例5-2〕回车换行子程序 dpcrlf proc ;回车换行子程序 push eax ;保护寄存器 mov al,0dh ;输出回车字符 call dispc ;子程序中调用子程序,实现子程序嵌套 mov al,0ah ;输出换行字符 call dispc pop eax ;恢复寄存器 ret ;子程序返回 dpcrlf endp 5.2 参数传递 主程序与子程序间通过参数传递建立联系 入口参数(输入参数):主程序→子程序 出口参数(输出参数):子程序→主程序 传递参数的多少反映程序模块间的耦合程度 参数的具体内容 数据本身(传递数值) 数据的存储地址(传递地址,传递引用) 参数传递方法 寄存器 变量 堆栈 5.2.1 寄存器传递参数 最简单和常用的参数传递方法 把参数存于约定的寄存器 少量数据直接传递数值 大量数据只能传递地址 带有出口参数的寄存器不能保护和恢复 带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致 〔例5-3〕十六进制显示程序-1 mov eax, 1234abcdh ;假设一个数据 xor ebx,ebx mov ecx,8 ;8位十六进制数 again: rol eax,4 ;高4位循环移位进入低4位 push eax ;mov edx,eax call htoasc ;调用子程序 mov regd+4[ebx],al ;保存转换后的ASCII码 pop eax ;mov eax,edx inc ebx d

文档评论(0)

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

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

1亿VIP精品文档

相关文档