LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

Обе компании используют термин EPIC. Это не случайность.

Думаю, тебе стоит рассказать перцам из МЦСТ, что они не VLIW сделали. Потому что:

Микропроцессор «Эльбрус» (1891ВМ4Я) – универсальный микропроцессор с архитектурой «Эльбрус» на основе архитектуры широкого командного слова (VLIW).

Отсюда: http://www.mcst.ru/Elbrus

Что за дурацкие попытки шланговать? Ты же прекрасно понимаешь, что имеется в виду средняя длина инструкций в используемом софте. Какой-нибудь веб-сервер там, текстовый или графический редактор, и тому подобное.

Прости, я не телепат чтобы знать заранее о том, что именно лоровские шизофреники имеют ввиду. Но специально для тебя я набыдлокодил небольшой говноскрипт, считающий среднюю длину инструкции в бинарике. Итак…

Во-первых, судя по первой попавшейся статье средняя длина инструкций у x86-64 заметно больше 8 бит. И даже больше 16 бит. И даже больше 32 бит.

Последнее – ЛПП. Скрипт:

#!/usr/bin/env python3

from os import popen
import sys

if len(sys.argv) != 2:
    print("Provide binary path")
    sys.exit(-1)

binpath = sys.argv[1]
cmd = "objdump -r -j .text -d {} | cut -d: -f2 | cut -d$'\t' -f 2".format(binpath)

ilens = []
ldict = {}
allowed = set(string.digits + 'a' + 'b' + 'c' + 'd' + 'e' + 'f')
with popen(cmd) as output:
    for instr in output:
        instr = instr.strip()
        instr = instr.replace(' ', '')
        l = len(instr)
        # skip invalid output from objdump
        if l == 0:
            continue
        if not (set(instr) <= allowed):
            continue
        l = l * 4    # 4 bits per hex character
        ilens.append(l)
        ldict[l] = ldict.get(l, 0) + 1

avg = sum(ilens) / len(ilens)
print(f"Average instruction length: {avg} bits")

for l,n in ldict.items():
    print(f"Number of {l} bit instructions: {n}")

Результаты на разных прогах:

 △ ~ ./instrlen.py /nix/store/qzp74yjsymgpfmr0shcqdzzcrf90x83c-coreutils-full-9.5/bin/coreutils
Average instruction length: 31.862272649418344 bits
Number of 40 bit instructions: 48979
Number of 56 bit instructions: 26298
Number of 16 bit instructions: 42203
Number of 24 bit instructions: 49934
Number of 8 bit instructions: 9953
Number of 32 bit instructions: 22353
Number of 48 bit instructions: 16300
 ▲ ~ ./instrlen.py /nix/store/7lyjbaz0s8rgy4j4iyxz47gi78w72cm0-librewolf-128.0-2/lib/librewolf/librewolf
Average instruction length: 30.25957125758014 bits
Number of 8 bit instructions: 15486
Number of 16 bit instructions: 25239
Number of 32 bit instructions: 34675
Number of 24 bit instructions: 45895
Number of 40 bit instructions: 24776
Number of 48 bit instructions: 10936
Number of 56 bit instructions: 19275
 ▲ ~ ./instrlen.py /nix/store/06dr82w4336x3iwyik7b4criw3gxbwhs-ghc-9.8.2/lib/ghc-9.8.2/bin/ghc-9.8.2
Average instruction length: 29.644412695634006 bits
Number of 56 bit instructions: 58068
Number of 8 bit instructions: 37035
Number of 32 bit instructions: 77798
Number of 40 bit instructions: 32445
Number of 16 bit instructions: 92952
Number of 48 bit instructions: 15599
Number of 12 bit instructions: 3239
Number of 24 bit instructions: 37032
 ▲ ~ ./instrlen.py /nix/store/sdbyh7alvqicf4m42dl9gynqsb8alxzs-reaper-7.18/opt/REAPER/.reaper-wrapped
Average instruction length: 31.763740057415408 bits
Number of 8 bit instructions: 150371
Number of 40 bit instructions: 408041
Number of 48 bit instructions: 236383
Number of 56 bit instructions: 275544
Number of 32 bit instructions: 292061
Number of 16 bit instructions: 418928
Number of 24 bit instructions: 485239
Number of 12 bit instructions: 71
 ▲ ~ ./instrlen.py /nix/store/rb9n6mhvp93f9kyir6zijajbvprnvp3c-nginx-1.26.1/bin/nginx
Average instruction length: 31.912063492063492 bits
Number of 32 bit instructions: 45594
Number of 16 bit instructions: 42845
Number of 24 bit instructions: 49604
Number of 8 bit instructions: 15590
Number of 56 bit instructions: 32944
Number of 48 bit instructions: 15033
Number of 40 bit instructions: 50389

В общем, средняя длина получается чуть меньше 32 бит. Больше всего инструкций по 2 и 3 байта. Я так прозреваю, в остальных раздутая длина вызвана константами или смещениями.

P.S. хз откуда 12-битные инструкции взялись. Возможно, артефакт из objdump. Но в среднем цифры примерно такие.

Исправление hateyoufeel, :

Обе компании используют термин EPIC. Это не случайность.

Думаю, тебе стоит рассказать перцам из МЦСТ, что они не VLIW сделали. Потому что:

Микропроцессор «Эльбрус» (1891ВМ4Я) – универсальный микропроцессор с архитектурой «Эльбрус» на основе архитектуры широкого командного слова (VLIW).

Отсюда: http://www.mcst.ru/Elbrus

Что за дурацкие попытки шланговать? Ты же прекрасно понимаешь, что имеется в виду средняя длина инструкций в используемом софте. Какой-нибудь веб-сервер там, текстовый или графический редактор, и тому подобное.

Прости, я не телепат чтобы знать заранее о том, что именно лоровские шизофреники имеют ввиду. Но специально для тебя я набыдлокодил небольшой говноскрипт, считающий среднюю длину инструкции в бинарике. Итак…

Во-первых, судя по первой попавшейся статье средняя длина инструкций у x86-64 заметно больше 8 бит. И даже больше 16 бит. И даже больше 32 бит.

Последнее – ЛПП. Скрипт:

#!/usr/bin/env python3

from os import popen
import sys

if len(sys.argv) != 2:
    print("Provide binary path")
    sys.exit(-1)

binpath = sys.argv[1]
cmd = "objdump -r -j .text -d {} | cut -d: -f2 | cut -d$'\t' -f 2".format(binpath)

ilens = []
ldict = {}
allowed = set(string.digits + 'a' + 'b' + 'c' + 'd' + 'e' + 'f')
with popen(cmd) as output:
    for instr in output:
        instr = instr.strip()
        instr = instr.replace(' ', '')
        l = len(instr)
        # skip invalid output from objdump
        if l == 0:
            continue
        if not (set(instr) <= allowed):
            continue
        l = l * 4    # 4 bits per hex character
        ilens.append(l)
        ldict[l] = ldict.get(l, 0) + 1

avg = sum(ilens) / len(ilens)
print(f"Average instruction length: {avg} bits")

for l,n in ldict.items():
    print(f"Number of {l} bit instructions: {n}")

Результаты на разных прогах:

 △ ~ ./instrlen.py /nix/store/qzp74yjsymgpfmr0shcqdzzcrf90x83c-coreutils-full-9.5/bin/coreutils
Average instruction length: 31.862272649418344 bits
Number of 40 bit instructions: 48979
Number of 56 bit instructions: 26298
Number of 16 bit instructions: 42203
Number of 24 bit instructions: 49934
Number of 8 bit instructions: 9953
Number of 32 bit instructions: 22353
Number of 48 bit instructions: 16300
 ▲ ~ ./instrlen.py /nix/store/7lyjbaz0s8rgy4j4iyxz47gi78w72cm0-librewolf-128.0-2/lib/librewolf/librewolf
Average instruction length: 30.25957125758014 bits
Number of 8 bit instructions: 15486
Number of 16 bit instructions: 25239
Number of 32 bit instructions: 34675
Number of 24 bit instructions: 45895
Number of 40 bit instructions: 24776
Number of 48 bit instructions: 10936
Number of 56 bit instructions: 19275
 ▲ ~ ./instrlen.py /nix/store/06dr82w4336x3iwyik7b4criw3gxbwhs-ghc-9.8.2/lib/ghc-9.8.2/bin/ghc-9.8.2
Average instruction length: 29.644412695634006 bits
Number of 56 bit instructions: 58068
Number of 8 bit instructions: 37035
Number of 32 bit instructions: 77798
Number of 40 bit instructions: 32445
Number of 16 bit instructions: 92952
Number of 48 bit instructions: 15599
Number of 12 bit instructions: 3239
Number of 24 bit instructions: 37032
 ▲ ~ ./instrlen.py /nix/store/sdbyh7alvqicf4m42dl9gynqsb8alxzs-reaper-7.18/opt/REAPER/.reaper-wrapped
Average instruction length: 31.763740057415408 bits
Number of 8 bit instructions: 150371
Number of 40 bit instructions: 408041
Number of 48 bit instructions: 236383
Number of 56 bit instructions: 275544
Number of 32 bit instructions: 292061
Number of 16 bit instructions: 418928
Number of 24 bit instructions: 485239
Number of 12 bit instructions: 71
 ▲ ~ ./instrlen.py /nix/store/rb9n6mhvp93f9kyir6zijajbvprnvp3c-nginx-1.26.1/bin/nginx
Average instruction length: 31.912063492063492 bits
Number of 32 bit instructions: 45594
Number of 16 bit instructions: 42845
Number of 24 bit instructions: 49604
Number of 8 bit instructions: 15590
Number of 56 bit instructions: 32944
Number of 48 bit instructions: 15033
Number of 40 bit instructions: 50389

В общем, средняя длина получается чуть меньше 32 бит. Больше всего инструкций по 2 и 3 байта. Я так прозреваю, в остальных раздутая длина вызвана константами или смещениями.

P.S. хз откуда 12-битные инструкции в REAPER взялись. Возможно, артефакт из objdump. Но в среднем цифры примерно такие.

Исправление hateyoufeel, :

Обе компании используют термин EPIC. Это не случайность.

Думаю, тебе стоит рассказать перцам из МЦСТ, что они не VLIW сделали. Потому что:

Микропроцессор «Эльбрус» (1891ВМ4Я) – универсальный микропроцессор с архитектурой «Эльбрус» на основе архитектуры широкого командного слова (VLIW).

Отсюда: http://www.mcst.ru/Elbrus

Что за дурацкие попытки шланговать? Ты же прекрасно понимаешь, что имеется в виду средняя длина инструкций в используемом софте. Какой-нибудь веб-сервер там, текстовый или графический редактор, и тому подобное.

Прости, я не телепат чтобы знать заранее о том, что именно лоровские шизофреники имеют ввиду. Но специально для тебя я набыдлокодил небольшой говноскрипт, считающий среднюю длину инструкции в бинарике. Итак…

Во-первых, судя по первой попавшейся статье средняя длина инструкций у x86-64 заметно больше 8 бит. И даже больше 16 бит. И даже больше 32 бит.

Последнее – ЛПП. Скрипт:

#!/usr/bin/env python3

from os import popen
import sys

if len(sys.argv) != 2:
    print("Provide binary path")
    sys.exit(-1)

binpath = sys.argv[1]
cmd = "objdump -r -j .text -d {} | cut -d: -f2 | cut -d$'\t' -f 2".format(binpath)

ilens = []
ldict = {}
allowed = set(string.digits + 'a' + 'b' + 'c' + 'd' + 'e' + 'f')
with popen(cmd) as output:
    for instr in output:
        instr = instr.strip()
        instr = instr.replace(' ', '')
        l = len(instr)
        # skip invalid output from objdump
        if l == 0:
            continue
        if not (set(instr) <= allowed):
            continue
        l = l * 4    # 4 bits per hex character
        ilens.append(l)
        ldict[l] = ldict.get(l, 0) + 1

avg = sum(ilens) / len(ilens)
print(f"Average instruction length: {avg} bits")

for l,n in ldict.items():
    print(f"Number of {l} bit instructions: {n}")

Результаты на разных прогах:

 △ ~ ./instrlen.py /nix/store/qzp74yjsymgpfmr0shcqdzzcrf90x83c-coreutils-full-9.5/bin/coreutils
Average instruction length: 31.862272649418344 bits
Number of 40 bit instructions: 48979
Number of 56 bit instructions: 26298
Number of 16 bit instructions: 42203
Number of 24 bit instructions: 49934
Number of 8 bit instructions: 9953
Number of 32 bit instructions: 22353
Number of 48 bit instructions: 16300
 ▲ ~ ./instrlen.py /nix/store/7lyjbaz0s8rgy4j4iyxz47gi78w72cm0-librewolf-128.0-2/lib/librewolf/librewolf
Average instruction length: 30.25957125758014 bits
Number of 8 bit instructions: 15486
Number of 16 bit instructions: 25239
Number of 32 bit instructions: 34675
Number of 24 bit instructions: 45895
Number of 40 bit instructions: 24776
Number of 48 bit instructions: 10936
Number of 56 bit instructions: 19275
 ▲ ~ ./instrlen.py /nix/store/06dr82w4336x3iwyik7b4criw3gxbwhs-ghc-9.8.2/lib/ghc-9.8.2/bin/ghc-9.8.2
Average instruction length: 29.644412695634006 bits
Number of 56 bit instructions: 58068
Number of 8 bit instructions: 37035
Number of 32 bit instructions: 77798
Number of 40 bit instructions: 32445
Number of 16 bit instructions: 92952
Number of 48 bit instructions: 15599
Number of 12 bit instructions: 3239
Number of 24 bit instructions: 37032
 ▲ ~ ./instrlen.py /nix/store/sdbyh7alvqicf4m42dl9gynqsb8alxzs-reaper-7.18/opt/REAPER/.reaper-wrapped
Average instruction length: 31.763740057415408 bits
Number of 8 bit instructions: 150371
Number of 40 bit instructions: 408041
Number of 48 bit instructions: 236383
Number of 56 bit instructions: 275544
Number of 32 bit instructions: 292061
Number of 16 bit instructions: 418928
Number of 24 bit instructions: 485239
Number of 12 bit instructions: 71
 ▲ ~ ./instrlen.py /nix/store/rb9n6mhvp93f9kyir6zijajbvprnvp3c-nginx-1.26.1/bin/nginx
Average instruction length: 31.912063492063492 bits
Number of 32 bit instructions: 45594
Number of 16 bit instructions: 42845
Number of 24 bit instructions: 49604
Number of 8 bit instructions: 15590
Number of 56 bit instructions: 32944
Number of 48 bit instructions: 15033
Number of 40 bit instructions: 50389

В общем, средняя длина получается чуть меньше 32 бит. Больше всего инструкций по 2 и 3 байта. Я так прозреваю, в остальных раздутая длина вызвана константами или смещениями.

Исправление hateyoufeel, :

Обе компании используют термин EPIC. Это не случайность.

Думаю, тебе стоит рассказать перцам из МЦСТ, что они не VLIW сделали. Потому что:

Микропроцессор «Эльбрус» (1891ВМ4Я) – универсальный микропроцессор с архитектурой «Эльбрус» на основе архитектуры широкого командного слова (VLIW).

Отсюда: http://www.mcst.ru/Elbrus

Что за дурацкие попытки шланговать? Ты же прекрасно понимаешь, что имеется в виду средняя длина инструкций в используемом софте. Какой-нибудь веб-сервер там, текстовый или графический редактор, и тому подобное.

Прости, я не телепат чтобы знать заранее о том, что именно лоровские шизофреники имеют ввиду. Но специально для тебя я набыдлокодил небольшой говноскрипт, считающий среднюю длину инструкции в бинарике. Итак…

Во-первых, судя по первой попавшейся статье средняя длина инструкций у x86-64 заметно больше 8 бит. И даже больше 16 бит. И даже больше 32 бит.

Последнее – ЛПП. Скрипт:

#!/usr/bin/env python3

from os import popen
import sys

if len(sys.argv) != 2:
    print("Provide binary path")
    sys.exit(-1)

binpath = sys.argv[1]
cmd = "objdump -r -j .text -d {} | cut -d: -f2 | cut -d$'\t' -f 2".format(binpath)

ilens = []
ldict = {}
allowed = set(string.digits + 'a' + 'b' + 'c' + 'd' + 'e' + 'f''')
with popen(cmd) as output:
    for instr in output:
        instr = instr.strip()
        instr = instr.replace(' ', '')
        l = len(instr)
        # skip invalid output from objdump
        if l == 0:
            continue
        if not (set(instr) <= allowed):
            continue
        l = l * 4    # 4 bits per hex character
        ilens.append(l)
        ldict[l] = ldict.get(l, 0) + 1

avg = sum(ilens) / len(ilens)
print(f"Average instruction length: {avg} bits")

for l,n in ldict.items():
    print(f"Number of {l} bit instructions: {n}")

Результаты на разных прогах:

 △ ~ ./instrlen.py /nix/store/qzp74yjsymgpfmr0shcqdzzcrf90x83c-coreutils-full-9.5/bin/coreutils
Average instruction length: 31.862272649418344 bits
Number of 40 bit instructions: 48979
Number of 56 bit instructions: 26298
Number of 16 bit instructions: 42203
Number of 24 bit instructions: 49934
Number of 8 bit instructions: 9953
Number of 32 bit instructions: 22353
Number of 48 bit instructions: 16300
 ▲ ~ ./instrlen.py /nix/store/7lyjbaz0s8rgy4j4iyxz47gi78w72cm0-librewolf-128.0-2/lib/librewolf/librewolf
Average instruction length: 30.25957125758014 bits
Number of 8 bit instructions: 15486
Number of 16 bit instructions: 25239
Number of 32 bit instructions: 34675
Number of 24 bit instructions: 45895
Number of 40 bit instructions: 24776
Number of 48 bit instructions: 10936
Number of 56 bit instructions: 19275
 ▲ ~ ./instrlen.py /nix/store/06dr82w4336x3iwyik7b4criw3gxbwhs-ghc-9.8.2/lib/ghc-9.8.2/bin/ghc-9.8.2
Average instruction length: 29.644412695634006 bits
Number of 56 bit instructions: 58068
Number of 8 bit instructions: 37035
Number of 32 bit instructions: 77798
Number of 40 bit instructions: 32445
Number of 16 bit instructions: 92952
Number of 48 bit instructions: 15599
Number of 12 bit instructions: 3239
Number of 24 bit instructions: 37032
 ▲ ~ ./instrlen.py /nix/store/sdbyh7alvqicf4m42dl9gynqsb8alxzs-reaper-7.18/opt/REAPER/.reaper-wrapped
Average instruction length: 31.763740057415408 bits
Number of 8 bit instructions: 150371
Number of 40 bit instructions: 408041
Number of 48 bit instructions: 236383
Number of 56 bit instructions: 275544
Number of 32 bit instructions: 292061
Number of 16 bit instructions: 418928
Number of 24 bit instructions: 485239
Number of 12 bit instructions: 71
 ▲ ~ ./instrlen.py /nix/store/rb9n6mhvp93f9kyir6zijajbvprnvp3c-nginx-1.26.1/bin/nginx
Average instruction length: 31.912063492063492 bits
Number of 32 bit instructions: 45594
Number of 16 bit instructions: 42845
Number of 24 bit instructions: 49604
Number of 8 bit instructions: 15590
Number of 56 bit instructions: 32944
Number of 48 bit instructions: 15033
Number of 40 bit instructions: 50389

В общем, средняя длина получается чуть меньше 32 бит. Больше всего инструкций по 2 и 3 байта. Я так прозреваю, в остальных раздутая длина вызвана константами или смещениями.

Исправление hateyoufeel, :

Обе компании используют термин EPIC. Это не случайность.

Думаю, тебе стоит рассказать перцам из МЦСТ, что они не VLIW сделали. Потому что:

Микропроцессор «Эльбрус» (1891ВМ4Я) – универсальный микропроцессор с архитектурой «Эльбрус» на основе архитектуры широкого командного слова (VLIW).

Отсюда: http://www.mcst.ru/Elbrus

Что за дурацкие попытки шланговать? Ты же прекрасно понимаешь, что имеется в виду средняя длина инструкций в используемом софте. Какой-нибудь веб-сервер там, текстовый или графический редактор, и тому подобное.

Прости, я не телепат чтобы знать заранее о том, что именно лоровские шизофреники имеют ввиду. Но специально для тебя я набыдлокодил небольшой говноскрипт, считающий среднюю длину инструкции в бинарике. Итак…

Во-первых, судя по первой попавшейся статье средняя длина инструкций у x86-64 заметно больше 8 бит. И даже больше 16 бит. И даже больше 32 бит.

Последнее – ЛПП. Скрипт:

#!/usr/bin/env python3

from os import popen
import sys

if len(sys.argv) != 2:
    print("Provide binary path")
    sys.exit(-1)

binpath = sys.argv[1]
cmd = "objdump -r -j .text -d {} | cut -d: -f2 | cut -d$'\t' -f 2".format(binpath)

ilens = []
ldict = {}
with popen(cmd) as output:
    for instr in output:
        instr = instr.strip()
        instr = instr.replace(' ', '')
        l = len(instr)
        if l == 0:
            continue
        l = l * 4    # 4 bits per hex character
        ilens.append(l)
        ldict[l] = ldict.get(l, 0) + 1


avg = sum(ilens) / len(ilens)
print(f"Average instruction length: {avg} bits")

for l,n in ldict.items():
    print(f"Number of {l} bit instructions: {n}")

Результаты на разных прогах:

 △ ~ ./instrlen.py /nix/store/qzp74yjsymgpfmr0shcqdzzcrf90x83c-coreutils-full-9.5/bin/coreutils
Average instruction length: 31.862272649418344 bits
Number of 40 bit instructions: 48979
Number of 56 bit instructions: 26298
Number of 16 bit instructions: 42203
Number of 24 bit instructions: 49934
Number of 8 bit instructions: 9953
Number of 32 bit instructions: 22353
Number of 48 bit instructions: 16300
 ▲ ~ ./instrlen.py /nix/store/7lyjbaz0s8rgy4j4iyxz47gi78w72cm0-librewolf-128.0-2/lib/librewolf/librewolf
Average instruction length: 30.25957125758014 bits
Number of 8 bit instructions: 15486
Number of 16 bit instructions: 25239
Number of 32 bit instructions: 34675
Number of 24 bit instructions: 45895
Number of 40 bit instructions: 24776
Number of 48 bit instructions: 10936
Number of 56 bit instructions: 19275
 ▲ ~ ./instrlen.py /nix/store/06dr82w4336x3iwyik7b4criw3gxbwhs-ghc-9.8.2/lib/ghc-9.8.2/bin/ghc-9.8.2
Average instruction length: 29.644412695634006 bits
Number of 56 bit instructions: 58068
Number of 8 bit instructions: 37035
Number of 32 bit instructions: 77798
Number of 40 bit instructions: 32445
Number of 16 bit instructions: 92952
Number of 48 bit instructions: 15599
Number of 12 bit instructions: 3239
Number of 24 bit instructions: 37032
 ▲ ~ ./instrlen.py /nix/store/sdbyh7alvqicf4m42dl9gynqsb8alxzs-reaper-7.18/opt/REAPER/.reaper-wrapped
Average instruction length: 31.763740057415408 bits
Number of 8 bit instructions: 150371
Number of 40 bit instructions: 408041
Number of 48 bit instructions: 236383
Number of 56 bit instructions: 275544
Number of 32 bit instructions: 292061
Number of 16 bit instructions: 418928
Number of 24 bit instructions: 485239
Number of 12 bit instructions: 71
 ▲ ~ ./instrlen.py /nix/store/rb9n6mhvp93f9kyir6zijajbvprnvp3c-nginx-1.26.1/bin/nginx
Average instruction length: 31.912063492063492 bits
Number of 32 bit instructions: 45594
Number of 16 bit instructions: 42845
Number of 24 bit instructions: 49604
Number of 8 bit instructions: 15590
Number of 56 bit instructions: 32944
Number of 48 bit instructions: 15033
Number of 40 bit instructions: 50389

В общем, средняя длина получается чуть меньше 32 бит. Больше всего инструкций по 2 и 3 байта. Я так прозреваю, в остальных раздутая длина вызвана константами или смещениями.

Исходная версия hateyoufeel, :

Обе компании используют термин EPIC. Это не случайность.

Думаю, тебе стоит рассказать перцам из МЦСТ, что они не VLIW сделали. Потому что:

Микропроцессор «Эльбрус» (1891ВМ4Я) – универсальный микропроцессор с архитектурой «Эльбрус» на основе архитектуры широкого командного слова (VLIW).

Отсюда: http://www.mcst.ru/Elbrus

Что за дурацкие попытки шланговать? Ты же прекрасно понимаешь, что имеется в виду средняя длина инструкций в используемом софте. Какой-нибудь веб-сервер там, текстовый или графический редактор, и тому подобное.

Прости, я не телепат чтобы знать заранее о том, что именно лоровские шизофреники имеют ввиду. Но специально для тебя я набыдлокодил небольшой говноскрипт, считающий среднюю длину инструкции в бинарике. Итак…

Во-первых, судя по первой попавшейся статье средняя длина инструкций у x86-64 заметно больше 8 бит. И даже больше 16 бит. И даже больше 32 бит.

Последнее – ЛПП. Скрипт:

#!/usr/bin/env python3

from os import popen
import sys

if len(sys.argv) != 2:
    print("Provide binary path")
    sys.exit(-1)

binpath = sys.argv[1]
cmd = "objdump -r -j .text -d {} | cut -d: -f2 | cut -d$'\t' -f 2".format(binpath)

ilens = []
ldict = {}
with popen(cmd) as output:
    for instr in output:
        instr = instr.strip()
        instr = instr.replace(' ', '')
        l = len(instr)
        if l == 0:
            continue
        l = l * 4    # 4 bits per hex character
        ilens.append(l)
        ldict[l] = ldict.get(l, 0) + 1


avg = sum(ilens) / len(ilens)
print(f"Average instruction length: {avg} bits")

for l,n in ldict.items():
    print(f"Number of {l} bit instructions: {n}")

Результаты на разных прогах:

 △ ~ ./instrlen.py /nix/store/qzp74yjsymgpfmr0shcqdzzcrf90x83c-coreutils-full-9.5/bin/coreutils
Average instruction length: 31.862272649418344 bits
Number of 88 bit instructions: 1
Number of 40 bit instructions: 48979
Number of 56 bit instructions: 26298
Number of 16 bit instructions: 42203
Number of 24 bit instructions: 49934
Number of 8 bit instructions: 9953
Number of 32 bit instructions: 22353
Number of 48 bit instructions: 16300
 ▲ ~ ./instrlen.py /nix/store/7lyjbaz0s8rgy4j4iyxz47gi78w72cm0-librewolf-128.0-2/lib/librewolf/librewolf
Average instruction length: 30.25957125758014 bits
Number of 88 bit instructions: 1
Number of 8 bit instructions: 15486
Number of 16 bit instructions: 25239
Number of 32 bit instructions: 34675
Number of 24 bit instructions: 45895
Number of 40 bit instructions: 24776
Number of 48 bit instructions: 10936
Number of 56 bit instructions: 19275
 ▲ ~ ./instrlen.py /nix/store/06dr82w4336x3iwyik7b4criw3gxbwhs-ghc-9.8.2/lib/ghc-9.8.2/bin/ghc-9.8.2
Average instruction length: 29.644412695634006 bits
Number of 88 bit instructions: 1
Number of 56 bit instructions: 58068
Number of 8 bit instructions: 37035
Number of 32 bit instructions: 77798
Number of 40 bit instructions: 32445
Number of 16 bit instructions: 92952
Number of 48 bit instructions: 15599
Number of 12 bit instructions: 3239
Number of 24 bit instructions: 37032
 ▲ ~ ./instrlen.py /nix/store/sdbyh7alvqicf4m42dl9gynqsb8alxzs-reaper-7.18/opt/REAPER/.reaper-wrapped
Average instruction length: 31.763740057415408 bits
Number of 88 bit instructions: 1
Number of 8 bit instructions: 150371
Number of 40 bit instructions: 408041
Number of 48 bit instructions: 236383
Number of 56 bit instructions: 275544
Number of 32 bit instructions: 292061
Number of 16 bit instructions: 418928
Number of 24 bit instructions: 485239
Number of 12 bit instructions: 71
 ▲ ~ ./instrlen.py /nix/store/rb9n6mhvp93f9kyir6zijajbvprnvp3c-nginx-1.26.1/bin/nginx
Average instruction length: 31.912063492063492 bits
Number of 88 bit instructions: 1
Number of 32 bit instructions: 45594
Number of 16 bit instructions: 42845
Number of 24 bit instructions: 49604
Number of 8 bit instructions: 15590
Number of 56 bit instructions: 32944
Number of 48 bit instructions: 15033
Number of 40 bit instructions: 50389

В общем, средняя длина получается чуть меньше 32 бит. Больше всего инструкций по 2 и 3 байта. Я так прозреваю, в остальных раздутая длина вызвана константами или смещениями.