VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: littlekevin

还能优化吗?

[复制链接]
 楼主| 发表于 2009-2-10 08:11:01 | 显示全部楼层
原帖由 VBProFan 于 2009-2-9 12:42 发表
看了你们3页的讨论看得我好幸苦,为什么不用实验来检验一下呢?
毛主席教导我们:“实践是检验真理的唯一标准”。

.386
.model flat,stdcall
option casemap:none

include  windows.inc
includ ...


这个是不是还要一个资源文件?..我对窗口什么的一窍不通..

acme_pjz,今天给你加的时候他还说用完了...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-10 08:14:07 | 显示全部楼层
原帖由 PctGL 于 2009-2-9 21:08 发表
cmp ecx,13
jl ready
....
我的一个算法,还受人bs了... 我认为dd的最大表示长度是10位,就是10亿位,所以只该取10个数字(那个代码有点问题,应该是cmp 11,mov 10),因为算法是根据结果累加出来的,每个数字在不同 ...


mov eax,-1 / mov mem,eax 是2个uop
mov mem,-1 是3个..
回复 支持 反对

使用道具 举报

发表于 2009-2-10 12:26:09 | 显示全部楼层
微指令的多少不代表执行时间的长短
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-10 13:29:07 | 显示全部楼层
我知道这事..所以才问你哪个快..
回复 支持 反对

使用道具 举报

发表于 2009-2-10 14:09:59 | 显示全部楼层
从计算机原理的角度分析,内存再快也没有cpu内部的寄存器速度快,所以一般情况下只要操作非cpu 寄存器的情况下,速度会比不上直接操作寄存器,也就是说 mov reg,reg/imm 是最快的,mov mem/reg, reg/mem 的速度比不了 前面那个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-10 15:15:55 | 显示全部楼层
楼上你还是没理解我的意思

我是要mov mem,-1
  1. mov eax,-1
  2. mov mem,eax
复制代码
  1. mov mem,-1
复制代码


先把这个立即值放到寄存器再存到内存快还是直接把立即值存到内存快..

评分

参与人数 1人气 +1 收起 理由
PctGL + 1 一条指令的快,mov 操作器优化了,指令没 ...

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2009-2-10 15:20:31 | 显示全部楼层
这还用问啊? 写了让电脑运行然后计算一下速度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-10 16:59:13 | 显示全部楼层
请告诉我该不该展开循环....

  1. .386
  2. .model flat, stdcall
  3. option casemap :none

  4. .data
  5.     dwarray   dd    '8','7','9','4','1','5','2','3','6'
  6.     arrayend  label dword

  7. .code
  8. start:
  9.     mov   ebx,offset arrayend
  10.     mov   ecx,9
  11. ;save
  12.     push  dword ptr [ebx]
  13.     push  ebx
  14.     push  edx
  15.     push  ebp
  16.     jmp   insertionsort
  17. align 16
  18. aftersort:
  19. ;restore
  20.     pop   ebp
  21.     pop   edx
  22.     pop   ebx
  23.     pop   dword ptr [ebx]
  24.     ret

  25. align 16
  26.   ;ebx-pointer to array end
  27.   ;ecx-array length
  28.   ;aftersort-return address
  29.   ;destroys eax,ebx,ecx,edx,esi,edi,ebp,dword at array end
  30. insertionsort proc
  31.     db    0c7h,83h,00h,00h,00h,00h,0ffh,0ffh,0ffh,0ffh ;mov   dword ptr [ebx+0],-1
  32.     db    81h,0ebh,04h,00h,00h,00h ;sub ebx,4

  33.   @@1:
  34.     sub   ecx,1
  35.     nop
  36.     db    0fh,84h ;jz near aftersort
  37.     dd    aftersort-($+4)
  38.     mov   esi,ebx
  39.     sub   ebx,4
  40.     mov   eax,[ebx]
  41.    
  42.     mov   edx,[esi]
  43.     cmp   eax,edx
  44.     jbe   @@1
  45.     mov   [ebx],edx
  46.     nop
  47.     db    66h,0fh,1fh,44h,00h,00h ;nop6
  48.    
  49.   @@2:
  50.     mov   edx,[esi+4]
  51.     cmp   eax,edx
  52.     jbe   short @@3
  53.     mov   [esi],edx
  54.    
  55.     mov   edi,[esi+8]
  56.     add   esi,12
  57.     mov   ebp,[esi]
  58.     cmp   eax,edi
  59.     jbe   short @@4
  60.     mov   [esi-8],edi

  61.     cmp   eax,ebp
  62.     jbe   short @@5
  63.     mov   [esi-4],ebp

  64.     nop
  65.     jmp   @@2
  66.    
  67.     align 16
  68.   @@3:
  69.     mov   [esi],eax
  70.     nop
  71.     jmp   @@1
  72.    
  73.     align 16
  74.   @@4:
  75.     mov   [esi-8],eax
  76.     nop
  77.     jmp   @@1
  78.    
  79.     align 16
  80.   @@5:
  81.     mov   [esi-4],eax
  82.     nop
  83.     jmp   @@1
  84. endp

  85. end start
复制代码

[ 本帖最后由 littlekevin 于 2009-2-10 17:03 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-2-10 17:20:35 | 显示全部楼层
原帖由 littlekevin 于 2009-2-10 08:11 发表


这个是不是还要一个资源文件?..我对窗口什么的一窍不通..


不要,窗口是用 CreateWindowEx 创建的,不用对话框资源,真正的全裸编程。直接粘贴到 RadAsm 就可以运行了。
回复 支持 反对

使用道具 举报

发表于 2009-2-10 17:24:27 | 显示全部楼层
原帖由 littlekevin 于 2009-2-10 16:59 发表
请告诉我该不该展开循环....


我上面的代码已经给出了代码模板,要试验什么的速度快只要把自己的代码替换那段核心代码然后改一下循环初值就OK了。(如果你代码中用到 ecx 记得压栈保存^_^)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-3-22 04:17

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表