Поля i и imm3 применяют преобразование к константе imm8, чтобы сгенерировать больше 32-битных констант. Вот официальная документация, который, к сожалению, мало что объясняет. Об этом также есть сообщение на Старая новая вещь.
Обновлено: ссылка на документацию предназначена для ARMv7-A, но вы найдете идентичный текст в справочном разделе ARMv7-M A5.3.2.
Биты
i
,imm3
иimm8
объединяются, чтобы сформировать 32-битное непосредственное значение с использованием функцииThumbExpandImm
, как объяснено в псевдокоде. Обратитесь к приложению, чтобы узнать, как это работает.