vivalite 发表于 2008-4-14 15:35:27

Inline ASM for VB6(VB6内联汇编)插件+测试程序下载

VB6的代码效率不高,想在VB6里用汇编做终极提速吗?
下载这个插件,立即满足您的愿望!

系统需求:
1. 系统上必须安装有VB6(目前尚不支持.NET)
2. 系统上必须安装MASM32 V9.0(请去http://www.masm32.com/masmdl.htm下载安装)

下面是INLINE ASM VB插件的下载地址:
点击此处下载 ourdev_251642.rar(文件大小:195K) (原文件名:inline vb.rar)

安装方法:
先解压缩,然后进入inline vb addin目录,用VB6打开VbInLineASM.vbp,如果有错误则可以忽略。在文件菜单里编译VbInLineASM.dll,这个文件的输出地址应该选在windows\system32里。

重新启动VB6,工具栏上会有一个小ASM的图标(没有的话打开插件菜单下的插件管理器人工添加),点击这个图标,在出现的窗口里点Change Settings,在最下方倒数第二行是MASM编译器的地址(默认是空的),点旁边的“...”按钮,找到MASM的编译器ml.exe确定即可(一般地址是c:\masm32\bin\ml.exe),完成后点上方的Exit Settings就可保存退出了。

以后在VB6里使用内联汇编用
'#ASM_START
'
'mov eax, 12345678    ;Put a number in EAX
'
'ret                  ; Return with result in EAX
'#ASM_END
这样的格式。

注意为了避免VB出错ASM代码是需要用'注释掉的,而且在程序全编译成EXE以后才能测试汇编语言的部分,否则汇编语言在VB环境下调试时是不起作用的。


下图为一个嵌入汇编的测试例程截屏。
运算任务是分别用内联汇编和VB方式做一千万次4*2^3运算,结果显而易见汇编比VB快了足足3.2647秒。

http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_251583.gif
(原文件名:masvb1.gif)

内联汇编做4*2^3的代码:

Public Function Power2ASM(ByVal Num As Long, ByVal Power As Long) As Long

'#ASM_START
'push ebp
'mov ebp, esp
'
'mov eax, ; Get first argument
'mov ecx, ; Get second argument
'rcl eax, cl   ;shl eax, cl   ; EAX = EAX * ( 2 to the power of CL )

'mov esp, ebp         ;MOV/POP is much faster
'pop ebp            ;on 486 and Pentium than Leave
'ret 8
'#ASM_END

End Function

hemjidn 发表于 2008-4-14 15:43:14

强是强但有多大用?
极易与极难搭配?

vivalite 发表于 2008-4-15 00:14:13

【1楼】 hemjidn
强是强但有多大用?
极易与极难搭配?
__________________________
主要是用来给VB提速用的。

vivalite 发表于 2008-4-15 00:58:21

有一个新VB6插件叫ThunderVB可以同时在VB6里内联编译ASM和C指令,我没用过但从截屏看这个插件甚至还在VB里提供动态C语言帮助提示,相当不错。

项目地址:http://sourceforge.net/projects/thundervb/
这个插件需要VC6和MASM32的支持。

http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_252182.gif
(原文件名:slideshow.gif)
页: [1]
查看完整版本: Inline ASM for VB6(VB6内联汇编)插件+测试程序下载