汇编语言程序设计07高级过程与字符串和数组.pptVIP

汇编语言程序设计07高级过程与字符串和数组.ppt

  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文档。上传文档
查看更多
章节回顾 以下的问题我们应当轻松回答 PROC用于定义一个过程,在过程中常会用到寄存器,为了保存寄存器中的内容,除了人工进行压栈和弹栈操作外,还可以使用哪条伪指令完成该功能? 在保护模式下,过程调用时最后一个压入堆栈的参数存储在什么位置上?(相对于EBP) 如何声明一个名为myArr的20个双字的局部数组 在执行简单字符串指令时,通过什么指令能够设置方向标志位使指针寄存器在内存中反向移动 写一个32位模式下相对基址变址操作数寻址的例子 对一个已经排序好的n个元素的数组使用二分法排序,最多只需要比较多少次? 汇编语言程序设计 - 朱明 * * AL=80h * AX=0080h * EAX * 16 mov esi,2 mov edi,3 mov eax,[esi*16+edi*4] * 获取随机整数的方法是调用Random32过程,该过程会将返回的随机整数保存在EAX寄存器中 * USES伪指令 EBP+8 LOCAL myArr[20]:DWORD STD,1,反向移动 O(log n), logn/log2+1 * 汇编语言程序设计 - 朱明 _07_高级过程与字符串和数组 大连理工大学软件学院_朱明 2009年5月31日_ V1.1 提问与回顾 第六章内容中我们介绍了移位、乘法和除法指令,扩展加减法指令,以及高级过程的定义和调用的内容 ROL指令在进行向左移位的过程中,最低位用什么数据填充?最高位被移出至何处? IMUL有符号数乘法指令有哪三种基本格式? IDIV进行有符号数除法运算时需要使用CBW、CWQ和CDQ指令进行何种操作? ADC指令在进行加法运算时,考虑哪三个因素相加? LOCAL定义的局部变量保存在何处?为了访问这些变量或访问其中传递的参数,通常需要用到那些寄存器? INVOKE指令与CALL指令在功能上有何不同? 汇编语言程序设计 - 朱明 * ESP与EBP 1 过程调用的堆栈参数传递:将参数压入到堆栈中 2 过程调用与堆栈:将返回地址压入到堆栈中 3 过程中读取参数时使用EBP寄存器寻址 汇编语言程序设计 - 朱明 * … ESP值减4,返回后地址压入到堆栈中 这是一般过程调用的第一个阶段 返回后地址 传递的参数 返回后地址 … ESP值减4,将传递的参数压入到堆栈中 这是堆栈传递参数的过程调用的第一个阶段 … 传递的参数 传递的参数 EBP ESP值再减4 为使用EBP进行寻址,先将其保护到堆栈中 返回后地址 传递的参数 EBP 传递的参数 ESP与EBP 4 过程中获取堆栈传递来的参数,通过EBP 5 过程运行结束前,需要恢复原来的ESP的值 汇编语言程序设计 - 朱明 * EBP 使用EBP进行间接寻址前还应当获取正确的位置 正确的位置就是当前ESP的位置,即令EBP=ESP 返回后地址 传递的参数 在使用堆栈传递参数的过程中,只能使用EBP寻址 如要访问传递来的参数,则对应的位置为EBP+8 但是程序运行过程中定义变量则会改变ESP的值 EBP 程序结束之前,应当恢复原有ESP的值 相当于释放局部变量占用的堆栈空间 此外需要特别注意的是还要清理堆栈 返回后地址 传递的参数 局部变量等 EBP 返回后地址 PROTO伪指令 INVOKE伪指令用来调用带有参数传递的子过程 PROC伪指令可以用来调用带有参数传递的子过程 PROTO伪指令用来为已经存在的过程创建原型 有点像是高级语言函数? 汇编语言程序设计 - 朱明 * MyProg PROTO INVOKE MyProg MyProg PROC … … MyProg ENDP 标准使用顺序 INVOKE MyProg MyProg PROC … … MyProg ENDP 先实现后使用 过程原型 过程调用 过程实现 过程实现 过程调用 多模块过程* 整数求和的过程化设序设计方法 按照功能将程序划分为各个过程 主过程、取得用户输入、计算和、输出计算结果 多模块过程程序 多模块过程指使用MASM的高级过程伪指令INVOKE、PROTO和带有参数扩展的PROC创建的过程 多模块程序相对于CALL的直接调用,其优点在于检查INVOKE位指令传递的参数和PROC伪指令声明的参数 一个好的多模块过程程序应该具有一定的文件结构 XXX.inc包含文件 XXX_main.asm主过程文件 _YYY.asm,_ZZZ.asm模块文件 汇编语言程序设计 - 朱明 * 多模块过程* 整数求和问题的多模块过程结构 位于C:\irvine\examples\ch08\ModSum32

文档评论(0)

189****6649 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档