Все способы, которыми вы можете переключиться из режима охраны в режим большого пальца в архитектуре ARM, перечислите их и объясните подробно? - PullRequest
1 голос
/ 30 ноября 2010

Я не смог найти ответ на этот вопрос. Можете ли вы сказать мне, когда архитектура ARM переключается из режима охраны в режим большого пальца? Объясните все способы, которыми работает переключение.

1 Ответ

9 голосов
/ 30 ноября 2010

Ответы содержатся в ARM ARM (ARM Architectural Reference Manual).Например, посмотрите на BX в инструкциях ARM и Thumb.Есть дополнительные инструкции на случай, если это домашний вопрос.

Также посмотрите на псевдокод, чтобы узнать, что происходит, когда возникает исключение:

R14_ = return link
SPSR_ = CPSR
CPSR[4:0] = exception mode number
CPSR[5] = 0 
if  == Reset or FIQ then
    CPSR[6] = 1 
CPSR[7] = 1 
if  != UNDEF or SWI then
    CPSR[8] = 1
CPSR[9] = CP15_reg1_EEbit
PC = exception vector address

Комментарии к псевдокоду выше (вARM ARM) опишите еще один ответ на ваш вопрос.

Теперь то, что не очевидно, и, возможно, вводит в заблуждение в BX и других описаниях инструкций, так это то, что bx rm не всегда переключает состояния.В описании большого пальца BX говорится «ветки между кодом ARM и кодом Thumb».Как будто использование большого пальца привело бы к тому, что вам нужно постоянно кодировать код.Псевдокод рисует немного лучшую картинку, хотя lsbit адреса в регистре говорит вам, переходите ли вы к большому или ручному коду.Хотя псевдокод ПК в описании большого пальца вводит в заблуждение.Инструкции большого пальца состоят из 16 битов, и компьютер перемещается вперед на 16 битов за раз 0x00, 0x02, 0x04 и т. Д. В режиме постановки на охрану инструкции являются 32-битными, а компьютер переходит на 0x00, 0x04, 0x08 и т. Д. (См. Инструкции ARM для ветвлений).ветвь sign_immed << 2, 0,4,8 и т. д. thumb ветвь sign_immed << 1, 0,2,4,6 и т. д.) </p>

В основном, если у вас есть смешанная программа, которую вы хотитеиспользовать BX вместо B, в частности, при возврате bx lr вместо mov pc, lr.Таким образом, функции большого пальца и руки будут использовать bx lr для возврата.Все четыре случая покрыты: рука, вызывающая руку, рука, вызывающая большой палец, рука, вызывающая большой палец, и палец, вызывающий большой палец.

Так что ищите инструкции, которые влияют на T-бит cpsr и / или влияют на счетчик программы в некотором смысле.это приводит к тому, что счетчик программ где-то ветвится.Также будьте осторожны, чтобы ограничиться определенным семейством / ядром, которое вас интересует (при чтении ARM ARM), armv4t, armv6, armv6 и т. Д. Вы, вероятно, хотите получить TRM (Техническое справочное руководство) для конкретного ядра, которым вы являетесь.используя также.ARM ARM очень универсален, и, поскольку количество ядер увеличивается с течением времени, конкретные различия не ясны в ARM ARM.Вам нужен TRM.

У меня много оборотов ARM ARM, и все они содержат ошибки / ошибки.Преднамеренно или нет, я не знаю, поэтому всегда требуется некоторый взлом, чтобы узнать, как реально работает ядро, которое вы используете.


РЕДАКТИРОВАТЬ в 2018

Iя не собираюсь составлять список для каждого ядра и т. д. и т. д. Именно для этого предназначена документация arm, а не для stackoverflow.

Но, опять же, ответ лежит в справочных руководствах по архитектуре, доступных в arm. сайт .Возможно, вам придется пожертвовать адрес электронной почты, но оно того стоит.

Ключевое слово, которое вы ищете, это interwork или , взаимодействующий .Старый / оригинальный рычаг теперь называется armv5 architectural reference manual, вы ищете T Flag и посмотрите, какие инструкции меняют этот флаг.Для armv7-m и, возможно, armv8-m ARM вы можете найти адрес поддержки взаимодействия или адрес взаимодействия.И он показывает список инструкций, которые влияют на ПК , но поддерживают или не поддерживают взаимодействие .

Для armv7-a / r я все еще ищу ветку взаимодействия, так что пока я не вижу раздел ... держись ... ищите Переключение между Thumb state и ARM state, и есть раздел, который показывает список инструкций для перехода из состояния большого пальца в состояние охраны и список для перехода из состояния охраны в состояние большого пальца.

ARMv6 (не -M) задает ARM armv5 и armv7, но каждая инструкция / кодировка показывает архитектуру, которая ее поддерживает, поэтому вам, возможно, придется пройти через каждую из ветвей взаимодействияинструкции и посмотрите, есть ли у них поддержка armv6 (также показаны armv4 и armv5).Руководства по armv7 - не вся история, хотя в armv4T / armv5T есть кодировка большого пальца blx, которая не является частью armv6-m / armv7-m, как это было раньше, кодировка blx теперьчасть расширения thumb2.

Основная команда, поддерживаемая во всем этом, - BX, другие инструкции зависят от архитектуры в зависимости от того, можете ли вы использовать их для переключения состояний. Если вы пишете эмулятор, удачи, если вы программируете, вы можете попытаться настроиться на архитектуру, но в случае сомнений просто используйте bx. Обратите внимание, что в arm11-mpcore есть недокументированная ошибка (не более старые arm11s, как в raspberry pi), которая делает предварительную выборку данных после pop pc или ldr pc, если эти данные напоминают инструкцию перехода. Я рекомендую не использовать эти инструкции на mpcore arm11, а вместо этого делать pop-стиль armv4t или загружать в энергозависимый регистр и bx с этим. pop {r3}; bx r3, а не pop {pc}. Побочные эффекты трудно увидеть, цикл чтения может происходить с периферийным устройством, которое воздействует на чтение, чтение из регистра данных на UART и потерю символа, например. Просто к вашему сведению, нам понадобилось время, чтобы найти и подтвердить это.

Попробую добавить код.

...