Итак, я сейчас изучаю сборку ARM (и абсолютно ЛЮБЛЮ ЭТО!), Выполняя школьное задание, в котором мы используем подпрограммы для вычисления определенного значения. Я знаю, что школьные вопросы не одобряются, но я попробовал все в своем (очень ограниченном) наборе инструментов ARM, чтобы заставить эту программу работать.
Единственная проблема, с которой я столкнулся, заключается в том, что моя программа продолжала возвращаться слишком далеко от возврата из оператора ветвления и перезаписывать значение в регистре, который я собирался использовать. Однако странно то, что он продолжает возвращаться к одному и тому же утверждению MOV
, независимо от того, что я делаю. Я могу поместить несколько фиктивных операторов MOV
после этого MOV
и перед записью для ветви, и она будет go сразу же вернуться к этому верхнему оператору MOV
и обработать все, что находится под ним.
В отчаянии я использовал команду "MOV lr, pc
", чтобы "принудительно" заставить регистр связи обновляться сразу после этого таинственного оператора MOV
перед веткой, и вот, это сработало! Тем не менее, это выглядит как хак-у, так как оно очень статично c, похоже на жесткое кодирование размера массива или что-то в этом роде.
Но я не совсем уверен, как еще это исправить, если это не принято в промышленности или я не могу утверждать, что это верно для ARM7 (big endian), тогда я, вероятно, опубликую свой код в поисках помощи , Итак, это нормально или я должен искать в другом месте? Я хотел бы избежать этого, если возможно, однако, назначение не должно быть до позже на этой неделе.
Заранее спасибо!