ADD без обновления флага недоступно для некоторых кортекс-мс.Если вы посмотрите документацию arm для набора инструкций (это всегда хорошая идея при использовании языка ассемблера) для случаев общего назначения, которые недоступны до расширения thumb2 на armv7-m (cortex-m3, cortex-m4, cortex-m7).В cortex-m0 и cortex-m0 +, а также в целом широком коде совместимости (который будет использовать armv4t или armv6-m) нет опции добавления без флагов.Так что, возможно, именно поэтому.
Другая причина может заключаться в том, чтобы получить 16-битную инструкцию, а не 32-ю, но это скользкий уклон, поскольку она еще больше распространяется на ассемблеры и их синтаксис (синтаксис определяетсяассемблер, программа, которая обрабатывает язык ассемблера, а не цель).например, не синтаксический унифицированный газ:
.thumb
add r1,r2,r3
Disassembly of section .text:
00000000 <.text>:
0: 18d1 adds r1, r2, r3
дизассемблер знает реальность, но ассемблер не знает:
so.s: Assembler messages:
so.s:2: Error: instruction not supported in Thumb16 mode -- `adds r1,r2,r3'
, но
.syntax unified
.thumb
adds r1,r2,r3
add r1,r2,r3
Disassembly of section .text:
00000000 <.text>:
0: 18d1 adds r1, r2, r3
2: eb02 0103 add.w r1, r2, r3
, поэтому не скользко в этом случае, но с унифицированным синтаксисом вы начинаете входить в синтаксис типа blahw, blah.w, blah, type и вынуждены возвращаться, чтобы проверить, генерируются ли нужные вам инструкции.non-unified также имеет свои собственные игры, и, конечно, все это зависит от ассемблера.
Я подозреваю, что они либо выбирали единственный выбор, либо использовали меньшую и более совместимую инструкцию, особенно еслиэто был класс или текст, чем больше он совместим, тем лучше.