Сборка ARM: действительно ли "MOV lr, p c" допустимо и принято? - PullRequest
0 голосов
/ 03 марта 2020

Итак, я сейчас изучаю сборку ARM (и абсолютно ЛЮБЛЮ ЭТО!), Выполняя школьное задание, в котором мы используем подпрограммы для вычисления определенного значения. Я знаю, что школьные вопросы не одобряются, но я попробовал все в своем (очень ограниченном) наборе инструментов ARM, чтобы заставить эту программу работать.

Единственная проблема, с которой я столкнулся, заключается в том, что моя программа продолжала возвращаться слишком далеко от возврата из оператора ветвления и перезаписывать значение в регистре, который я собирался использовать. Однако странно то, что он продолжает возвращаться к одному и тому же утверждению MOV, независимо от того, что я делаю. Я могу поместить несколько фиктивных операторов MOV после этого MOV и перед записью для ветви, и она будет go сразу же вернуться к этому верхнему оператору MOV и обработать все, что находится под ним.

В отчаянии я использовал команду "MOV lr, pc", чтобы "принудительно" заставить регистр связи обновляться сразу после этого таинственного оператора MOV перед веткой, и вот, это сработало! Тем не менее, это выглядит как хак-у, так как оно очень статично c, похоже на жесткое кодирование размера массива или что-то в этом роде.

Но я не совсем уверен, как еще это исправить, если это не принято в промышленности или я не могу утверждать, что это верно для ARM7 (big endian), тогда я, вероятно, опубликую свой код в поисках помощи , Итак, это нормально или я должен искать в другом месте? Я хотел бы избежать этого, если возможно, однако, назначение не должно быть до позже на этой неделе.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...