欢迎来到天天文库
浏览记录
ID:39779160
大小:2.80 MB
页数:31页
时间:2019-07-11
《汇编语言程序设计07高级过程与字符串和数组》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、汇编语言程序设计_07_高级过程与字符串和数组大连理工大学软件学院_朱明2009年5月31日_V1.1提问与回顾第六章内容中我们介绍了移位、乘法和除法指令,扩展加减法指令,以及高级过程的定义和调用的内容ROL指令在进行向左移位的过程中,最低位用什么数据填充?最高位被移出至何处?IMUL有符号数乘法指令有哪三种基本格式?IDIV进行有符号数除法运算时需要使用CBW、CWQ和CDQ指令进行何种操作?ADC指令在进行加法运算时,考虑哪三个因素相加?LOCAL定义的局部变量保存在何处?为了访问这些变量或访问其中传递的参数,通
2、常需要用到那些寄存器?INVOKE指令与CALL指令在功能上有何不同?汇编语言程序设计-朱明2提问与回顾…ESP与EBP1过程调用的堆栈参数传递:将参数压入到堆栈中2过程调用与堆栈:将返回地址压入到堆栈中3过程中读取参数时使用EBP寄存器寻址汇编语言程序设计-朱明3…ESP值减4,返回后地址压入到堆栈中这是一般过程调用的第一个阶段返回后地址传递的参数返回后地址…ESP值减4,将传递的参数压入到堆栈中这是堆栈传递参数的过程调用的第一个阶段…传递的参数传递的参数Section1…EBPESP值再减4为使用EBP进行寻址,
3、先将其保护到堆栈中返回后地址传递的参数EBP传递的参数ESP与EBP4过程中获取堆栈传递来的参数,通过EBP5过程运行结束前,需要恢复原来的ESP的值汇编语言程序设计-朱明4Section1…EBP使用EBP进行间接寻址前还应当获取正确的位置正确的位置就是当前ESP的位置,即令EBP=ESP返回后地址传递的参数在使用堆栈传递参数的过程中,只能使用EBP寻址如要访问传递来的参数,则对应的位置为EBP+8但是程序运行过程中定义变量则会改变ESP的值EBP程序结束之前,应当恢复原有ESP的值相当于释放局部变量占用的堆栈空间
4、此外需要特别注意的是还要清理堆栈返回后地址传递的参数局部变量等EBP返回后地址PROTO伪指令INVOKE伪指令用来调用带有参数传递的子过程PROC伪指令可以用来调用带有参数传递的子过程PROTO伪指令用来为已经存在的过程创建原型有点像是高级语言函数?汇编语言程序设计-朱明5MyProgPROTOINVOKEMyProgMyProgPROC……MyProgENDP标准使用顺序INVOKEMyProgMyProgPROC……MyProgENDP先实现后使用过程原型过程调用过程实现过程实现过程调用Section2…多模块
5、过程*整数求和的过程化设序设计方法按照功能将程序划分为各个过程主过程、取得用户输入、计算和、输出计算结果多模块过程程序多模块过程指使用MASM的高级过程伪指令INVOKE、PROTO和带有参数扩展的PROC创建的过程多模块程序相对于CALL的直接调用,其优点在于检查INVOKE位指令传递的参数和PROC伪指令声明的参数一个好的多模块过程程序应该具有一定的文件结构XXX.inc包含文件XXX_main.asm主过程文件_YYY.asm,_ZZZ.asm模块文件汇编语言程序设计-朱明6Section2…多模块过程*整数求
6、和问题的多模块过程结构位于C:irvineexamplesch08ModSum32_advancedModSum文件夹下,多个文件sum.inc包含文件:子过程的原型声明子过程模块:_prompt.asm、_arraysum.asm、_display.asm对应原型声明内容汇编语言程序设计-朱明7INCLUDEirvine32.incPromptForIntegerPROC,ptrPrompt:BYTE,;提示输入字符串ptrArray:PTRDWORD,;指向数组ArraySize:DWORD;数组大小A
7、rraySumPROTO,…DisplaySumPROTO…Section2…多模块过程*_display.asm文件的部分内容主过程模块:Sum_main.asm,包含启动过程main以及对于外部每个过程的调用,该文件使用了INCLUDE伪指令从sum.inc文件中复制过程的原型声明汇编语言程序设计-朱明8INCLUDESum.inc.code;-------------------------------------------------------DisplaySumPROC,ptrPrompt:PTRBYT
8、E,;输出提示字符串theSum:DWORD;运算结果;-------------------------------------------------------pusheaxpushedxmovedx,WriteString…….Section2…多模块过程*Sum_main模块文件的部分内容使用INVOKE、PROTO和PROC的方法能
此文档下载收益归作者所有