chapter高级过程.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文档。上传文档
查看更多
chapter高级过程

ADDR运算符 ADDR运算符 可以在INVOKE调用过程时传递指针 .data myArray BYTE 50 DUP(?) .code INVOKE FillArray, ADDR myArray INVOKE Swap, ADDR Array, ADDR Array+4 PROC伪指令基本格式: 标号 PROC[属性][USES寄存器列表],参数列表 属性 远近属性distance 语言属性langtype 可见性visibility 序言prologue PROC伪指令 PROC伪指令 允许定义一个过程并且附带参数列表 过程名 PROC, parameter_1, parameter_2, … parameter_n PROC伪指令 参数名:类型 参数名可以是赋予参数的任意名字,它的作用域仅限于当前过程内;不能和全局的变量名或代码标号相同 参数列表也可写在同一行 AddTwo PROC,val1:DWORD,val2:DWORD … AddTwo ENDP FillArray PROC, pArray: PTR BYTE … FillArray ENDP PROC伪指令 PROC伪指令 Read_File PROC USES eax ebx, pBuffer:PTR BYTE LOCAL fileHandle:DWORD mov esi, pBuffer mov fileHandler, eax … ret Read_File ENDP PROC伪指令 Read_File PROC push ebp mov ebp,esp add esp, 0fffffffch push eax push ebx mov esi,dword ptr[ebp+8] mov dword ptr[ebp-4],eax pop ebx pop eax leave ret 4 Read_File ENDP Example1 PROC C, parm1:DWORD, parm2:DWORD … Example1 ENDP PROC伪指令 Example2 PROC STDCALL, parm1:DWORD, parm2:DWORD … Example2 ENDP PROTO伪指令 PROTO伪指令 为一个已存在的过程创建原型 允许过程在定义前就被调用 创建方法 拷贝PROC所在的语句,将PROC改成PROTO 如果有USES伪指令,则去掉USES伪指令以及其后的寄存器列表 PROTO伪指令 ArraySum PROC USES esi ecx, ptrArray: PTR DWORD, szArray:DWORD … ArraySum ENDP ArraySum PROTO, ptrArray: PTR DWORD, szArray:DWORD 举例 计算一个双字数组的和ArraySum 使用寄存器参数 使用PROC伪指令声明堆栈参数 ⑤ 参数分类 过程的参数分类通常依据调用程序和被调用程序之间的数据传输方向来分类: 输入参数 输出参数 输入-输出参数 例子:交换两个整数 void swap(int x,int y) { int temp; temp = x; x = y; y = temp; } void swap(int x,int y) { int temp; temp = x; x = y; y = temp; } 疑难提示 错误的操作数尺寸 传递错误类型的指针 传递立即数 5. 递归 递归求和 1+2+…+n 计算阶乘 n! 递归求和 int CalcSum(int n ) { if(n==0) return 0; return n+CalcSum(n-1); } 计算阶乘 void Factorial(int n ) { if(n==0) return 1; else return n*factorial(n-1); } 创建多模块程序 创建多模块程序必须遵循的步骤: 为程序创建主源代码模块(asm文件),主过程应该放在该模块中; 为每个过程创建一个单独的代码模块; 在主程序中使用PROTO伪指令为将要调用的过程创建原型; 在每个程序模块中包含所有过程的PROTO原型声明。 * 计算机科学系-汇编课件 第8章 高级过程 要点: 简介 堆栈框架 递归 .MODEL伪指令 创建多模块程序 1. 简介 堆栈框架 变量的作用域和生存期 堆栈参数的类型 通过传递值或者传递引用来传递参数 在堆栈上创建和初始化局部变量 编写多模块的程序 内存模型和语言关键

文档评论(0)

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

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

1亿VIP精品文档

相关文档