VLC ( Кодирование переменной длины ) обозначает переменное количество используемых битов. Таким образом, в вашем примере текущее значение составляет от 1 до 19 бит.
Поначалу это может показаться странным, но следует строгой логике. В приложении * обязательно будет таблица, определяющая, какая битовая комбинация представляет какое значение.
Каждое значение представлено определенной уникальной битовой комбинацией, которая может быть определена последовательными битами чтения .
Например, эта таблица:
0xxxxxxxxxxxxxxxxxx = value = 0 ( 1 bit length )
10xxxxxxxxxxxxxxxxx = value = 1 ( 2 bit length )
110xxxxxxxxxxxxxxxx = value = 2 ( 3 bit length )
1110xxxxxxxxxxxxxxx = value = 3 ( 4 bit length )
...
1111111111111111110 = value = 18 ( 19 bit length )
В этом примере 0
обозначает конец значения , который в сочетании с 1
s кодирует значение VLC. Как уже было сказано, вы должны читать битовый поток последовательно, чтобы получить длину в битах значения, поэтому в этом примере вам нужно будет проверить конечный 0
.
В действительности эти таблицы часто строятся с кодированием Хаффмана и, следовательно, являются более сложными, чем в этом примере. Вы обязательно найдете таблицу для вашего перевода в вышеупомянутом приложении спецификации.
Как узнать, сколько бит следует прочитать для hcod_sf?
Вы можете определить количество читаемых бит, только прочитав их. Практически вы читаете (по меньшей мере 19) битов одновременно, а затем оцениваете, сколько из этих битов принадлежит значению (часто с помощью таблицы ).
Что означает 1..19?
Это минимальное (1) и максимальное (19) количество битов в этом конкретном значении.
Наконец:
Это довольно сложно реализовать, поэтому знание расширения набора команд BMI действительно полезно для x86-способа обработки этого.