Я пытаюсь написать модем прошивки (к существующей прошивке, для которой у меня нет исходного кода) Весь код большого пальца.Код ARM/Thumb для исправлений прошивки ... Как рассказать gcc-ассемблер/компоновщик к BL к абсолютному addr?
ли кто-нибудь есть идеи, как сделать это, в gcc as
(GAS) ассемблере: Использование BL
без необходимости вручную вычислять смещения, когда BL
«ИНГ некоторые существующие функции (не в моем коде .. но я знать его адрес)
в настоящее время, если я хочу использовать BL
... я должен: -Перейти назад в моем коде -figure из и добавить все байты, которые будут получены в результате сборки всех предыдущих инструкций в function Я пишу -add начальный адрес моей функции к этому (я указываю начальный адрес того, что я пишу, в сценарии компоновщика) , а затем вычесть адрес функции firmfunc, которую я хочу назвать
Все это ... просто для расчета смещения ... для возможности написать смещение bl
... для вызова существующей функции прошивки? И если я изменю любой код до BL, я должен сделать это заново вручную!
См .. поэтому я хочу научиться использовать BX
право ... вместо BL
Кроме того, я не совсем понимаю BX. Если я использую BX для перехода на абсолютный адрес, мне нужно увеличить фактический адрес на 1, когда вы закачиваете код Thumb из кода Thumb (чтобы сохранить байт lsb 1) ... и CPU будет знать, что это код большого пальца?
теперь, если вы посмотрите на кодировке для бл инструкции относительно не является абсолютным, вы можете переходить только на адреса относительно счетчика команд. Это набор инструкций с фиксированным набором слов, вам нужно либо использовать bx, который позволяет переключать режим, но ограничивается регистрами, использовать его, как я показал выше или, если возможно, на основе режима (возможно, работает только в режиме руки) ldr pc , = function_name, которое является длинной ветвью и использует другое слово (например, переменную длину слова), но как bx является веткой, а не веткой. –
Спасибо, за хорошее объяснение. Но я хотел бы иметь возможность BL для существующих функций большого пальца в прошивке, для которых я знаю адрес. Таким образом, мне не нужно связываться с LR, но я не знаю, как это сделать в ассемблере ... или скрипте компоновщика ... например, если я делаю BL LABEL, я должен сказать ассемблеру, какой адрес LABEL есть ... потому что это не в моем коде ... и не знаю, как сказать, что – vmanta
я приму ответ, это хорошая информация ... все равно, если кто-нибудь знает .. ответ pls. Должен быть способ. Как ссылка компоновщика на импортируемые вами функции (внешние функции кодовых вызовов) - какая директива для использования в сценарии asm или компоновщика? – vmanta