汇编程序设计课件07.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编程序设计课件07

汇编语言程序设计 实验7 程序优化 提纲 7.1 指令代码的优化 7.2 空间优化处理 7.3 MMX指令 7.4 SSE指令 7.1 指令代码的优化 评价一个程序的优劣,执行效率是一个重要因素。尤其是在汇编编程中,更应该体现汇编语言执行效率高的优势。 执行效率从两个方面来衡量:程序在多长的时间内能够完成(运行时间);程序需要多大的存储空间(占用空间)。 完成同样一个功能,可以由选择不同的指令来完成。它们的执行效率是有所区别的,在对程序进行优化时,应该选取那些占用空间少、执行速度快的指令。 1.选择执行速度快的指令-(1)寄存器清零 将寄存器清零,有以下几种指令: mov eax, 0 sub eax, eax xor eax, eax SUB、XOR指令执行速度比MOV指令快,而且所需程序空间少。MOV指令需5字节,而SUB、XOR指令只需2字节。B8 00 00 00 00 mov eax,0 0040127C 2B C0 sub eax,eax 0040127E 33 C0 xor eax,eax 所以,应该使用SUB、XOR指令。在清零时,XOR指令更常见一些。 (2)加减 要使EBX=EAX-30,简单的做法是: mov ebx, eax sub ebx, 30 而使用LEA指令完成同样功能的方法为: lea ebx, [eax-30] (3)乘除 求EAX=EAX/16,可以用除法指令: xor edx, edx mov ebx, 16 div ebx 然而,可以用SHR指令达到同样的效果: shr eax, 4 求EAX=EAX*8,可以用乘法指令: mov ebx, 8 mul eax 同样,用SHL指令的效果更好: shl eax, 3 求EAX=EBX*5,可以用乘法指令: mov eax, 5 mul ebx 可以使用LEA指令达到同样的效果: lea eax,[ebx+ebx*4] 2. 操作的转化 除法指令比乘法指令的速度慢。如果程序中的除法操作中,除数为一个常数,那么可以将除法转换为乘法来进行,以提高程序执行的速度。 以下分别是125÷25、424÷25、6553600÷10、655389999÷65538的例子。程序中使用乘法操作来替代除法,乘法得到的结果EDX,就是除法操作的商。 -运算过程 mov eax, 125 mov esi, 0A3D70A4H ; esi = (100000000H + 24) / 25 mul esi ; EDX = 5 mov eax, 424 mov esi, 0A3D70A4H ; esi = (100000000H + 24) / 25 mul esi ; EDX = 16 mov eax, 6553600 mov esi, 1999999AH ; esi = (100000000H + 9) / 10 mul esi ; EDX = 655360 mov eax, 655389999 mov esi, 0000FFFEH ; esi = (100000000H + 65537) / 65538 mul esi ; EDX = 10000 -数学原理 这里,设被除数为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 = e mod f, L = be+f 分两种情况: (1) f=0,即L能被b整除, M=(L+(b–1))÷b=L/b=e (2) 0fb,L不能被b整除, M=(L+(b–1))÷b=(L/b)+1=e+1 -数学原理 在第1种情况下: aM = a(L/b) = (aL/b) = ((bc+d)L/b) = ((bcL+dL)/b) = cL+(dL/b) 因为d是余数,所以db。故0 ≤ (dL/b) L。可知,a乘以M后,结果是64位数,高32位数就是c,即EDX。低32位数为dL / b。 -数学原理 在第2种情况下: aM = a(e+1) = (bc+d)(e+1) = bce+de+bc+d = c(be+f)-cf+de+bc+d = cL-

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档