chapter5过程

上传人:gb****c 文档编号:243022926 上传时间:2024-09-14 格式:PPT 页数:22 大小:147KB
返回 下载 相关 举报
chapter5过程_第1页
第1页 / 共22页
chapter5过程_第2页
第2页 / 共22页
chapter5过程_第3页
第3页 / 共22页
点击查看更多>>
资源描述
Klicken Sie, um das Titelformat zu bearbeiten,Klicken Sie, um die Formate des Vorlagentextes zu bearbeiten,Zweite Ebene,Dritte Ebene,Vierte Ebene,Fnfte Ebene,22,计算机科学系汇编课件,第5章 过程,要点:,与外部库链接,本书附带的链接库,堆栈操作,过程的定义和使用,使用过程进行程序设计,1. 与外部链接库,链接库(,link labary,)是包含已经编译成机器码的过程的文件,WriteString PROTO,Call WriteString,在程序被编译的时候,编译器为,CALL,指令的目的地址留出空白,该空白随后由编译器填充,2.,本书附带的链接库,屏幕显示和光标的变换,Clrscr,:清除屏幕,Crlf,:将光标前进到标准输出下一列的开始,Gotoxy,:定位到屏幕指定的行列上,默认,X,:,0,79,设置在,DL,中,,Y,:,0,24,设置在,DH,中,关于时间,Delay,:以指定的时间间隔将程序暂停执行;,EAX,设置为预期时间间隔,单位是毫秒,GetMseconds,:从午夜开始计算的逝去的毫秒数;返回值在,EAX,中,WaitMsg,:显示,“Press Enter to continue ”,,按回车键继续,2.,本书附带的链接库,从标准输入读入,ReadChar,:字符、,AL,、不回显,ReadHex,:,32,位十六进制整数、,EAX,、不进行错误检查,ReadInt,:,32,位有符号、,EAX,、进行错误检查,ReadString,:在按下回车键后停止、,EAX,中返回字符数、,EDX,中设置偏移地址、,ECX,中设置最多可读入的字符数,2.,本书附带的链接库,2.,本书附带的链接库,从标准设备输出,WriteBin,:,ASCII,码的二进制,,EAX,WriteChar,:字符、,AL,WriteDec,:,32,位十进制无符号整数,,EAX,WriteHex,:,32,位十六进制无符号整数、,EAX,WriteInt,:,32,位十进制有符号、,EAX,、有符号位,WriteString,:显示一个以空字符结尾的字符串,,EDX,生成随机数,Randomsize,:初始化随机数的种子,Random32,:生成,32,位随机数、,EAX,RandomRange,:生成一个,0,n,1,之间的随机整数,,n,由,EAX,传递,由,EAX,返回,2.,本书附带的链接库,其他,DumpRegs,:以十六进制显示,CPU,通用寄存器、,EFLAGS,、,EIP,和,CF,、,SF,、,ZF,、,OF,的内容,DumpMem,:以十六进制显示一块内存的内容;,ESI,:内存开始地址;,ECX,:元素数目;,EBX,:元素尺寸,GetCommandTail,:将程序的命令行拷贝到一个以空字符结尾的字符串中,SetTextColor,:前景色和背景色,2.,本书附带的链接库,mov eax,,,white+(blue*16),call SetTextColor,3.,堆栈操作,堆栈(,Stack,):后进先出,运行时栈(,running stack,):由,CPU,直接管理的内存数组,它使用,SS,和,ESP,SS,:存放段选择器,用户模式程序不应对其修改,ESP,:存放的是指向堆栈内特定位置的一个,32,位偏移值;通常由,CALL,、,RET,、,PUSH,和,POP,等指令间接修改,堆栈指针寄存器,ESP,指向最后压入(或添加)到堆栈上的数据,压栈操作,32,位的压栈(,PUSH,)将堆栈指针减,4,,并将值拷贝到堆栈指针所指向的位置,00000FFC,00000FF8,00000FF4,00000FF0,ESP,000000,A,5,00000FFC,00000FF8,00000FF4,00000FF0,ESP,push r/m16,push r/m32,push imm32,出栈操作,32,位的出栈(,POP,)从堆栈顶端移走一个值并将其置于寄存器或变量中;堆栈指针相应增加,并指向栈中与弹出数据相邻的最高位置。,000000A5,00000FFC,00000FF8,00000FF4,00000FF0,ESP,000000A5,00000FFC,00000FF8,00000FF4,00000FF0,ESP,pop r/m16,pop r/m32,压栈和出栈操作,PUSHFD/POPFD,对,32,位,EFLAGS,进出栈操作,PUSHAD/POPAD,按顺序处理所有的,32,位通用寄存器:,EAX,、,ECX,、,EDX,、,EBX,、,ESP,、,EBP,、,ESI,和,EDI,PUSHA/POPA,与上面指令同样的顺序处理,16,位寄存器,4.,过程的定义和使用,PROC,伪指令,CALL,和,RET,指令,局部标号和全局标号,向过程传递寄存器参数,实例,保存和恢复寄存器,PROC,伪指令,过程:以,RET,语句结束的命名语句块,除了程序启动过程之外的其他过程时应以,RET,结尾,main,PROC,exit,main,ENDP,sample,PROC,ret,sample,ENDP,例子:三个整数求和,创建一个过程来计算3个32位整数求和,假设合适的整数在调用过程之前已经存放到,EAX,EBX,ECX,中了,函数将在,EAX,中返回相加的和,CALL,和,RET,指令,CALL,指令指示处理器在新的内存地址执行指令,以实现对过程的调用;,CALL,指令将返回地址压入堆栈并将调用过程的地址拷贝到指令指针寄存器中;,RET,指令从堆栈弹出地址并送到指令指针寄存器中;,main,PROC,CALLMySub,00000025,moveax, ebx,exit,main,ENDP,Mysub,PROC,moveax,ebx,ret,Mysub,ENDP,CALL,和,RET,指令,局部标号和全局标号,默认情况下,代码标号(以,单个冒号,结尾)是,局部标号,,它仅对其所在过程内的语句可见,这阻止了跳转或循环语句转移到当前过程之外的标号;,如果必须将控制转移到当前过程之外的标号处,标号必须被声明为全局的;声明,全局标号,,要在标号后跟,双冒号,;,main,PROC,jmpL2,;错误,L1:,exit,main,ENDP,sub2,PROC,L2:,jmpL1,;,ok,ret,sub2,ENDP,局部标号和全局标号,向过程传递寄存器参数,参数传递方式,寄存器参数传递,创建一个名为,ArraySum,过程,它从调用程序接收两个参数:一个指向32位整数数组的指针和一个包含数组元素数目的计数,其和由,EAX,寄存器返回,堆栈参数传递,保存和恢复寄存器,USES,操作符,与,PROC,伪指令配套使用,从而允许列出被过程修改的所有寄存器;,指示编译器做两件事:,在过程的开始处生成,PUSH,指令在堆栈上保存寄存器;,在过程结束前生成,POP,指令恢复这些寄存器的值;,USES,应紧跟,PROC,伪指令后,其后跟由“空格和制表符”分隔的寄存器列表;,整数求和程序,整数求和程序,提示用户输入3个整数,PromptForIntegers,计算整数数组的和,ArraySum,显示结果,DisplaySum,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!