Как преобразовать это в сборку ARM с 32-разрядной архитектурой

#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.