1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
.assembly extern mscorlib { }
.assembly extern System.Console
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
.ver 4:0:0:0
}
.assembly 'qsort'// as "qsort"
{
.permission reqmin ['mscorlib']System.Security.Permissions.SecurityPermissionAttribute ( "SkipVerification" = true )
}
.module 'qsort.exe'
// MVID: {D2333E3D-2CA6-4703-8D46-E41A46BDF801}
.namespace QSortTest
{
.class private auto ansi Sorter
extends [mscorlib]System.Object
{
.method private hidebysig static void Sort(native unsigned int[] A,
native unsigned int L, native unsigned int H) il managed
{
// Code size 178 (0xb2)
.maxstack 5
.locals (native unsigned int[] V_0,
native unsigned int V_1,
unsigned int32 V_2,
int32 V_3,
native int V_4)
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: bge IL_00b1
IL_0007: ldc.i4.s 64
IL_0009: newarr [mscorlib]System.IntPtr
IL_000e: stloc.0
IL_000f: ldc.i4.0
IL_0010: stloc.1
IL_0011: br IL_00ac
IL_0016: ldarg.1
IL_0017: ldc.i4.1
IL_0018: sub
IL_0019: stloc.2
IL_001a: ldarg.2
IL_001b: ldc.i4.1
IL_001c: add
IL_001d: stloc.3
IL_001e: ldarg.0
IL_001f: ldarg.1
IL_0020: ldarg.2
IL_0021: add
IL_0022: ldc.i4.2
IL_0023: div
IL_0024: ldelem.i
IL_0025: stloc.s V_4
IL_0027: br.s IL_0067
IL_0029: br.s IL_002b
IL_002b: ldarg.0
IL_002c: ldloc.3
IL_002d: ldc.i4.1
IL_002e: sub
IL_002f: dup
IL_0030: stloc.3
IL_0031: ldelem.i
IL_0032: ldloc.s V_4
IL_0034: bgt.s IL_002b
IL_0036: br.s IL_0038
IL_0038: ldarg.0
IL_0039: ldloc.2
IL_003a: ldc.i4.1
IL_003b: add
IL_003c: dup
IL_003d: stloc.2
IL_003e: ldelem.i
IL_003f: ldloc.s V_4
IL_0041: blt.s IL_0038
IL_0043: ldloc.2
IL_0044: ldloc.3
IL_0045: blt.s IL_0049
IL_0047: br.s IL_0069
IL_0049: ldarg.0
IL_004a: ldloc.2
IL_004b: ldarg.0
IL_004c: ldloc.2
IL_004d: ldelem.i
IL_004e: ldarg.0
IL_004f: ldloc.3
conv.i
IL_0050: ldelem.i
IL_0051: xor
IL_0052: stelem.i
IL_0053: ldarg.0
IL_0054: ldloc.3
IL_0055: ldarg.0
IL_0056: ldloc.2
IL_0057: ldelem.i
IL_0058: ldarg.0
IL_0059: ldloc.3
conv.u4
IL_005a: ldelem.i
conv.u4
IL_005b: xor
IL_005c: stelem.i
IL_005d: ldarg.0
IL_005e: ldloc.2
IL_005f: ldarg.0
IL_0060: ldloc.2
IL_0061: ldelem.i
IL_0062: ldarg.0
IL_0063: ldloc.3
IL_0064: ldelem.i
IL_0065: xor
IL_0066: stelem.i
IL_0067: br.s IL_0029
IL_0069: ldarg.1
IL_006a: ldloc.3
IL_006b: bge.s IL_007d
IL_006d: ldloc.0
IL_006e: ldloc.1
IL_006f: dup
IL_0070: ldc.i4.1
IL_0071: add
IL_0072: stloc.1
IL_0073: ldarg.1
IL_0074: stelem.i
IL_0075: ldloc.0
IL_0076: ldloc.1
IL_0077: dup
IL_0078: ldc.i4.1
IL_0079: add
IL_007a: stloc.1
IL_007b: ldloc.3
IL_007c: stelem.i
IL_007d: ldloc.3
IL_007e: ldc.i4.1
IL_007f: add
IL_0080: ldarg.2
IL_0081: bge.s IL_0095
IL_0083: ldloc.0
IL_0084: ldloc.1
IL_0085: dup
IL_0086: ldc.i4.1
IL_0087: add
IL_0088: stloc.1
IL_0089: ldloc.3
IL_008a: ldc.i4.1
IL_008b: add
IL_008c: stelem.i
IL_008d: ldloc.0
IL_008e: ldloc.1
IL_008f: dup
IL_0090: ldc.i4.1
IL_0091: add
IL_0092: stloc.1
IL_0093: ldarg.2
IL_0094: stelem.i
IL_0095: ldloc.1
IL_0096: brtrue.s IL_009a
IL_0098: br.s IL_00b1
IL_009a: ldloc.0
IL_009b: ldloc.1
IL_009c: ldc.i4.1
IL_009d: sub
IL_009e: dup
IL_009f: stloc.1
IL_00a0: ldelem.i
IL_00a1: starg.s H
IL_00a3: ldloc.0
IL_00a4: ldloc.1
IL_00a5: ldc.i4.1
IL_00a6: sub
IL_00a7: dup
IL_00a8: stloc.1
IL_00a9: ldelem.i
IL_00aa: starg.s L
IL_00ac: br IL_0016
IL_00b1: ret
} // end of method 'Sorter::Sort'
.method private hidebysig static int32 Main() il managed
{
.entrypoint
// Code size 134 (0x86)
.maxstack 4
.locals (native unsigned int V_0,
native unsigned int[] V_1,
native unsigned int V_2,
unsigned int32 V_3,
int32 V_4,
native unsigned int V_5)
IL_0000: ldc.i4 0x1f40
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: ldc.i4.1
IL_0008: add
IL_0009: newarr [mscorlib]System.IntPtr
IL_000e: stloc.1
IL_000f: ldloc.0
IL_0010: ldc.i4 0x7cf
IL_0015: mul
IL_0016: stloc.2
IL_0017: ldc.i4.1
IL_0018: stloc.3
IL_0019: br.s IL_0031
IL_001b: ldloc.1
IL_001c: ldloc.3
IL_001d: ldloc.2
IL_001e: ldc.i4.s 19
IL_0020: add.ovf
IL_0021: ldc.i4.s 17
IL_0023: mul.ovf
IL_0024: ldc.i4 0x7cf
IL_0029: rem
IL_002a: dup
IL_002b: stloc.2
IL_002c: stelem.i
IL_002d: ldloc.3
IL_002e: ldc.i4.1
IL_002f: add
IL_0030: stloc.3
IL_0031: ldloc.3
IL_0032: ldloc.0
IL_0033: ble.s IL_001b
IL_0035: ldloc.1
IL_0036: ldc.i4.1
IL_0037: ldloc.0
IL_0038: call void QSortTest.Sorter::Sort(native unsigned int[],
native unsigned int,
native unsigned int)
IL_003d: ldc.i4.2
IL_003e: stloc.s V_4
IL_0040: br.s IL_006f
IL_0042: ldloc.1
IL_0043: ldloc.s V_4
IL_0045: ldc.i4.1
IL_0046: sub
IL_0047: ldelem.i
IL_0048: ldloc.1
IL_0049: ldloc.s V_4
IL_004b: ldelem.i
IL_004c: ble.s IL_0069
IL_004e: ldstr "Test failed at index "
IL_0053: ldloca.s V_4
IL_0055: call instance class [mscorlib]System.String [mscorlib]System.IntPtr::ToString()
IL_005a: call class [mscorlib]System.String [mscorlib]System.String::Concat(class [mscorlib]System.String,
class [mscorlib]System.String)
IL_005f: call void [System.Console]System.Console::WriteLine(class [mscorlib]System.String)
IL_0064: ldc.i4.1
IL_0065: stloc.s V_5
IL_0067: br.s IL_0083
IL_0069: ldloc.s V_4
IL_006b: ldc.i4.1
IL_006c: add
IL_006d: stloc.s V_4
IL_006f: ldloc.s V_4
IL_0071: ldloc.0
IL_0072: ble.s IL_0042
IL_0074: ldstr "qsort test passed"
IL_0079: call void [System.Console]System.Console::WriteLine(class [mscorlib]System.String)
IL_007e: ldc.i4 0x64
IL_007f: stloc.s V_5
IL_0081: br.s IL_0083
IL_0083: ldloc.s V_5
IL_0085: ret
} // end of method 'Sorter::Main'
.method public hidebysig specialname rtspecialname
instance void .ctor() il managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method 'Sorter::.ctor'
} // end of class 'Sorter'
} // end of namespace 'QSortTest'
//*********** DISASSEMBLY COMPLETE ***********************
|