Нет инструкции "beq" или "bne" в руководстве ARMv7-M? - PullRequest
2 голосов
/ 25 марта 2019

Я работаю над микроконтроллером STM32l475, который работает с процессором Cortex-M4 и наборами команд ARM / Thumb.Я вижу (из objdump), что есть инструкции beq.n и bne.n, сгенерированные в двоичном файле программы ARM (я добавил флаг -mthumb при компиляции программы).Однако я не нахожу эти инструкции по ветке в последнем руководстве ARMv7-M .

Может кто-нибудь сказать мне причину?И какие инструкции, доступные в руководстве, эквивалентны этим двум инструкциям ветки?

1 Ответ

4 голосов
/ 25 марта 2019

beq и bne - условные ветви;другими словами, они являются условными версиями безусловной ветви b.eq и ne - это два разных кода состояния;они описаны в разделе A7.3.beq означает ветвь, если она равна , а bne означает ветвь, если она не равна .

Инструкция ветвления b имеет два разных кодирования в режиме Thumb.Возможно, вы видите кодировку T1, описанную в разделе A7.7.12:

B<c> <label>

15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 1  1  0  1 [-<cond>--] [--------imm8---------] 

В этой кодировке код состояния (например,eq или ne) кодируются непосредственно в инструкции, в битах 8-11.Разборка из objdump отображает код состояния вместо <c> выше.Таким образом, используя таблицу кодов условий в разделе A7.3, вы бы закодировали beq как 11010000[imm8].

...