7,789
社区成员
发帖
与我相关
我的任务
分享
(具体不清楚,没看到过关于“流水管线”中各种机器指令所需耗时的资料)。

Option Explicit
Private Sub Command1_Click()
Dim t As Double
Dim i As Long
Dim v As Long
Dim n As Long
v = Val(Text1.Text)
n = 10000 * Val(Text2.Text)
t = Timer()
For i = 1& To n
n = LongSHL(v, 15)
Next
t = Timer() - t
Me.Cls
Me.Print "左移位操作: 15位"
Me.Print "运算结果:" & Hex$(n)
Me.Print "运算次数:" & (i - 1&)
Me.Print "消耗时间(ms):" & Int(1000 * t)
End Sub
Private Sub Command2_Click()
Dim t As Double
Dim i As Long
Dim v As Long
Dim n As Long
v = Val(Text1.Text)
n = 10000 * Val(Text2.Text)
t = Timer()
For i = 1& To n
n = LongLShift(v, 15)
Next
t = Timer() - t
Me.Cls
Me.Print "左移位操作: 15位"
Me.Print "运算结果:" & Hex$(n)
Me.Print "运算次数:" & (i - 1&)
Me.Print "消耗时间(ms):" & Int(1000 * t)
End Sub
Private Sub Command3_Click()
Dim t As Double
Dim i As Long
Dim v As Long
Dim n As Long
v = Val(Text1.Text)
n = 10000 * Val(Text2.Text)
t = Timer()
For i = 1& To n
n = LongSHR(v, 15)
Next
t = Timer() - t
Me.Cls
Me.Print "右移位操作: 15位"
Me.Print "运算结果:" & Hex$(n)
Me.Print "运算次数:" & (i - 1&)
Me.Print "消耗时间(ms):" & Int(1000 * t)
End Sub
Private Sub Command4_Click()
Dim t As Double
Dim i As Long
Dim v As Long
Dim n As Long
v = Val(Text1.Text)
n = 10000 * Val(Text2.Text)
t = Timer()
For i = 1& To n
n = LongRShiftLG(v, 15)
Next
t = Timer() - t
Me.Cls
Me.Print "右移位操作: 15位"
Me.Print "运算结果:" & Hex$(n)
Me.Print "运算次数:" & (i - 1&)
Me.Print "消耗时间(ms):" & Int(1000 * t)
End Sub
Private Sub Form_Load()
Call InitASM
Text1.Text = "&H4567ABCD"
Text2.Text = "500"
AutoRedraw = True
End Sub


[/quote]
那你是管理岗位?或者教学的?[/quote]
都不是,我只是对这方面有兴趣,自己学了一下编程而已。

[/quote]
那你是管理岗位?或者教学的?
[/quote]
vb使用成本很高啊,你这大牛,如果站队到了c体制内,整个互联网上的资源都可以利用,用vb总要突破各种限制,精力都放在这上面了。

[/quote]
vb使用成本很高啊,你这大牛,如果站队到了c体制内,整个互联网上的资源都可以利用,用vb总要突破各种限制,精力都放在这上面了。
[/quote]
原来你是说这个“成本”啊。
确实,在某些时候,是得“想办法突破一些限制”。但是封装好之后,也是一劳永逸的事情。
不过,有了“应用经验”,类似的使用就算“轻车熟路”了,
就比如最近研究的某游戏数据的解密算法,
它这个要用到“32位无符号整数”的加法和乘法,
但VB6中没有无符号整数,并且对“任意两个32位数”进行运算时,都可能面临“溢出”问题。
如果完全凭VB6的“自身的基本语句代码”来完成这种加法或乘法运算,
会遇到比较麻烦的“处理逻辑”,相应的运行效率也变得很低了。
有了之前“移位操作接口”做轻量COM对象的经验,这回我同样用轻量COM对象来处理,
代码简洁、高效, 实现起来也 So easy . . . . . . .

另外你看看我在24楼的回复:
我用“机器指令注入”方式,可以比“内联汇编代码 + CallWindowProc”快70几、80倍。
只是这个方法不能在IDE中使用,必须编译后才有效。
也有点担心“系统原因”造成注入失败。因此不会轻易用这个。
另外一个就是“轻量级COM对象”实现的了,比“内联汇编代码 + CallWindowProc”快60倍左右,
但是这个方法在IDE和编译后都可以使用,平时我也就是用的这种方法。
这种方法的速度,每次移位调用比“汇编语言代码”多执行三、四条指令而已,可以说速度够快的了。



不过这个帖子没什么推荐价值了,本来是计划写个“系列”的,
但实在没什么人气,可能很大家都不在意这些东西,
后面的我也没兴趣写了。


