CIL имеет несколько двухбайтовых инструкций, которые я нахожу действительно странными, учитывая, что есть много доступных однобайтовых инструкций, которые не используются.Вот некоторые конкретные примеры:
0x24
не используется между 0x23 ldc.r8
и 0x25 dup
0xA6
до 0xB2
не используются между 0xA5 unbox.any
и 0xB3 conv.ovf.i1
Я считаю только 27 двухбайтовых инструкций, и есть больше пробелов, чем доступно.
Я мог бы понять, если это была проблема с выравниванием, но много однобайтовых инструкцийза ними следуют 32-разрядные целые числа (всего 5 байтов), а за несколькими двухбайтовыми инструкциями следуют 32-разрядные целые числа (всего 6 байт) с одной двухбайтовой командой, за которой следует 8-разрядное целое число (всего 3 байта).Насколько я могу судить, они не выровнены по какой-либо согласованной границе.
Для справки я использую документацию по статическим полям System.Reflection.Emit.OpCodes https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.opcodes
Простите, если это не тот стек, о котором я могу спросить, я разрывался между этим и разработкой программного обеспечения.Дайте мне знать, если я должен опубликовать там вместо этого.