#assembly #raspberry-pi #arm #32bit-64bit #cpu-registers
Вопрос:
stp x29, x30, [sp, -48]! mov x29, sp str wzr, [sp, 44] bl __isoc99_scanf add x0, x0, :lo12:.LC1 //.LC1 is a function
Не понимаю, как преобразовать его в сборку ARM для raspberry pi
Комментарии:
1. Это уже сборка AArch64 (она же ARM64). Вы имели в виду преобразование 64-разрядного ARM asm во что-то другое, т. Е. из ARM64? например, перенесите его для работы только на 32-разрядном RPi? Это, очевидно, часть существующей функции и не имеет большого смысла как просто фрагмент. т. Е. Мы не знаем, откуда берутся аргументы для scanf; этот код просто сохраняет указатель кадра и регистр ссылок и сохраняет 32-разрядный ноль.
2. Преобразуйте его в 32-разрядную сборку ARM.
3. pi может работать в aarch32 или aarch64, это не специально aarch64. это скомпилированный код? разве вы не можете повторно скомпилировать код более высокого уровня, используя другую цель? В противном случае документация arm для обоих наборов инструкций находится в режиме онлайн, и вы можете просто просмотреть инструкции. в aarch32 не так много регистров, поэтому, конечно, вам решать проблемы с соглашением о вызовах и использованием регистра.
Ответ №1:
Я предполагаю, __isoc99_scanf
что этот код был написан компилятором C, и в этом случае вы можете использовать свой компилятор для преобразования кода C в сборку ARM.