汇编语言程序设计07高级过程与字符串和数组.ppt
《汇编语言程序设计07高级过程与字符串和数组.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计07高级过程与字符串和数组.ppt(31页珍藏版)》请在三一办公上搜索。
1、汇编语言程序设计,_07_高级过程与字符串和数组大连理工大学软件学院_朱明2009年5月31日_ V1.1,提问与回顾,第六章内容中我们介绍了移位、乘法和除法指令,扩展加减法指令,以及高级过程的定义和调用的内容 ROL指令在进行向左移位的过程中,最低位用什么数据填充?最高位被移出至何处?IMUL有符号数乘法指令有哪三种基本格式?IDIV进行有符号数除法运算时需要使用CBW、CWQ和CDQ指令进行何种操作?ADC指令在进行加法运算时,考虑哪三个因素相加?LOCAL定义的局部变量保存在何处?为了访问这些变量或访问其中传递的参数,通常需要用到那些寄存器?INVOKE指令与CALL指令在功能上有何不同
2、?,汇编语言程序设计-朱明,2,提问与回顾,ESP与EBP,1 过程调用的堆栈参数传递:将参数压入到堆栈中 2 过程调用与堆栈:将返回地址压入到堆栈中 3 过程中读取参数时使用EBP寄存器寻址,汇编语言程序设计-朱明,3,ESP值减4,返回后地址压入到堆栈中这是一般过程调用的第一个阶段,返回后地址,传递的参数,返回后地址,ESP值减4,将传递的参数压入到堆栈中这是堆栈传递参数的过程调用的第一个阶段,传递的参数,传递的参数,Section 1,EBP,ESP值再减4为使用EBP进行寻址,先将其保护到堆栈中,返回后地址,传递的参数,EBP,传递的参数,ESP与EBP,4 过程中获取堆栈传递来的参数
3、,通过EBP 5 过程运行结束前,需要恢复原来的ESP的值,汇编语言程序设计-朱明,4,Section 1,EBP,使用EBP进行间接寻址前还应当获取正确的位置正确的位置就是当前ESP的位置,即令EBP=ESP,返回后地址,传递的参数,在使用堆栈传递参数的过程中,只能使用EBP寻址如要访问传递来的参数,则对应的位置为EBP+8但是程序运行过程中定义变量则会改变ESP的值,EBP,程序结束之前,应当恢复原有ESP的值相当于释放局部变量占用的堆栈空间此外需要特别注意的是还要清理堆栈,返回后地址,传递的参数,局部变量等,EBP,返回后地址,PROTO伪指令,INVOKE伪指令用来调用带有参数传递的子
4、过程 PROC伪指令可以用来调用带有参数传递的子过程 PROTO伪指令用来为已经存在的过程创建原型 有点像是高级语言函数?,汇编语言程序设计-朱明,5,MyProg PROTO,INVOKE MyProg,MyProg PROCMyProg ENDP,标准使用顺序,INVOKE MyProg,MyProg PROCMyProg ENDP,先实现后使用,过程原型,过程调用,过程实现,过程实现,过程调用,Section 2,多模块过程*,整数求和的过程化设序设计方法 按照功能将程序划分为各个过程 主过程、取得用户输入、计算和、输出计算结果 多模块过程程序 多模块过程指使用MASM的高级过程伪指令I
5、NVOKE、PROTO和带有参数扩展的PROC创建的过程 多模块程序相对于CALL的直接调用,其优点在于检查INVOKE位指令传递的参数和PROC伪指令声明的参数 一个好的多模块过程程序应该具有一定的文件结构 XXX.inc包含文件 XXX_main.asm主过程文件 _YYY.asm,_ZZZ.asm模块文件,汇编语言程序设计-朱明,6,Section 2,多模块过程*,整数求和问题的多模块过程结构 位于C:irvineexamplesch08ModSum32_adva ncedModSum文件夹下,多个文件 sum.inc包含文件:子过程的原型声明 子过程模块:_prompt.asm、_a
6、rraysum.asm、_display.asm对应原型声明内容,汇编语言程序设计-朱明,7,INCLUDEirvine32.incPromptForIntegerPROC,ptrPrompt:BYTE,;提示输入字符串ptrArray:PTR DWORD,;指向数组ArraySize:DWORD;数组大小ArraySumPROTO,DisplaySumPROTO,Section 2,多模块过程*,_display.asm文件的部分内容 主过程模块:Sum_main.asm,包含启动过程main以及对于外部每个过程的调用,该文件使用了INCLUDE伪指令从sum.inc文件中复制过程的原型声明
7、,汇编语言程序设计-朱明,8,INCLUDESum.inc.code;-DisplaySumPROC,ptrPrompt:PTR BYTE,;输出提示字符串theSum:DWORD;运算结果;-pusheaxpushedxmovedx,WriteString.,Section 2,多模块过程*,Sum_main模块文件的部分内容 使用INVOKE、PROTO和PROC的方法能够从应用上隐藏大量的细节问题 以上是高级过程章节的内容,汇编语言程序设计-朱明,9,Section 2,INCLUDESum.inc.codemainPROCcallClrscrINVOKE PromptForIntege
8、rs,ADDR prompt1,ADDR prompt2,ADDR array,CountINVOKE,Section 3,字符串处理,基本的字符串操作指令 MOVSB、MOVSW和MOVSD:移动字符串数据指令,将由ESI寻址的内存地址处的数据复制到EDI寻址的内存地址处 CMPSB、CMPSW和CMPSD:比较字符串,比较由ESI和EDI寻址的两个内存地址处的值 SCASB、SCASW和SCASD:扫描字符串,比较累加器与EDI寻址的内存地址处的内容 STOSB、STOSW和STOSD:存储字符串数据,存储累加值的内容至EDI寻址的内存地址处 LODSB、LODSW和LODSD:字符串装入
9、累加器,加载ESI寻址的内存地址处的数据至累加器,汇编语言程序设计-朱明,10,Section 3,字符串处理,MOVSB、MOVSW和MOVSD B:BYTE、W:WORD、D:DWORD 三条指令会自动修改ESI和EDI的值 自动设置增加还是减小的数值的多少 连续的字符串移动指令使用方法设置ESI和EDI的方向:增加或者减少 CLD:清除方向标值位,也就是正向,ESI和EDI增加 STD:设置方向标值位,也就是反向,ESI和EDI减小 设置ECX寄存器内容为要复制的字符串的数量 设置源字符串偏移ESI和目的字符串偏移EDI两个寄存器 使用重复前缀指令rep设置重复执行的指令(三条指令之一)
10、rep的使用类似于loop,会按照ECX的值重复执行指令,汇编语言程序设计-朱明,11,Section 3,字符串处理,MOVSB、MOVSW和MOVSD 从source复制20个整数到target中,在复制完数据之后,ESI和EDI指向每个数组的最后一个位置 rep仅重复执行其后的指令,即程序中MOVSD指令 MOVSD设置每次ESI和EDI都加4,汇编语言程序设计-朱明,12,.datasourceDWORD 20 DUP(0FFFFFFFFh)targetDWORD 20 DUP(?).codecld;设置正向增加movecx,LENGTHOF source;设置REP的计数器moves
11、i,OFFSET source;设置ESI指向源movedi,OFFSET target;设置EDI指向目的repmovsd;复制双字DWORD,字符串处理,CMPSB、CMPSW和CMPSD 三条指令隐含操作为用左边操作数减去右边操作数,进而用户可以用无符号数跳转指令进行跳转 当需要进行多个双字时,仍需要设置方向,并初始化ECX寄存器的值,使用REP重复指令,汇编语言程序设计-朱明,13,Section 3,.datasourceDWORD 1234htargetDWORD 5678h.codemovesi,OFFSET source;设置ESI指向源movedi,OFFSET target
12、;设置EDI指向目的cmpsd;进行比较jaL1;sourcetargetjmpL2;sourcetarget,字符串处理,SCASB、SCASW和SCASD 分别将AL、AX或EAX中的值同EDI寻址的目标内存中的字节、字或者双字比较 特别适用于在长字符串或数组中查找匹配 除REP循环之外,可以使用REPNE,该指令的循环终止条件为ECX=0或者找到了匹配的内容,汇编语言程序设计-朱明,14,.codemovedi,OFFSET source;设置EDI指向字符串 moval,F;要查找的字母movecx,LENGTHOF source;设置EDI指向目的cld;方向正向增加repnesca
13、sb;不相等则重复jnzquit;没有找到decedi;找到了,EDI回退,Section 3,字符串处理,STOSB、STOSW和STOSD 分别将AL、AX或EAX中的值存储到EDI寻址的目标内存单元中 特别适用于用填充字符串或者数组 LODSB、LODSW和LODSD 从ESI寻址的内存单元中将对应尺寸的内容复制到AL、AX或EAX寄存器中 IRVINE函数库提供的一些字符串操作过程,汇编语言程序设计-朱明,15,;字符串复制过程str_copy PROTO,source:PTR BYTE,target:PTR BYTE,;删除字符串中指定字符str_trim PROTO,pString
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 07 高级 过程 字符串 数组
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6171005.html