Я использую arm-linux-gnueabi-gcc для компиляции программ C для процессора ARM в Linux. Однако я не уверен, что такое режим ARM по умолчанию, для которого он компилируется.
Например, для кода C:
тест.с
unsigned int main()
{
return 0x1ffff;
}
arm-linux-gnueabi-gcc -o test test.c
теперь, когда я смотрю на разборку функции main() с помощью 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
похоже, что это дизассемблирование для режима Thumb 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
однако я не могу просмотреть разборку так, как она там отображается.
Спасибо.