预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共37页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十一章深入Windows汇编编程11.1汇编高级语法 11.2程序优化 11.3文件操作 11.4结构化异常处理11.1汇编高级语法11.1.1条件测试表达式关系运算符列表3.利用逻辑运算符 (关系或数值表达式1)逻辑运算符(关系或数值表达式2) 逻辑运算符对表达式进行逻辑运算。 逻辑运算符和关系运算符的语法基本和C语言基本类似。逻辑运算符列表4.根据标志寄存器中的各种标志位符号 11.1.2分支伪操作11.1.3循环伪操作使用.BREAK语句可以跳出循环。 格式: .BREAK[.IF退出条件] 使用.CONTINUE语句可以跳到循环体的最后。 计算0+1+2+…+8+9的几个例子例2:用.BREAK语句来终止循环 XOREAX,EAX XOREBX,EBX .WHILE 1 ADDEAX,EBX INCEBX .BREAK.IF EBX>=10 .ENDW例3:.REPEAT/.UNTIL循环的形式 XOREAX,EAX XOREBX,EBX .REPEAT ADDEAX,EBX INCEBX .UNTIL EBX>=10例4:.REPEAT/.UNTILCXZ循环形式 MOVECX,10 XOREAX,EAX XOREBX,EBX .REPEAT ADDEAX,EBX INCEBX .UNTILCXZ11.2程序优化11.2.1运行时间的优化(2)加减。要使EBX=EAX30: LEAEBX,[EAX-30] (3)乘除。求EAX=EAX/16: SHREAX,4 求EAX=EAX*8: SHLEAX,32.操作的转化设: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<f<b,L不能被b整除,M=(L+(b–1))÷b=(L/b)+1=e+1; 同理可求:a乘以M后,结果是64位数,高32位数就是c,即EDX。低32位数为de+(b-f)c+d。3.求两个数中的较小的数4.算法的优化5.查表法11.2.2占用空间的优化1.选用长度短的指令2.灵活利用堆栈 在除法的过程中,得到的余数可以保存在堆栈中 输出时再逐个弹出。 怎么才能知道有多少个有效的十进制数位呢? 可以设置一个计数器,压入一个余数就进行计数,最后的计数值就是十进制位数; 首先压入一个数字10,在弹出数字时,进行比较。如果小于10,就是一个有效的十进制数位;如果等于10,就表示已经处理结束。3.使用联合4.压缩存储11.3文件操作1.系统定义的3个文件2.文件的打开模式3.文件指针11.3.2文件处理实例11.4结构化异常处理11.4.1捕捉程序中的异常11.4.2汇编程序中的异常处理