Почему в .Net CIL есть неиспользуемые значения для кодов операций? - PullRequest
1 голос
/ 17 мая 2019

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

Простите, если это не тот стек, о котором я могу спросить, я разрывался между этим и разработкой программного обеспечения.Дайте мне знать, если я должен опубликовать там вместо этого.

...