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, чтобы получить настоящие.

Другие вопросы по тегам