Если вы посмотрите на ARM ARM (ARM Architectural Reference Manual), у него есть раздел ближе к передней части о флагах. В отличие от многих других наборов инструкций, если вы посмотрите на инструкции ARM, в особенности ARM, в частности (не большой палец), верхние четыре бита каждой команды являются условными битами. В отличие от большинства других процессоров, с помощью рычага вы можете условно выполнять любую инструкцию, большинство других допускают только условные переходы. Коды условий ne, nz, cs, nc и т. Д. Перечислены в этом раннем разделе кодов условий. Таким образом, добавление, если нулевой флаг очищен, было бы добавлением. Также в отличие от большинства других процессоров ARM (в режиме arm) позволяет выбирать, когда вы хотите уничтожить / записать флаги. Большинство других всегда обновляют флаги на add, например, arm делает только если вы добавляете s, add не добавляет делает. Это сложно, когда вы комбинируете условное выполнение и эти другие модификаторы в инструкции, например, это addne или addnes? это требует проб и ошибок, чтобы выяснить. Я бы предположил addnes, но я использую такие комбинации настолько редко, что не запоминаю их.
Как уже упоминалось, дизассемблер создает что-то, что не может быть собрано, на выходе есть дополнительные элементы, которые помогут вам декодировать инструкцию.
Похоже, вы смотрите на код thumb2, который представляет собой смесь Франкена и ARM. Таким образом, у вас будут некоторые возможности для рук и некоторые большие пальцы и, по крайней мере, с binutils некоторые раздражающие binutils-isms (больше не нужно иметь набор инструментов arm для сравнения). Например, даже если мы знаем, что многие инструкции большого пальца изменяют флаги без опции, и дизассемблер показывает это, добавляя вместо add добавление, вы не можете использовать add r1, r2 для режима thumb, поскольку он жалуется, он хочет, чтобы вы использовали добавьте r1, r2, даже если вы изменяете флаг. ARM работает над созданием единого синтаксиса сборки рука / большой палец, который, вероятно, уже работает с их цепочкой инструментов, но должен будет увидеть, что происходит с инструментами gnu.
Так что я не ожидал, что смогу взять вывод дизассемблирования и повторно собрать этот синтаксис по этим двум причинам. Дополнительный материал поможет вам понять конкретную инструкцию, которая была закодирована.