Я использую, arm-linux-gnueabi-gcc для компиляции программ C для процессора ARM в Linux. Однако я не уверен, что такое режим ARM по умолчанию, для которого он компилируется.Параметры компилятора arm-linux-gnueabi
Например, для кода C:
test.c
unsigned int main()
{
return 0x1ffff;
}
arm-linux-gnueabi-gcc -o test test.c
теперь, когда я смотрю на разборке основной функции() с objdump, я могу видеть:
arm-linux-gnueabi-objdump -d test
<main>:
push {r7}
add r7, sp, #0
movw r3, #65535 ; 0xffff
movt r3, #1
mov r0, r3
mov sp, r7
pop {r7}
bx lr
похоже, что это разборка для режима громкоговорителей ARM (из-за команды push).
Как я могу отобразить разборку следующим образом:
.sect ".text"
.global _fn
_fn: MOVW A1,#65535
MOVT A1,#1
BX LR
или это
.sect ".text"
.global _fn
_fn: LDR A1, CON1
BX LR
.sect ".text"
.align 4
CON1: .word 0x1ffff
Я видел этот пример здесь:
http://e2e.ti.com/support/development_tools/compiler/f/343/t/40580.aspx
однако, я не могу просмотрите разборку так, как она отображается там.
Спасибо.
Спасибо :) Я понял. Кроме того, вы заметили второй пример разборки, упомянутый выше? В этом случае вместо перемещения значения в регистре A1 он загружает значение из константы CON1. Кроме того, в разборке не упоминаются разные ключевые слова, такие как .global, .align, .word. –
Я обновил ответ, чтобы добавить еще один способ создания сборки, где вы можете играть, чтобы получить аналогичный вывод, например, вы поделились. Другое дело, вы не замечаете, что они упоминают компилятор TI C/C++. Вероятно, они получили сборку этого компилятора. – auselen