【原创】asminvb1.2.0.2可用版本,喜欢的下
本帖最后由 menglv 于 2015-5-9 16:57 编辑绝对原创可用!取消了80行汇编的限制!其它的限制不清楚,因为没有更多的实例。
经测试,支持 include、includelib 伪指令,库文件自己装个masm即可。
指针,算术,位移运算开发包部份示例代码
指针,算术,位移运算开发包部份示例代码因这个开发包提供的函数较多,考虑演示版的功能限制,在下面贴出几个简单的函数:
Option Explicit
'_asm
#If Not IS_RELEASE Then
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
#End If
Public Function UAdd(ByVal ValueA As Long, ByVal ValueB As Long) As Long
#If Not IS_RELEASE Then
Dim lX4 As Long
Dim lY4 As Long
Dim lX8 As Long
Dim lY8 As Long
Dim lResult As Long
lX8 = ValueA And &H80000000
lY8 = ValueB And &H80000000
lX4 = ValueA And &H40000000
lY4 = ValueB And &H40000000
lResult = (ValueA And &H3FFFFFFF) + (ValueB And &H3FFFFFFF)
If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If
UAdd = lResult
#Else
'_asm{overall}
'_asm mov eax,
'_asm add eax, ;同样,将 add 改成 sub 即成了无符号相减函数
'_asm ret 2*4
#End If
End Function
'/* 右移函数
Function Shr(ByVal Value As Long, ByVal Bit As Byte) As Long
#If Not IS_RELEASE Then
Shr = Value \ (2 ^ Bit) '可另看这一点代码,运行却是非常慢的啊
#Else
'_asm{overall}
'_asm mov eax,
'_asm mov cl, byte PTR
'_asm shr eax,cl
'_asm ret 2*4 ;另看这几行代码,时间却是上面的代码上百倍的速度
#End If
End Function
'/* 左移函数
Function Shl(ByVal Value As Long, ByVal Bit As Byte) As Long
#If Not IS_RELEASE Then
Shl = Value * (2 ^ Bit)'可另看这一点代码,运行却是非常慢的啊
#Else
'_asm{overall}
'_asm mov eax,
'_asm mov cl, byte PTR
'_asm shl eax,cl
'_asm ret 2*4 ;另看这几行代码,时间却是上面的代码上百倍的速度
#End If
End Function
'/* 四字节的内存操作函数(改变不同有参数声明,即可应用于不同类型的数据。)
Sub Assign(lPtr1 As Long, lPtr2 As Long)
#If Not IS_RELEASE Then
CopyMemory lPtr1, lPtr2, 4
#Else
'_asm{overall}
'_asm mov eax,dword ptr
'_asm mov edx,dword ptr
'_asm mov ecx,dword ptr
'_asm mov dword ptr ,ecx
'_asm ret 08H
#End If
End Sub'/* 四字节内存清零函数
Sub AssignZero(lPtr As Long)
#If Not IS_RELEASE Then
CopyMemory lPtr, 0&, 4
#Else
'_asm{overall}
'_asm mov eax,dword ptr
'_asm xor edx,edx
'_asm mov dword ptr ,edx
'_asm ret 4
#End If
End Sub
'/******************************************************************************
'/*还有其它函数如下:本示例代码就不一一列出,其它的下载指针及位操作开发包
'/*
'/*循环左移;循环右移;位测试,位范围值,低16位值函数,高16位值函数,etc.
'/*
'/******************************************************************************
'在frm代码中调用:
Function Shl(ByVal Value As Long, ByVal Bits As Long, ByVal dfjk As Long) As Long
'_asm{overall}
' _asm{
' mov eax, ;第一个参数为
' mov ecx, ;第二个参数为,以此类推
' Shl eax, cl
' mov,eax;shl为
' ret 5 * 4;(参数个数+2)*4
' }
End Function
'在bas模块中调用:
Function Shr(ByVal Value As Long, ByVal Bits As Long, ByVal dfjk As Long) As Long
'_asm{overall}
' _asm{
' mov eax, ;第一个参数为
' mov ecx, ;第二个参数为,以此类推
' Shr eax, cl
' ret 3 * 4;(参数个数)*4
' }
不过frm中的调用函数并不能直接返回到shl,这个也许asminvb的作者也不知道!
还有就是在frm中的调用会有很多垃圾的代码,所以并不提倡在frm代码中调用!
沙发,支持大师作品 给力的软件,谢谢分享 给力的软件,谢谢分享 没有完整的开发包吗 给力的软件,谢谢分享
页:
[1]