ch 深入windows汇编编程课件

ch 深入windows汇编编程课件

ID:19416658

大小:246.00 KB

页数:37页

时间:2018-10-02

ch 深入windows汇编编程课件_第1页
ch 深入windows汇编编程课件_第2页
ch 深入windows汇编编程课件_第3页
ch 深入windows汇编编程课件_第4页
ch 深入windows汇编编程课件_第5页
资源描述:

《ch 深入windows汇编编程课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十一章深入Windows汇编编程11.1汇编高级语法11.2程序优化11.3文件操作11.4结构化异常处理11.1汇编高级语法汇编语言语法问题:分支和循环程序结构存在标号定义和程序流程复杂的问题可读性、简洁性、可维护性不如高级语言编写汇编程序时比较烦琐MASM引入了一系列伪指令来实现条件测试、分支和循环语句等。11.1.1条件测试表达式条件测试表达式的形式:1.寄存器或内存变量例如:x;x不等0时为真EAX;EAX不等于0时为真2.利用关系运算符(数值表达式1)关系运算符(数值表达式2)关系运算符比较数值表达式1

2、和数值表达式2的内容关系运算符列表3.利用逻辑运算符(关系或数值表达式1)逻辑运算符(关系或数值表达式2)逻辑运算符对表达式进行逻辑运算。逻辑运算符和关系运算符的语法基本和C语言基本类似。逻辑运算符列表4.根据标志寄存器中的各种标志位符号11.1.2分支伪操作分支语句根据条件表达式的真假执行不同的代码模块,与C语言的if/elseif/else/endif相似。语法如下:.IF条件表达式1表达式1为“真”时执行的指令[.ELSEIF条件表达式2表达式2为“真”时执行的指令][.ELSE上述条件均不满足时执行的指令]

3、.ENDIF11.1.3循环伪操作循环是重复执行的一组指令,分3种:1.WHILE-ENDW循环.WHILE条件测试表达式循环体.ENDW2.REPEAT-UNTIL循环:.REPEAT循环体.UNTIL条件测试表达式3.REPEAT-UNTILCXZ循环.REPEAT循环体.UNTILCXZ[条件测试表达式]使用.BREAK语句可以跳出循环。格式:.BREAK[.IF退出条件]使用.CONTINUE语句可以跳到循环体的最后。计算0+1+2+…+8+9的几个例子例1:.WHILE/.ENDW循环形式XOREAX,E

4、AXXOREBX,EBX.WHILEEBX<10ADDEAX,EBXINCEBX.ENDW例2:用.BREAK语句来终止循环XOREAX,EAXXOREBX,EBX.WHILE1ADDEAX,EBXINCEBX.BREAK.IFEBX>=10.ENDW例3:.REPEAT/.UNTIL循环的形式XOREAX,EAXXOREBX,EBX.REPEATADDEAX,EBXINCEBX.UNTILEBX>=10例4:.REPEAT/.UNTILCXZ循环形式MOVECX,10XOREAX,EAXXOREBX,EBX.RE

5、PEATADDEAX,EBXINCEBX.UNTILCXZ11.2程序优化评价一个程序优劣的要素:实现思想是否合理清晰;书写风格是否符合规范;……程序的执行效率(重要)程序在多长的时间内能够完成(时间)程序需要多大的存储空间(空间)11.2.1运行时间的优化1.选择执行速度快的指令(1)寄存器清零MOVEAX,0SUBEAX,EAXXOREAX,EAX(2)加减。要使EBX=EAX30:LEAEBX,[EAX-30](3)乘除。求EAX=EAX/16:SHREAX,4求EAX=EAX*8:SHLEAX,32.操作

6、的转化设被除数为a,除数为b,商为c,余数为d,均为32位二进制数;a÷b=c余d,即a=bc+d;记L=232=100000000H,求出M=(L+(b–1))÷b,则c=aM/L设:L÷b=emodf,L=be+f分两种情况:(1)f=0,即L能被b整除,M=(L+(b–1)÷b=L/b=e;aM=a(L/b)=((bc+d)L/b)=cL+(dL/b)a乘以M后,结果是64位数,高32位数就是c,即EDX。低32位数为dL/b。(2)0

7、1;同理可求:a乘以M后,结果是64位数,高32位数就是c,即EDX。低32位数为de+(b-f)c+d。3.求两个数中的较小的数求两个数中的较小的数利用公式min(x,y)=x+(((y–x)>>31)&(y-x))求两个数中的较大的数利用公式max(x,y)=x–(((x–y)>>(WORbyteITS–1))&(x–y))4.算法的优化举例:判断素数的算法一般思想:guess为要判断的数,把从2到guess-1中每一个数作为除数,去除guess。如果商为0,则不是素数。优化:偶数不是素数,因此循环时可每次加2

8、,且不取偶数,没有必要从3到guess取值,只需取到guess开方值程序prime.asm(P364)。5.查表法要将十六进制数字0~15转换为‘0’~‘9’、‘A’~‘F’。分析:如果al的初值为0~9,jbe指令会发生跳转,得到‘0’~‘9’。如果al的初值为10~15,则JBE指令不会跳转,得到‘A’~‘F’。指令:HexCharsBYTE'01234

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。