VB embedding assembly

xiaoxiao2021-03-06  40

Automatic wrap [by the orphan code shader 1.0.1 Coloring] Sail Blog

1 I used to practice your handwritten code, take some fun. If you have something wrong, please advise!

2; ASM part

3.386

4 .Model flat, stdcall

5 Option Casemap: None

6

7.code

8 Start:

9; bubbling sorting. Only orderly sequentially

10 Dunksort Proc Uses Edx EDI EBX /

11 LPARRAY: DWORD, NLEN: DWORD, X1, X2

12 MOV EDI, LPARRAY; take the first ginseng

13 MOV ECX, NLEN; take the second ginseng

14 DEC ECX;

15; MOV DL, 1

16 LOPFA:

17; OR DL, DL

18; JZ EXIT

19; XOR DL, DL

20 push ecx; preservation of external cycles

21 xor EBX, EBX

22 LOPCH:

23 MOV EAX, [EDI EBX]

24 CMP EAX, [EDI EBX 4]

25 Jle Next

26 XCHG EAX, [EDI EBX 4]

27 MOV [EDI EBX], EAX

28; MOV DL, 1

29 Next:

30 Add EBX, 4

31 loop lopch

32 POP ECX; pop-ups

33 Loop LopFA

34 EXIT:

35 RET

36 Dunksort Endp

37 End Start

38

39 Version 5.00

40 Begin vb.form frsort

41 capen = "VB embedding assembly play"

42 ClientHeight = 5850

43 ClientLeft = 60

44 ClientTop = 450

45 ClientWidth = 10425

46 linktopic = "form1"

47 scaleheight = 5850

48 scalewidth = 10425

49 StartupPosition = 3 'Window Default

50 Begin Vb.TextBox Txtusetime

51 height = 285

52 left = 780

53 TabINDEX = 6

54 TOP = 5310

55 width = 1110

56 End

57 Begin vb.commandbutton cmdsortvb

58 caption = "VB bubble sort"

59 enabled = 0 'false60 height = 390

61 Left = 6045

62 TabINDEX = 4

63 TOP = 5265

64 width = 1140

65 end

66 Begin vb.commandbutton cmdsortasm

67 capen = "ASM bubble sort"

68 enabled = 0 'false

69 height = 390

70 left = 7395

71 TabINDEX = 3

72 TOP = 5265

73 width = 1140

74 END

75 Begin Vb.commandbutton CmdrndArray

76 caption = "random production"

77 height = 390

78 left = 4650

79 TabINDEX = 2

80 TOP = 5250

81 width = 1140

82 END

83 Begin Vb.TextBox TXTARRBOTTOM

84 height = 285

85 left = 4050

86 TabINDEX = 0

87 TOP = 5295

88 width = 465

89 END

90 Begin vb.label label2

91 AutoSize = -1 'True

92 CAPTION = "Time: n second"

93 height = 180

94 Left = 210

95 TabINDEX = 5

96 TOP = 5355

97 width = 1980

98 end

99 Begin vb.label label1

100 autosize = -1 'true

101 capen = "array subscript:"

102 height = 180103 Left = 3165

104 TabINDEX = 1

105 TOP = 5340

106 width = 900

107 END

108 END

109 Attribute VB_Name = "frms"

110 attribute vb_globalnamespace = false

111 Attribute VB_CREATABLE = FALSE

112 Attribute VB_PredecLaredId = TRUE

113 Attribute VB_EXPOSED = FALSE

114 Option Explicit

115 Private Declare Function QueryperFormanceCounter lib "kernel32" (LPPerFormanceCount As Large_integer) AS Long

116 Private Type Large_integer

117 LowPart As Long

118 HIGHPART AS Long

119 End Type

120 Private Declare Function CallasmProc LIB "User32" Alias ​​"CallWindowProca" _

121 (Byval LPasmfn &, Byval Var1 &, Byval Var2 &, Byval Var3 &, Byval Var4 &) AS Long

122

123 DIM SZASMDKFN (0 to 46) AS BYTE 'Compilation Byction Code

124 DIM Arrvb () As long, arrasmdk () As long 'to sort the array

125 DIM ARRBOTTOM As long 'array subscript

126

127 'randomly generates random array value

128 Private Sub CmdrndArray_Click ()

129 DIM I as Long

130 me.cls

131 Arrbottom = Val (TXTARRBOTTOM.TEXT)

132 IF Arrbottom <1 THEN EXIT SUB

133 Redim Arrvb (Arrbottom), Arrasmdk (Arrbottom)

134 for i = 0 TO Arrbottom

135 Arrvb (i) = rND * (Arrbottom 20)

136 Arrasmdk (i) = arrvb (i)

137 Next

138

139 PrintData Arrvb

140 cmdsortvb.enabled = true: cmdsortasm.enabled = true

141 End Sub

142

143 'Sort by embedding assembly

144 Private Sub Cmdsortasm_Click ()

145 DIM J AS Long, I As Long, TMP As Long, T1 As long146 T1 = GetTime

147 CallasmProc Varptr (szasmdkfn (0)), Varptr (Arrasmdk (0)), Arrbottom 1, 0, 0

148 txtusetime.text = gettime - T1

149

150 PrintData Arrasmdk

151 cmdsortasm.enabled = false

152 End Sub

153

154 'VB Sort

155 Private Sub Cmdsortvb_Click ()

156 DIM J AS Long, I As Long, TMP As Long, T1 As Long

157 T1 = GetTime

158 for i = 0 TO Arrbottom - 1

159 for j = 0 TO Arrbottom - i - 1

160 IF Arrvb (j)> Arrvb (J 1) THEN

161 TMP = Arrvb (j)

162 Arrvb (j) = arrvb (j 1): arrvb (j 1) = TMP

163 end if

164 Next

165 Next

166 txtusetime.text = gettime - T1

167

168 PrintData Arrvb

169 cmdsortvb.enabled = false

170 END SUB

171

172 Private Sub Form_Load ()

173 'assembly character code array assignment

174 szasmdkfn (0) = 85: szasmdkfn (1) = 139: szasmdkfn (2) = 236: szasmdkfn (3) = 82: szasmdkfn (4) = 87: szasmdkfn (5) = 83

175 szasmdkfn (6) = 139: szasmdkfn (7) = 125: szasmdkfn (8) = 8: szasmdkfn (9) = 139: szasmdkfn (10) = 77: szasmdkfn (11) = 12

176 szasmdkfn (12) = 73: szasmdkfn (13) = 81: szasmdkfn (14) = 51: szasmdkfn (15) = 219: szasmdkfn (16) = 139: szasmdkfn (17) = 4

177 szasmdkfn (18) = 59: szasmdkfn (19) = 59: szasmdkfn (20) = 68: szasmdkfn (21) = 59: szasmdkfn (22) = 4: szasmdkfn (23) = 126

178 szasmdkfn (24) = 7: szasmdkfn (25) = 135: szasmdkfn (26) = 68: szasmdkfn (27) = 59: szasmdkfn (28) = 4: szasmdkfn (29) = 137179 szasmdkfn (30) = 4: szasmdkfn (31) = 59: szasmdkfn (32) = 131: szasmdkfn (33) = 195: szasmdkfn (34) = 4: szasmdkfn (35) = 226

180 szasmdkfn (36) = 235: szasmdkfn (37) = 89: szasmdkfn (38) = 226: szasmdkfn (39) = 229: szasmdkfn (40) = 91: szasmdkfn (41) = 95

181 szasmdkfn (42) = 90: szasmdkfn (43) = 201: szasmdkfn (44) = 194: szasmdkfn (45) = 16: szasmdkfn (46) = 0

182 End Sub

183

184 'Print array value

185 Private Sub PrintData (Arr () AS Long)

186 DIM I as Long

187 me.cls

188 for i = 0 TO Arrbottom

189 Print Arr (i);

190 IF (i 1) MOD 20 = 0 THEN PRINT

191 Next

192 End Sub

193

194 'test usage time function

195 private function gettime () as long

196 DIM Li As Large_integer

197 QueryperformanceCounter Li

198 getTime = li.lowpart

199 End Function

200

转载请注明原文地址:https://www.9cbs.com/read-58575.html

New Post(0)