Author: | Wojciech Muła |
---|---|
Addded on: | 2014-01-01 |
Few years ago I counted instructions from many Linux binaries — 2014 is a good year to repeated this experiment and see that nothing has changed.
I use 32-bit Debian, my installation has been updated few months ago. All files from /usr/bin and all *.so files from /usr/lib was disassembled with objdump (5050 files were processed). Instructions were grouped simply by mnemonic name. Taking into account all addressing and encoding modes would be overkill. I've published script that does the job.
Short summary:
Lets look at top 15 rows from detailed results, i.e. instruction with frequency grater than 1%:
Very interesting observation is that conditions are mostly based on je/jne, i.e. jump if zero/jump if not zero.
The first FPU instruction appears at 28-th position. The first integer SSE appears at 167-th position. And the first SSE instruction operating on packed floats appear at 315-th position.
Whole table as txt file.
instruction | count | % |
---|---|---|
mov | 5934098 | 37.63% |
call | 1414355 | 8.97% |
lea | 1071501 | 6.79% |
movl | 760677 | 4.82% |
push | 655921 | 4.16% |
jmp | 611540 | 3.88% |
add | 560517 | 3.55% |
je | 490250 | 3.11% |
test | 475899 | 3.02% |
pop | 441608 | 2.80% |
sub | 366228 | 2.32% |
cmp | 326379 | 2.07% |
jne | 264110 | 1.67% |
nop | 242356 | 1.54% |
ret | 238569 | 1.51% |
xor | 148194 | 0.94% |
movzbl | 122730 | 0.78% |
and | 88863 | 0.56% |
xchg | 66885 | 0.42% |
cmpl | 64907 | 0.41% |
movzwl | 64589 | 0.41% |
movb | 57247 | 0.36% |
or | 52138 | 0.33% |
shl | 50908 | 0.32% |
cmpb | 50152 | 0.32% |
jle | 41083 | 0.26% |
leave | 39923 | 0.25% |
fldl | 37428 | 0.24% |
fstpl | 37368 | 0.24% |
shr | 36503 | 0.23% |
jbe | 32866 | 0.21% |
ja | 32333 | 0.21% |
sar | 30917 | 0.20% |
flds | 29672 | 0.19% |
subl | 27636 | 0.18% |
setne | 27626 | 0.18% |
testb | 27420 | 0.17% |
addl | 25906 | 0.16% |
imul | 25569 | 0.16% |
jg | 24796 | 0.16% |
fstp | 24349 | 0.15% |
fxch | 23464 | 0.15% |
js | 21550 | 0.14% |
fstps | 21248 | 0.13% |
sbb | 16607 | 0.11% |
inc | 16200 | 0.10% |
lock | 16049 | 0.10% |
jae | 14825 | 0.09% |
sahf | 14765 | 0.09% |
dec | 14276 | 0.09% |
fnstsw | 14026 | 0.09% |
sete | 13902 | 0.09% |
movw | 13895 | 0.09% |
adc | 13640 | 0.09% |
jb | 12467 | 0.08% |
jl | 11700 | 0.07% |
repz | 11178 | 0.07% |
fldcw | 11110 | 0.07% |
jge | 11019 | 0.07% |
movswl | 10816 | 0.07% |
fildl | 8852 | 0.06% |
cmpw | 7601 | 0.05% |
jns | 7490 | 0.05% |
fldz | 7331 | 0.05% |
fmul | 7229 | 0.05% |
out | 7203 | 0.05% |
not | 7028 | 0.04% |
movsbl | 6720 | 0.04% |
in | 6503 | 0.04% |
fld | 6309 | 0.04% |
faddp | 6254 | 0.04% |
fstl | 5760 | 0.04% |
fucom | 5753 | 0.04% |
neg | 5725 | 0.04% |
fucompp | 5354 | 0.03% |
rep | 5059 | 0.03% |
fmuls | 5039 | 0.03% |
pushl | 4430 | 0.03% |
jp | 4424 | 0.03% |
fnstcw | 4400 | 0.03% |
fld1 | 4176 | 0.03% |
fmulp | 4133 | 0.03% |
orl | 3927 | 0.02% |
fadds | 3789 | 0.02% |
movq | 3779 | 0.02% |
fistpl | 3709 | 0.02% |
cltd | 3597 | 0.02% |
fmull | 3313 | 0.02% |
stos | 3298 | 0.02% |
lret | 3183 | 0.02% |
scas | 3103 | 0.02% |
lods | 3066 | 0.02% |
cwtl | 3064 | 0.02% |
fadd | 2852 | 0.02% |
fucomp | 2678 | 0.02% |
orb | 2481 | 0.02% |
fildll | 2418 | 0.02% |
andl | 2379 | 0.02% |
setb | 2337 | 0.01% |
andb | 2263 | 0.01% |
552 rows more... |