ПК всегда на две инструкции впереди, когда используется в качестве операнда, поэтому добавьте 8 в режиме охраны и 4 в режиме большого пальца.
LDR - это инструкция: регистр загрузки. LS означает, будет ли нагрузка более низкой или такой же LDREQ, если она равна. Ищите «коды состояния» в кронштейне. Верхние четыре бита в инструкции 0x9 в этом случае - это LS, выполняемые, если младшие или одинаковые. В большинстве инструкций эти биты имеют значение 0xE, что означает, что они всегда выполняются.
Все инструкции ARM используют верхние четыре бита в качестве кода условия, в основном на основе инструкций, которые вы можете выполнить условно, в этом случае он будет выполнять LDR, только если флаг C сброшен или флаг Z задавать. Если он выполняет загрузку, то это адрес, как вы его вычисляли, плюс 8, потому что ввод ПК для вычисления адреса на две инструкции опережает начальный адрес, тогда результатом является загрузка этого адреса в ПК, поэтому в основном это является условным переходом к вычисляемому адресу. Стол филиал. Обычно у вас будет таблица ветвлений с [ra, rb, lsl # 2], где ra - базовый адрес таблицы ветвлений, rb - индекс на основе единиц в эту таблицу (номер элемента 0 или 1 или 2), а lsl 2 поворота. индекс в адрес слова, так как это 32-битные инструкции. таблица содержит адреса к филиалам. ПК, используемый в качестве базы, означает, что следующая инструкция после этой инструкции, вероятно, является безусловным переходом к безусловному случаю, если не LS, а затем переход по таблице, после этой инструкции выполняется случай R3 = 0, а после этого - R3 = 1. дела и тд. если компилятор знал, что R3 никогда не может быть меньше некоторого числа, он мог бы использовать больше инструкций после этой, прежде чем перемещаться по / вокруг таблицы.
В любом случае, посмотрите на ARM ARM (теперь называется что-то вроде ARMv5 ARM ARM или устаревшая ARM ARM или что-то в этом роде). найдите «поле условия» или «коды условия», чтобы найти таблицу. Мнемоническое расширение прикрепляется к инструкции ADD, если установлен флаг z, являющийся ADDEQ. Вычтите, если установлен флаг N SUBMI и т. Д.