ARM - Как преобразовать ассемблерный код в машинный язык
Я изучаю ассемблер и пытаюсь понять, как конвертировать ассемблер в машинный язык. Я пытаюсь прочитать исходные тексты и тому подобное, даже спрашиваю своих профессоров, но ни один из них не помог. Это следующий код, над которым я работаю:
MOV R10, #63488
LSL R9, R6, #7
STR R4, [R11, R8]
ASR R6, R7, R3
Я нашел сайт конвертера ARM в HEX, и это преобразование:
3EABA0E3
8693A0E1
08408BE7
5763A0E1
Может кто-нибудь помочь объяснить мне, как это работает? Спасибо вам большое!
2 ответа
Что вам нужно, так это ARM ARM (справочное руководство по архитектуре), которое можно бесплатно загрузить с веб-сайта Arm, хотя вам может потребоваться зарегистрироваться. Содержит кодировку для всех доступных инструкций.
Ответ Колина - это в основном ответ, просто добавив еще немного информации. Инструмент, который вам нужен, называется ассемблером, а не конвертером из руки в шестигранник. Затем вы можете использовать дизассемблер, чтобы увидеть его, например, в вашей программе с использованием инструментов gnu:
arm-none-eabi-as so.s -o so.o
arm-none-eabi-objdump -D so.o
производит
00000000 <.text>:
0: e3a0ab3e mov r10, #63488 ; 0xf800
4: e1a09386 lsl r9, r6, #7
8: e78b4008 str r4, [r11, r8]
c: e1a06357 asr r6, r7, r3
И то, как процессор интерпретирует машинный код, хорошо документировано в ARM ARM, вероятно, начнем с ARMv5, который является более старым и менее сложным. ARMv6, ARMv7 имеют намного больше функций операционной системы и защиты, в основном тот же набор команд, хотя и с большим количеством инструкций, тогда ARMv8 является гибридом с aarch32, более старым набором команд ARMv4-ARMv7, чем полностью новым набором команд aarch64 в том же ядре. Так что руководство по архитектуре google arm, некоторые люди незаконно оставили их лежащими без дела или зайдут на infocenter.arm.com, чтобы получить настоящие.