x86 アセンブリ命令ランキング ベスト 1000

x86 のよく使われる命令を調べてみました。調査対象は Windows の SysWOW64 ディレクトリに入っている 32bit モジュールです。(x86 版ではなく x64 版の一覧はこちらです。)

動作確認環境

  • Windows 11 Home 24H2
  • Visual Studio Community 2022 (Visual C++)

x86 のよく使われる命令

では早速ランキングです。ベスト 1000 と書きましたが、実際は 1041 個です(最下位タイのため順位としては 865 位まで)。長いです。

順位命令個数割合累積割合
1mov6318329020.0169%20.0169%
2push3841420912.1699%32.1867%
3int3751970311.8865%44.0732%
4add3434664310.8812%54.9544%
5call190049256.0209%60.9753%
6pop110852743.5119%64.4872%
7lea102775273.256%67.7432%
8je88113792.7915%70.5347%
9cmp80026982.5353%73.07%
10test79829092.529%75.599%
11jmp61241491.9402%77.5392%
12xor59388221.8815%79.4206%
13inc52630131.6674%81.088%
14and45651781.4463%82.5343%
15jne45399901.4383%83.9726%
16ret37467011.187%85.1595%
17adc37204421.1787%86.3382%
18sub36253381.1485%87.4867%
19or30505110.9664%88.4531%
20dec26853500.8507%89.3039%
21outs23489010.7441%90.048%
22jb20931800.6631%90.7112%
23imul17409250.5515%91.2627%
24ins12971920.411%91.6737%
25jae12651400.4008%92.0745%
26js12401760.3929%92.4674%
27popad11885710.3765%92.8439%
28sbb10880010.3447%93.1886%
29movs9913590.3141%93.5027%
30leave9782130.3099%93.8126%
31movzx9641600.3055%94.118%
32arpl9151040.2899%94.4079%
33jns8752560.2773%94.6852%
34nop8208650.2601%94.9453%
35jo7740270.2452%95.1905%
36jbe7244690.2295%95.42%
37xchg6166510.1954%95.6154%
38ja4805900.1523%95.7676%
39shr4752080.1505%95.9182%
40stos4567430.1447%96.0629%
41lock4314110.1367%96.1995%
42movss4180910.1325%96.332%
43shl4068790.1289%96.4609%
44jl3399680.1077%96.5686%
45jle3342140.1059%96.6745%
46sar3218740.102%96.7764%
47bound2755320.0873%96.8637%
48in2727520.0864%96.9501%
49pushad2315780.0734%97.0235%
50movaps2182930.0692%97.0927%
51neg2173430.0689%97.1615%
52jg2121470.0672%97.2287%
53out2071570.0656%97.2944%
54loopne2056500.0652%97.3595%
55movsd2008320.0636%97.4231%
56jge2008250.0636%97.4868%
57aas1990520.0631%97.5498%
58fld1844810.0584%97.6083%
59cdq1838670.0583%97.6665%
60movups1698190.0538%97.7203%
61rep1690900.0536%97.7739%
62ror1677760.0532%97.827%
63rol1667400.0528%97.8799%
64cmove1579770.05%97.9299%
65das1565060.0496%97.9795%
66cmovne1562390.0495%98.029%
67fstp1450590.046%98.0749%
68xorps1432280.0454%98.1203%
69jp1344140.0426%98.1629%
70jnp1228960.0389%98.2018%
71daa1203830.0381%98.24%
72lods1200950.038%98.278%
73cmps1198230.038%98.316%
74mulss1159100.0367%98.3527%
75scas1081900.0343%98.387%
76retf1048110.0332%98.4202%
77lahf963260.0305%98.4507%
78aaa952820.0302%98.4809%
79addss926040.0293%98.5102%
80jno912810.0289%98.5391%
81xadd902410.0286%98.5677%
82movsx889840.0282%98.5959%
83movq886450.0281%98.624%
84cwde867870.0275%98.6515%
85movd831750.0264%98.6779%
86movlpd825330.0261%98.704%
87iretd821350.026%98.73%
88rcl805050.0255%98.7555%
89setne804390.0255%98.781%
90clc792000.0251%98.8061%
91enter767000.0243%98.8304%
92cld740160.0234%98.8538%
93sete723250.0229%98.8768%
94pushfd718130.0228%98.8995%
95rcr714670.0226%98.9221%
96aamb709520.0225%98.9446%
97mul699480.0222%98.9668%
98hlt670160.0212%98.988%
99cmc664980.0211%99.0091%
100subss650830.0206%99.0297%
101popfd612950.0194%99.0491%
102sal592390.0188%99.0679%
103std581950.0184%99.0863%
104sahf575480.0182%99.1046%
105aadb575230.0182%99.1228%
106loop573890.0182%99.141%
107into572290.0181%99.1591%
108idiv571920.0181%99.1772%
109wait570140.0181%99.1953%
110les567780.018%99.2133%
111xlat558010.0177%99.2309%
112jecxz553040.0175%99.2485%
113fadd551300.0175%99.2659%
114loope546830.0173%99.2833%
115cli545300.0173%99.3005%
116not543870.0172%99.3178%
117sti532880.0169%99.3346%
118stc506030.016%99.3507%
119cmpxchg500370.0159%99.3665%
120fmul480110.0152%99.3817%
121div475350.0151%99.3968%
122lds436090.0138%99.4106%
123fild412730.0131%99.4237%
124addsd410730.013%99.4367%
125mulsd385170.0122%99.4489%
126cmovle379170.012%99.4609%
127xacquire343240.0109%99.4718%
128addps310330.0098%99.4816%
129mulps299230.0095%99.4911%
130hnt287300.0091%99.5002%
131sldt280810.0089%99.5091%
132comiss270000.0086%99.5176%
133fnstsw263380.0083%99.526%
134movdqa262130.0083%99.5343%
135fcomp261750.0083%99.5426%
136fiadd259660.0082%99.5508%
137comisd256060.0081%99.5589%
138cmovae252940.008%99.5669%
139subps248250.0079%99.5748%
140cvtdq2ps247610.0078%99.5826%
141repne247190.0078%99.5905%
142cmova243290.0077%99.5982%
143popa242940.0077%99.6059%
144fsub237040.0075%99.6134%
145paddw227630.0072%99.6206%
146cmovb224960.0071%99.6277%
147cvtdq2pd222110.007%99.6348%
148fxch221580.007%99.6418%
149fst213220.0068%99.6485%
150seto208840.0066%99.6552%
151fistp206620.0065%99.6617%
152fcom203310.0064%99.6681%
153cmovs202850.0064%99.6746%
154subsd201860.0064%99.681%
155cvtps2pd191990.0061%99.687%
156cmovns190570.006%99.6931%
157fisttp185180.0059%99.699%
158shrd181450.0057%99.7047%
159divss178350.0057%99.7104%
160fdiv178060.0056%99.716%
161cvtpd2ps174680.0055%99.7215%
162fdivr169650.0054%99.7269%
163cvttss2si161780.0051%99.732%
164cmovg157710.005%99.737%
165fsubr155870.0049%99.742%
166shufps137620.0044%99.7463%
166cmovl137620.0044%99.7507%
168punpcklbw131800.0042%99.7549%
169fimul124180.0039%99.7588%
170fidivr119660.0038%99.7626%
171divsd118360.0037%99.7663%
172faddp116650.0037%99.77%
173fisub114090.0036%99.7736%
174paddd108380.0034%99.7771%
175ucomiss104860.0033%99.7804%
176setg103830.0033%99.7837%
177psrldq100360.0032%99.7869%
178fldz95460.003%99.7899%
179bts95120.003%99.7929%
180psubw95110.003%99.7959%
181ficomp94670.003%99.7989%
182shld94620.003%99.8019%
183ficom94280.003%99.8049%
184cvttsd2si92120.0029%99.8078%
185punpcklwd91690.0029%99.8107%
186andps90640.0029%99.8136%
187fist90630.0029%99.8165%
188lfence88830.0028%99.8193%
189fnstcw88540.0028%99.8221%
190movapd86800.0027%99.8248%
191paddsw86250.0027%99.8276%
192cmovge86070.0027%99.8303%
193fldenv84510.0027%99.833%
194pxor84040.0027%99.8356%
195psraw83770.0027%99.8383%
196fldcw82830.0026%99.8409%
197movhps82160.0026%99.8435%
198cmovbe77900.0025%99.846%
199bswap75990.0024%99.8484%
200movdqu74940.0024%99.8508%
201fmulp74430.0024%99.8531%
202movlps70450.0022%99.8554%
203pand69530.0022%99.8576%
204fld169150.0022%99.8597%
205ht67100.0021%99.8619%
206ucomisd64040.002%99.8639%
207pshufd61990.002%99.8659%
208packuswb59850.0019%99.8678%
209fisubr59680.0019%99.8697%
210psrlq57330.0018%99.8715%
211cvtsd2ss57130.0018%99.8733%
212setb56630.0018%99.8751%
213pmaddwd56100.0018%99.8769%
214fidiv55750.0018%99.8786%
215fsubp55410.0018%99.8804%
216pmullw55320.0018%99.8821%
217psrlw52040.0016%99.8838%
218pmulhw49650.0016%99.8853%
219punpckhwd49350.0016%99.8869%
220xbegin48290.0015%99.8884%
221unpcklps48140.0015%99.89%
222por47090.0015%99.8915%
223psllw46740.0015%99.8929%
224psrad45440.0014%99.8944%
225xabort44010.0014%99.8958%
226seta42680.0014%99.8971%
227fchs42320.0013%99.8985%
228frstor42280.0013%99.8998%
229fbld41070.0013%99.9011%
230orps40740.0013%99.9024%
231fsubrp40010.0013%99.9037%
232maxss39630.0013%99.9049%
233cvtsi2sd39610.0013%99.9062%
234mulpd39210.0012%99.9074%
235punpckldq39170.0012%99.9087%
236bt38690.0012%99.9099%
237cpuid38660.0012%99.9111%
238btr38020.0012%99.9123%
239psllq37590.0012%99.9135%
240bsr36660.0012%99.9147%
241fnclex36480.0012%99.9158%
242psubsw35700.0011%99.917%
243bnd34680.0011%99.918%
244packssdw34240.0011%99.9191%
245fdivp33300.0011%99.9202%
246punpcklqdq33040.001%99.9212%
247vmovd32400.001%99.9223%
248cvtsi2ss31770.001%99.9233%
249minss30680.001%99.9242%
250paddusw30030.001%99.9252%
251cvtss2sd28780.0009%99.9261%
252fnstenv28590.0009%99.927%
253pslld28070.0009%99.9279%
254punpckhbw28050.0009%99.9288%
255punpckhqdq26370.0008%99.9296%
256pcmpgtw26230.0008%99.9305%
257vmovdqu26220.0008%99.9313%
258pextrw25640.0008%99.9321%
258fdivrp25640.0008%99.9329%
260setge25500.0008%99.9337%
261fbstp23940.0008%99.9345%
262stmxcsr23770.0008%99.9352%
263bsf23700.0008%99.936%
264psrld23540.0007%99.9367%
265fnsave23310.0007%99.9375%
266psubd23260.0007%99.9382%
267cmpxchg8b22530.0007%99.9389%
268fcomp322250.0007%99.9396%
269addpd21950.0007%99.9403%
270str21900.0007%99.941%
271movlhps21810.0007%99.9417%
272fabs21710.0007%99.9424%
273setl21020.0007%99.9431%
274punpckhdq20560.0007%99.9437%
275palignr20270.0006%99.9443%
276pcmpgtb20220.0006%99.945%
277psadbw20120.0006%99.9456%
278pinsrw20080.0006%99.9463%
279fucompp19930.0006%99.9469%
280pmovmskb19640.0006%99.9475%
281andpd19630.0006%99.9481%
282lldt19300.0006%99.9487%
283pavgb19290.0006%99.9494%
284fucom19020.0006%99.95%
285emms18240.0006%99.9505%
286fcomip18220.0006%99.9511%
287setns18140.0006%99.9517%
288lsl17980.0006%99.9523%
289movupd17810.0006%99.9528%
290ldmxcsr17800.0006%99.9534%
291setle17160.0005%99.9539%
292pcmpeqb16560.0005%99.9545%
293unpckhps16380.0005%99.955%
294fucomp16260.0005%99.9555%
295pandn16110.0005%99.956%
296clts15720.0005%99.9565%
297fstp815390.0005%99.957%
298paddb15330.0005%99.9575%
299vmovdqa15040.0005%99.9579%
300fcomi14900.0005%99.9584%
301movhlps14820.0005%99.9589%
302fcompp14790.0005%99.9594%
303sets14770.0005%99.9598%
304vpextrd14660.0005%99.9603%
305fcmovu14570.0005%99.9608%
306repe14470.0005%99.9612%
307vpinsrd14310.0005%99.9617%
308lar14140.0004%99.9621%
309xorpd13980.0004%99.9626%
309invd13980.0004%99.963%
311pshuflw13890.0004%99.9634%
312fucomip13870.0004%99.9639%
313pcmpeqw13800.0004%99.9643%
314fstp113710.0004%99.9647%
315psubb13500.0004%99.9652%
316rdtsc13290.0004%99.9656%
317fcmovnu13220.0004%99.966%
318jmpe12880.0004%99.9664%
319fstp912870.0004%99.9668%
320sgdt12800.0004%99.9672%
320psubusb12800.0004%99.9676%
322pcmpeqd12560.0004%99.968%
323verr12430.0004%99.9684%
324unpcklpd11910.0004%99.9688%
325maxsd11880.0004%99.9692%
326pshufhw11820.0004%99.9696%
327paddq11400.0004%99.9699%
328andnps11150.0004%99.9703%
329sysret10940.0003%99.9706%
330frndint10840.0003%99.971%
331vpaddw10550.0003%99.9713%
332syscall10480.0003%99.9716%
333fcomp510400.0003%99.972%
334pshufb10380.0003%99.9723%
335minsd10290.0003%99.9726%
336ffreep10270.0003%99.9729%
337fcom210260.0003%99.9733%
338fcmovne10240.0003%99.9736%
339fcmovnbe10210.0003%99.9739%
340setae10160.0003%99.9742%
341fcmove10120.0003%99.9746%
342lddqu10040.0003%99.9749%
343ltr10000.0003%99.9752%
344xgetbv9550.0003%99.9755%
345packsswb9440.0003%99.9758%
346femms9420.0003%99.9761%
347orpd9340.0003%99.9764%
348fcmovbe9250.0003%99.9767%
349pause9080.0003%99.977%
350vpaddd9030.0003%99.9773%
351lgdt8930.0003%99.9775%
352pmaxub8770.0003%99.9778%
353pminub8680.0003%99.9781%
354verw8610.0003%99.9784%
355pmaddubsw8530.0003%99.9786%
356vzeroupper8430.0003%99.9789%
357pshufw8420.0003%99.9792%
358prefetchnta8390.0003%99.9794%
359unpckhpd8340.0003%99.9797%
360vmovq8310.0003%99.98%
361aam8230.0003%99.9802%
362fucomi7930.0003%99.9805%
363sysexit7800.0002%99.9807%
364pslldq7760.0002%99.981%
365vbroadcastss7720.0002%99.9812%
366vpxor7450.0002%99.9814%
367fcmovb7390.0002%99.9817%
368fxch77090.0002%99.9819%
369ffree7070.0002%99.9821%
370rcpps7060.0002%99.9824%
370fcmovnb7060.0002%99.9826%
372movntq7040.0002%99.9828%
373wbinvd7000.0002%99.983%
374pmaxsw6950.0002%99.9832%
375vpcmpeqb6710.0002%99.9835%
376fxch46650.0002%99.9837%
377subpd6530.0002%99.9839%
378pcmpgtd6440.0002%99.9841%
379maxps6040.0002%99.9843%
379aad6040.0002%99.9845%
381fcos6000.0002%99.9847%
382paddusb5770.0002%99.9848%
383pminsw5550.0002%99.985%
384wrmsr5440.0002%99.9852%
385ud25320.0002%99.9854%
386minps5280.0002%99.9855%
387vpmaddwd5220.0002%99.9857%
388psubusw5200.0002%99.9858%
389vpshufd5080.0002%99.986%
390pclmulqdq5020.0002%99.9862%
391vpunpcklwd4830.0002%99.9863%
392vpor4650.0001%99.9865%
392setbe4650.0001%99.9866%
394sqrtsd4620.0001%99.9868%
395cbw4550.0001%99.9869%
396xrelease4520.0001%99.987%
397rsqrtps4490.0001%99.9872%
397pmovzxbw4490.0001%99.9873%
399vpsrld4390.0001%99.9875%
400cvtss2si4360.0001%99.9876%
401rorx4320.0001%99.9877%
402movntdq4270.0001%99.9879%
403pmuludq4260.0001%99.988%
404divps4250.0001%99.9882%
405vpmovmskb4230.0001%99.9883%
406vperm2i1284200.0001%99.9884%
406cvtps2pi4200.0001%99.9886%
408cvtpi2ps4180.0001%99.9887%
409sqrtps4160.0001%99.9888%
410vpunpckhwd4050.0001%99.9889%
411vpunpcklbw3960.0001%99.9891%
412sqrtss3790.0001%99.9892%
413aesenc3640.0001%99.9893%
414prefetcht13600.0001%99.9894%
414ftst3600.0001%99.9895%
416vcvtqq2pd3580.0001%99.9896%
417vcvtuqq2pd3570.0001%99.9898%
417vcvttpd2qq3570.0001%99.9899%
419vcvttps2qq3550.0001%99.99%
420vcvttss2usi3540.0001%99.9901%
420vcvttsd2usi3540.0001%99.9902%
422vcvttps2uqq3530.0001%99.9903%
422vcvttpd2uqq3530.0001%99.9904%
424vcvtuqq2ps3520.0001%99.9905%
424vcvtqq2ps3520.0001%99.9907%
426movq2dq3450.0001%99.9908%
427fscale3430.0001%99.9909%
428psubq3390.0001%99.991%
429pmulhuw3340.0001%99.9911%
430bndldx3300.0001%99.9912%
431setp3190.0001%99.9913%
432lss3180.0001%99.9914%
433vpunpckhbw3170.0001%99.9915%
434vpclmulqdq3120.0001%99.9916%
435vpcmpeqw3100.0001%99.9917%
436vpsrlw3080.0001%99.9918%
437cvtps2dq3070.0001%99.9919%
438fyl2x3010.0001%99.992%
439cmovnp2910.0001%99.9921%
440getsec2890.0001%99.9922%
441cmovp2840.0001%99.9923%
442movnti2750.0001%99.9923%
443pavgw2700.0001%99.9924%
443fdecstp2700.0001%99.9925%
445vmovups2670.0001%99.9926%
446prefetcht02660.0001%99.9927%
447vinsertf1282640.0001%99.9928%
447cmovo2640.0001%99.9929%
449vpmullw2600.0001%99.9929%
450fsqrt2570.0001%99.993%
451fninit2560.0001%99.9931%
452pcmpistri2530.0001%99.9932%
452bndstx2530.0001%99.9933%
454vpcmpeqd2510.0001%99.9933%
455cmovno2490.0001%99.9934%
456setnp2480.0001%99.9935%
456cvttps2dq2480.0001%99.9936%
458cwd2390.0001%99.9936%
459btc2380.0001%99.9937%
460pabsw2350.0001%99.9938%
461movntps2330.0001%99.9939%
462vpsrldq2290.0001%99.9939%
463tzcnt2280.0001%99.994%
464fsin2250.0001%99.9941%
465paddsb2230.0001%99.9942%
466fldlg22210.0001%99.9942%
467pusha2180.0001%99.9943%
467cvttps2pi2180.0001%99.9944%
469fxam2170.0001%99.9944%
470xbts2120.0001%99.9945%
471rsm2100.0001%99.9946%
472movdq2q2060.0001%99.9946%
472fldln22060.0001%99.9947%
474vpxord2040.0001%99.9948%
474vpand2040.0001%99.9948%
476cmpeqsd2030.0001%99.9949%
477vpackssdw2020.0001%99.995%
478rdpmc2000.0001%99.995%
479sysenter1960.0001%99.9951%
480vpackuswb1950.0001%99.9951%
480fprem1950.0001%99.9952%
482sfence1920.0001%99.9953%
483vmwrite1880.0001%99.9953%
484fldpi1870.0001%99.9954%
485rdmsr1860.0001%99.9954%
486vpsrad1840.0001%99.9955%
486vpermq1840.0001%99.9956%
486movhpd1840.0001%99.9956%
489vxorps1780.0001%99.9957%
489cmpltps1780.0001%99.9957%
491pblendvb1760.0001%99.9958%
491mpsadbw1760.0001%99.9958%
493feni1740.0001%99.9959%
494f2xm11730.0001%99.996%
495fpatan1690.0001%99.996%
496vpslldq1670.0001%99.9961%
497cvtsd2si1660.0001%99.9961%
498aesdec1630.0001%99.9962%
499prefetch1570%99.9962%
500aesenclast1560%99.9963%
501vmovaps1550%99.9963%
501pfadd1550%99.9964%
503vpsllw1530%99.9964%
503cmpps1530%99.9965%
505fprem11520%99.9965%
506psubsb1500%99.9966%
507sidt1480%99.9966%
508vpaddq1460%99.9966%
509vmread1440%99.9967%
510vmulps1430%99.9967%
510ibts1430%99.9968%
512iret1270%99.9968%
513setno1260%99.9969%
514vaddps1240%99.9969%
514fldl2e1240%99.9969%
516fxtract1230%99.997%
517fptan1190%99.997%
518vpsraw1180%99.9971%
518vpmulhw1180%99.9971%
520movmskps1150%99.9971%
520fnop1150%99.9972%
522lgs1140%99.9972%
523vpunpckldq1130%99.9972%
524pushf1120%99.9973%
525prefetchw1110%99.9973%
526vpsrlq1100%99.9973%
527shufpd1090%99.9974%
528pfsub1080%99.9974%
529prefetchwt11070%99.9974%
529fldl2t1070%99.9975%
531vmovntdq1030%99.9975%
531jcxz1030%99.9975%
533lidt1010%99.9976%
534cmpnlepd990%99.9976%
535vmovdqu32950%99.9976%
535fdisi950%99.9977%
537vpunpcklqdq930%99.9977%
538popf920%99.9977%
539vpunpckhdq900%99.9978%
539vpcmpeqq900%99.9978%
539fsincos900%99.9978%
542lfs890%99.9978%
543vpshufb880%99.9979%
543cldemote880%99.9979%
545vpsubw870%99.9979%
546popcnt860%99.998%
547vpmuludq850%99.998%
548vinserti128830%99.998%
549vmovss810%99.998%
549fincstp810%99.9981%
551aesdeclast800%99.9981%
552vpslld790%99.9981%
552cmpltsd790%99.9981%
554andnpd770%99.9982%
555pfmul750%99.9982%
556pmulld740%99.9982%
557vpmaskmovd700%99.9982%
557vpbroadcastw700%99.9982%
557fsetpm700%99.9983%
560vmovsd680%99.9983%
560mfence680%99.9983%
560cmpltpd680%99.9983%
563cmpnlesd670%99.9984%
563addsubps670%99.9984%
565sha256rnds2660%99.9984%
566cmpleps650%99.9984%
567vminps640%99.9984%
567lmsw640%99.9985%
569movshdup630%99.9985%
570movsldup620%99.9985%
571vpshuflw610%99.9985%
571vpminub610%99.9985%
573pextrd600%99.9986%
573fyl2xp1600%99.9986%
573fxsave600%99.9986%
576cmpeqps580%99.9986%
577vxorpd570%99.9986%
577vpinsrw570%99.9986%
579vpermd560%99.9987%
580vextracti128550%99.9987%
580vandpd550%99.9987%
580pi2fd550%99.9987%
583vpalignr530%99.9987%
584vpaddb510%99.9988%
584pminsd510%99.9988%
584crc32510%99.9988%
587vpunpckhqdq490%99.9988%
587pminud490%99.9988%
589vpshufhw480%99.9988%
590vpsllq470%99.9988%
591vpmovzxbw460%99.9989%
591pi2fw460%99.9989%
593pmaxud450%99.9989%
593fxrstor450%99.9989%
593divpd450%99.9989%
596vphaddw440%99.9989%
597vmovupd430%99.9989%
597pmaxsd430%99.999%
599vmovmskps420%99.999%
599phaddd420%99.999%
601prefetcht2410%99.999%
601cmpltss410%99.999%
603vprotd400%99.999%
603psignw400%99.999%
605vandps390%99.999%
605phaddw390%99.9991%
605aeskeygenassist390%99.9991%
608vpaddusb380%99.9991%
608smsw380%99.9991%
608pmaxsb380%99.9991%
611andn370%99.9991%
612vpsubsb360%99.9991%
612vextracti32x4360%99.9991%
614vpsubd350%99.9992%
614vmaxps350%99.9992%
614roundsd350%99.9992%
614pmovsxwd350%99.9992%
618vpacksswb340%99.9992%
618maskmovdqu340%99.9992%
620pminuw330%99.9992%
621vminss320%99.9992%
621tpause320%99.9992%
623vlddqu310%99.9992%
623vextractf128310%99.9993%
623vcvtps2dq310%99.9993%
623vcvtph2ps310%99.9993%
623pminsb310%99.9993%
623pcmpeqq310%99.9993%
629vperm2f128290%99.9993%
629pinsrd290%99.9993%
631vshufpd280%99.9993%
631vmulss280%99.9993%
631cmpneqps280%99.9993%
634vpackusdw270%99.9994%
635vshufps260%99.9994%
635vpandn260%99.9994%
635sha256msg1260%99.9994%
638sha256msg2250%99.9994%
638sha1rnds4250%99.9994%
638pinsrb250%99.9994%
641vmovdqa32240%99.9994%
641pmaxuw240%99.9994%
641cvttpd2dq240%99.9994%
644maxpd230%99.9994%
645sha1nexte220%99.9994%
645pcmpgtq220%99.9994%
645pabsd220%99.9995%
648xrstor210%99.9995%
648vsubps210%99.9995%
648vpmulhuw210%99.9995%
648minpd210%99.9995%
648maskmovq210%99.9995%
648invlpg210%99.9995%
654vpbroadcastq200%99.9995%
654movntdqa200%99.9995%
656vmovlpd190%99.9995%
657vminsd180%99.9995%
657vmaxss180%99.9995%
657vaddss180%99.9995%
660xsaves170%99.9995%
660vsqrtsd170%99.9995%
660vcvtdq2ps170%99.9995%
660sha1msg2170%99.9995%
660sha1msg1170%99.9996%
665vpsignw160%99.9996%
665vpsadbw160%99.9996%
665haddps160%99.9996%
668vsqrtps150%99.9996%
668vpextrw150%99.9996%
668vpaddusw150%99.9996%
668vfmadd213ps150%99.9996%
668pcmpestri150%99.9996%
673xsave140%99.9996%
674xsavec130%99.9996%
674vmovapd130%99.9996%
674vminpd130%99.9996%
674vdivps130%99.9996%
674vcvttps2dq130%99.9996%
674vaddsd130%99.9996%
674roundss130%99.9996%
674pmovzxwd130%99.9996%
674pblendw130%99.9996%
674cmpneqpd130%99.9996%
684vphaddd120%99.9996%
684vpblendw120%99.9996%
684vdivss120%99.9997%
684vcvtss2si120%99.9997%
684psignd120%99.9997%
689vpermps110%99.9997%
689vhsubpd110%99.9997%
689vcvttss2si110%99.9997%
689sqrtpd110%99.9997%
689rcpss110%99.9997%
689prefetchit0110%99.9997%
689phminposuw110%99.9997%
689cmpeqpd110%99.9997%
697roundps100%99.9997%
697roundpd100%99.9997%
697ptest100%99.9997%
697pmulhrsw100%99.9997%
697phaddsw100%99.9997%
697cmplesd100%99.9997%
703vzeroall90%99.9997%
703vpcmpgtw90%99.9997%
703vpaddsw90%99.9997%
703vmptrst90%99.9997%
703vmptrld90%99.9997%
703vmovntps90%99.9997%
703vcvtsi2ss90%99.9997%
703vcmppd90%99.9997%
703vaddsubps90%99.9997%
703lzcnt90%99.9997%
703clflush90%99.9997%
714xsaveopt80%99.9997%
714vunpcklps80%99.9997%
714vpmovzxwd80%99.9997%
714vpmovzxbd80%99.9997%
714vpblendvb80%99.9997%
714vpabsw80%99.9998%
714vcvttsd2si80%99.9998%
714vcvtpd2dq80%99.9998%
714vcmpps80%99.9998%
714tlbsync80%99.9998%
714movmskpd80%99.9998%
714cvtpd2dq80%99.9998%
714cmpnless80%99.9998%
727vunpckhps70%99.9998%
727vpsrlvd70%99.9998%
727vpminsd70%99.9998%
727vpmaxsd70%99.9998%
727vpcmpgtb70%99.9998%
727vmovddup70%99.9998%
727vhaddps70%99.9998%
727vdivsd70%99.9998%
727pmuldq70%99.9998%
727packusdw70%99.9998%
727kmovw70%99.9998%
727aesimc70%99.9998%
739vsqrtss60%99.9998%
739vpsubb60%99.9998%
739vpminsw60%99.9998%
739vpmaxub60%99.9998%
739vpmaxsw60%99.9998%
739vpermw60%99.9998%
739vpcmpgtd60%99.9998%
739vpbroadcastd60%99.9998%
739vmovsldup60%99.9998%
739vmovdqu1660%99.9998%
739vmaskmovps60%99.9998%
739vcvtpd2ps60%99.9998%
739vandnps60%99.9998%
739rdtscp60%99.9998%
739prefetchit160%99.9998%
739pfpnacc60%99.9998%
739mwaitx60%99.9998%
739monitorx60%99.9998%
757xrstors50%99.9998%
757vpsubusw50%99.9998%
757vpsubusb50%99.9998%
757vpavgb50%99.9998%
757vpandd50%99.9998%
757vmovshdup50%99.9998%
757vmovdqu850%99.9998%
757vcvtsd2ss50%99.9998%
757vcvtps2ph50%99.9998%
757vaddsubpd50%99.9998%
757rdseed50%99.9998%
757psignb50%99.9998%
757pmovzxbd50%99.9999%
757pfcmpgt50%99.9999%
757pfcmpge50%99.9999%
757pabsb50%99.9999%
773vunpcklpd40%99.9999%
773vsubss40%99.9999%
773vsubpd40%99.9999%
773vrsqrtss40%99.9999%
773vrsqrtps40%99.9999%
773vpmulld40%99.9999%
773vpmaxuw40%99.9999%
773vpgatherdd40%99.9999%
773vpermb40%99.9999%
773vorps40%99.9999%
773vmovlps40%99.9999%
773vhaddpd40%99.9999%
773vfmadd213sd40%99.9999%
773vfmadd132sd40%99.9999%
773vcvttpd2dq40%99.9999%
773vcvtss2sd40%99.9999%
773vcvtsd2si40%99.9999%
773vcvtps2pd40%99.9999%
773vcmpss40%99.9999%
773vcmpsd40%99.9999%
773stac40%99.9999%
773pfsubr40%99.9999%
773pfcmpeq40%99.9999%
773pf2iw40%99.9999%
773kunpckdq40%99.9999%
773kmovb40%99.9999%
773cmpnltps40%99.9999%
773cmpnleps40%99.9999%
773cmplepd40%99.9999%
773bextr40%99.9999%
803vunpckhpd30%99.9999%
803vrcpps30%99.9999%
803vpsubsw30%99.9999%
803vpsubq30%99.9999%
803vpmaskmovq30%99.9999%
803vphminposuw30%99.9999%
803vpaddsb30%99.9999%
803vorpd30%99.9999%
803vmulpd30%99.9999%
803vmovntpd30%99.9999%
803vmovhps30%99.9999%
803vmaxsd30%99.9999%
803vmaxpd30%99.9999%
803vfmsub213ps30%99.9999%
803vfmadd213ss30%99.9999%
803vcvtsi2sd30%99.9999%
803vcvtneeph2ps30%99.9999%
803vcvtdq2pd30%99.9999%
803vcomisd30%99.9999%
803vandnpd30%99.9999%
803vaddpd30%99.9999%
803umwait30%99.9999%
803umonitor30%99.9999%
803stgi30%99.9999%
803rsqrtss30%99.9999%
803rdrand30%99.9999%
803pswapd30%99.9999%
803pmulhrw30%99.9999%
803pmovsxdq30%99.9999%
803kxnorb30%99.9999%
803kmovd30%99.9999%
803kandw30%99.9999%
803invlpgb30%99.9999%
803enclu30%99.9999%
803blendvps30%99.9999%
838wbnoinvd20%99.9999%
838vucomiss20%99.9999%
838vsubsd20%99.9999%
838vrcpss20%99.9999%
838vrangeps20%99.9999%
838vpsllvd20%99.9999%
838vpord20%99.9999%
838vpmuldq20%99.9999%
838vpcomq20%99.9999%
838vpbroadcastb20%99.9999%
838vmulsh20%99.9999%
838vmulsd20%99.9999%
838vhsubps20%99.9999%
838vdivpd20%99.9999%
838vcomiss20%99.9999%
838vcmpeqps20%99.9999%
838vblendps20%99.9999%
838phsubw20%99.9999%
838phsubsw20%99.9999%
838phsubd20%99.9999%
838pf2id20%99.9999%
838hsubpd20%99.9999%
838cmpunordps20%99.9999%
838cmpnltss20%99.9999%
838cmpnltsd20%99.9999%
838cmpnltpd20%99.9999%
838cmpless20%99.9999%
865wrssd10%99.9999%
865wrpkru10%99.9999%
865vucomisd10%99.9999%
865vpsrlvq10%99.9999%
865vpsravd10%99.9999%
865vpsllvq10%99.9999%
865vpshrdd10%99.9999%
865vprotb10%99.9999%
865vpexpandq10%99.9999%
865vpermilps10%99.9999%
865vpermilpd10%99.9999%
865vpermi2ps10%99.9999%
865vpdpwssd10%99.9999%
865vpcmpd10%99.9999%
865vpavgw10%99.9999%
865vpabsb10%99.9999%
865vmxoff10%99.9999%
865vmovntdqa10%99.9999%
865vmovhpd10%99.9999%
865vmcpuid10%100%
865vmcall10%100%
865vfnmsub213ss10%100%
865vfnmsub213sd10%100%
865vfnmsub213ps10%100%
865vfnmsub213pd10%100%
865vfnmaddpd10%100%
865vfnmadd213ss10%100%
865vfnmadd213sd10%100%
865vfnmadd213ps10%100%
865vfnmadd213pd10%100%
865vfnmadd132ps10%100%
865vfmsubadd231ps10%100%
865vfmsubadd231ph10%100%
865vfmsubadd213ps10%100%
865vfmsubadd213pd10%100%
865vfmsub231ps10%100%
865vfmsub213ss10%100%
865vfmsub213sh10%100%
865vfmsub213sd10%100%
865vfmsub213pd10%100%
865vfmsub132ps10%100%
865vfmsub132pd10%100%
865vfmaddsubpd10%100%
865vfmaddsub213ps10%100%
865vfmaddsub213pd10%100%
865vfmaddsd10%100%
865vfmadd231sd10%100%
865vfmadd213pd10%100%
865vfmadd132ss10%100%
865vex10%100%
865vcvttph2dq10%100%
865vcvtss2sh10%100%
865vcvtph2uw10%100%
865vcmpunord_sss10%100%
865vcmpunord_ssd10%100%
865vcmpunord_sps10%100%
865vcmpunord_spd10%100%
865vcmptruess10%100%
865vcmptruesd10%100%
865vcmptrueps10%100%
865vcmptruepd10%100%
865vcmptrue_usss10%100%
865vcmptrue_ussd10%100%
865vcmptrue_usps10%100%
865vcmptrue_uspd10%100%
865vcmpord_sss10%100%
865vcmpord_ssd10%100%
865vcmpord_sps10%100%
865vcmpord_spd10%100%
865vcmpnlt_uqss10%100%
865vcmpnlt_uqsd10%100%
865vcmpnlt_uqps10%100%
865vcmpnlt_uqpd10%100%
865vcmpnle_uqss10%100%
865vcmpnle_uqsd10%100%
865vcmpnle_uqps10%100%
865vcmpnle_uqpd10%100%
865vcmpngt_uqss10%100%
865vcmpngt_uqsd10%100%
865vcmpngt_uqps10%100%
865vcmpngt_uqpd10%100%
865vcmpnge_uqss10%100%
865vcmpnge_uqsd10%100%
865vcmpnge_uqps10%100%
865vcmpnge_uqpd10%100%
865vcmpneq_usss10%100%
865vcmpneq_ussd10%100%
865vcmpneq_usps10%100%
865vcmpneq_uspd10%100%
865vcmpneq_osss10%100%
865vcmpneq_ossd10%100%
865vcmpneq_osps10%100%
865vcmpneq_ospd10%100%
865vcmpneq_oqss10%100%
865vcmpneq_oqsd10%100%
865vcmpneq_oqps10%100%
865vcmpneq_oqpd10%100%
865vcmplt_oqss10%100%
865vcmplt_oqsd10%100%
865vcmplt_oqps10%100%
865vcmplt_oqpd10%100%
865vcmple_oqss10%100%
865vcmple_oqsd10%100%
865vcmple_oqps10%100%
865vcmple_oqpd10%100%
865vcmpgt_oqss10%100%
865vcmpgt_oqsd10%100%
865vcmpgt_oqps10%100%
865vcmpgt_oqpd10%100%
865vcmpge_oqss10%100%
865vcmpge_oqsd10%100%
865vcmpge_oqps10%100%
865vcmpge_oqpd10%100%
865vcmpfalsess10%100%
865vcmpfalsesd10%100%
865vcmpfalseps10%100%
865vcmpfalsepd10%100%
865vcmpfalse_osss10%100%
865vcmpfalse_ossd10%100%
865vcmpfalse_osps10%100%
865vcmpfalse_ospd10%100%
865vcmpeq_usss10%100%
865vcmpeq_ussd10%100%
865vcmpeq_usps10%100%
865vcmpeq_uspd10%100%
865vcmpeq_uqss10%100%
865vcmpeq_uqsd10%100%
865vcmpeq_uqps10%100%
865vcmpeq_uqpd10%100%
865vcmpeq_osss10%100%
865vcmpeq_ossd10%100%
865vcmpeq_osps10%100%
865vcmpeq_ospd10%100%
865pmovzxwq10%100%
865pmovzxdq10%100%
865pmovzxbq10%100%
865pmovsxwq10%100%
865pmovsxbw10%100%
865pmovsxbq10%100%
865pmovsxbd10%100%
865pfrsqrt10%100%
865pfrcpit110%100%
865pfmin10%100%
865pext10%100%
865pdep10%100%
865movntpd10%100%
865movddup10%100%
865kxorw10%100%
865kunpckwd10%100%
865kunpckbw10%100%
865ktestw10%100%
865knotw10%100%
865kandnb10%100%
865kaddw10%100%
865hsubps10%100%
865haddpd10%100%
865enclv10%100%
865cvttpd2pi10%100%
865cvtpi2pd10%100%
865cmpzxadd10%100%
865cmpunordss10%100%
865cmpunordsd10%100%
865cmpunordpd10%100%
865cmpordss10%100%
865cmpordsd10%100%
865cmpordps10%100%
865cmpordpd10%100%
865cmpneqss10%100%
865cmpneqsd10%100%
865cmpeqss10%100%
865clgi10%100%
865bzhi10%100%
865blsr10%100%
865blsmsk10%100%
865blsi10%100%
865blendvpd10%100%
865addsubpd10%100%

ランキングについてのコメント

1 位はさすがの mov 命令です。これだけで約 2 割を占めています。
x86 の mov 命令は複雑なアドレッシングモードを備えており、利便性が高いのも、数が多い理由でしょう。たとえば次の命令は、esp レジスタの値に rcx レジスタの値を 4 倍した値を足してさらに 430h を足した値をアドレスとして、メモリ上のそのアドレスから 4 バイト分を引っ張ってきて esi レジスタに格納します。

mov esi,dword ptr [esp+ecx*4+430h]

2 位は push 命令です。関数の入り口でレジスタを退避したり、関数の呼び出し時に引数を積んだりと多用される命令なので、これも納得です。以下、push の使用例です。

  6B810490: 8B FF              mov         edi,edi
  6B810492: 55                 push        ebp
  6B810493: 8B EC              mov         ebp,esp
  6B810495: 6A 00              push        0
  6B810497: FF 75 18           push        dword ptr [ebp+18h]
  6B81049A: FF 75 14           push        dword ptr [ebp+14h]
  6B81049D: FF 75 10           push        dword ptr [ebp+10h]
  6B8104A0: FF 75 0C           push        dword ptr [ebp+0Ch]
  6B8104A3: FF 75 08           push        dword ptr [ebp+8]
  6B8104A6: E8 15 0F 00 00     call        6B8113C0
  6B8104AB: 5D                 pop         ebp
  6B8104AC: C2 14 00           ret         14h

3 位の int については注意が必要です。実際に使われている箇所を見るとほとんどが「int 3」(CCh, DebugBreak) で、関数と関数の間の埋め草に使われているだけです。例を挙げます。

  72F34B32: 83 C4 0C           add         esp,0Ch
  72F34B35: 5D                 pop         ebp
  72F34B36: C3                 ret
  72F34B37: CC                 int         3
  72F34B38: CC                 int         3
  72F34B39: CC                 int         3
  72F34B3A: CC                 int         3
  72F34B3B: CC                 int         3
  72F34B3C: CC                 int         3
  72F34B3D: CC                 int         3
  72F34B3E: CC                 int         3
  72F34B3F: CC                 int         3
  72F34B40: 8B FF              mov         edi,edi
  72F34B42: 55                 push        ebp
  72F34B43: 8B EC              mov         ebp,esp
  72F34B45: 6A 20              push        20h
  72F34B47: FF 75 10           push        dword ptr [ebp+10h]
  72F34B4A: FF 75 0C           push        dword ptr [ebp+0Ch]
  72F34B4D: E8 1B A9 F7 FF     call        72EAF46D
  72F34B52: 83 C4 0C           add         esp,0Ch
  72F34B55: 5D                 pop         ebp
  72F34B56: C3                 ret
  72F34B57: CC                 int         3
  72F34B58: CC                 int         3
  72F34B59: CC                 int         3
  72F34B5A: CC                 int         3
  72F34B5B: CC                 int         3
  72F34B5C: CC                 int         3
  72F34B5D: 8B FF              mov         edi,edi
  72F34B5F: 55                 push        ebp
  72F34B60: 8B EC              mov         ebp,esp

ret から次の関数の先頭までが int 3 で埋められています。この部分は基本的に実行されないので、特別扱いしても、というか除外してもよかったかもしれません。

4 位以降は add, call, pop, lea, je, cmp, test, jmp, …… という馴染みのある命令が続き、21 位までで 90%、35 位までで 95%、99 位までで 99% を占めています。

後ろのほうに行くと、fyl2xp1 だとか phminposuw だとか何をするのか見当も付かない命令があります。とにかく命令が多すぎます。

ちなみに集計した中で一番長いオペコードは以下でした。

aeskeygenassist

集計方法について

集計方法について書き留めておきます。

Windows の SysWOW64 ディレクトリには 64bit のモジュールが紛れ込んでいるので、まず、それらを除外した 32bit モジュールのリストを作りました。

C:\Windows\SysWOW64> for %a in (*.dll *.exe) do ((dumpbin /headers %a | find "machine (x86)" > nul) & if NOT ERRORLEVEL 1 echo %a) >> c:\tmp\list32bit.txt

対象のモジュールは 2622 個でした。

C:\Windows\SysWOW64> type c:\tmp\list32bit.txt
......
advapi32.dll
advapi32res.dll
advpack.dll
aeevts.dll
aepic.dll
agentactivationruntime.dll
agentactivationruntimewindows.dll
ahadmin.dll
amsi.dll
amstream.dll
......

リスト内の全モジュールを、ひとつのファイルに逆アセンブルします。

C:\Windows\SysWOW64> for /F %a in (c:\tmp\list32bit.txt) do dumpbin /nologo /disasm %a >> c:\tmp\disasm32bit.txt

約 17GB、約 3.2 億行の巨大なファイルが生成されました。

C:\Windows\SysWOW64> type c:\tmp\disasm32bit.txt
......
  6B818950: 8B FF              mov         edi,edi
  6B818952: 55                 push        ebp
  6B818953: 8B EC              mov         ebp,esp
  6B818955: 83 EC 14           sub         esp,14h
  6B818958: A1 40 01 8B 6B     mov         eax,dword ptr ds:[6B8B0140h]
  6B81895D: 33 C5              xor         eax,ebp
  6B81895F: 89 45 FC           mov         dword ptr [ebp-4],eax
  6B818962: 56                 push        esi
......

ただし、時折、本来コードではない場所が逆アセンブルされることがあるようでした。例を示します。

  10002013: 00 38              add         byte ptr [eax],bh
  10002015: 10 07              adc         byte ptr [edi],al
  10002017: 00 09              add         byte ptr [ecx],cl
  10002019: 00 00              add         byte ptr [eax],al
  1000201B: 00 00              add         byte ptr [eax],al
  1000201D: 00 00              add         byte ptr [eax],al

とはいえすべてを目視でチェックするわけにもいかず、そのまま受け入れた点、ご了承ください。

さて、ここからアセンブリ言語のオペコードの部分のみを抜き出すのですが、「repe stos」のようなプレフィックスの付いた命令や、「repe lock push」のようなプレフィックスが 2 個付いた命令もあり、スクリプトでの処理は難しそうでした。

  1000F1F5: F3 AA              rep stos    byte ptr es:[edi]
  10010A65: F0 F3 0E           repe lock push cs

そこで、各行について、プレフィックス(lock, rep, repe, repne, repz, repnz, xacquire, xrelease, vex, evex, bnd, ht, hnt)以外に達するまで単語を抜き出す C 言語のプログラム filter32bit.exe を作りました。
これを実行します。

C:\tmp> filter32bit.exe disasm32bit.txt > opcode32bit.txt

5 分ほどでオペコード(プレフィックスを含む)が抜き出されました。

C:\tmp> type opcode32bit.txt
......
mov
push
mov
lea
cmp
jb
mov
cmp
mov
sbb
......

最後に、オペコード(プレフィックスを含む)ごとの使用回数を集計します。WSL (Windows Subsystem for Linux) に入って sort と uniq コマンドを利用しました。

C:\tmp> wsl.exe
***:/mnt/c/tmp$ sort opcode32bit.txt | uniq -c | sort -nr > opcode32bit_rank.txt

集計結果です。

C:\tmp> type opcode32bit_rank.txt
63183290 mov
38414209 push
37519703 int
34346643 add
19004925 call
11085274 pop
10277527 lea
8811379 je
8002698 cmp
7982909 test
......

この集計結果を元に、Excel で順位 (RANK.EQ)、割合、累積割合を計算しました。

参考文献

[1] Intel「Intel(R) 64 and IA-32 Architectures Software Developer’s Manual」, 2024