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