我正在使用,arm-linux-gnueabi-gcc在Linux中为ARM处理器编译C程序。但是,我不确定它编译的默认ARM模式是什么。arm-linux-gnueabi编译器选项
例如,对于C代码:
test.c的
unsigned int main()
{
return 0x1ffff;
}
arm-linux-gnueabi-gcc -o test test.c
现在
,当我看与objdump的main()函数的拆卸后可以看到:
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的Thumb模式的反汇编(由于推指令)。
如何显示拆卸如下:
.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
但是,我不能按照它在那里显示的方式查看反汇编。
谢谢。
谢谢:)我明白。另外,您是否注意到我上面提到的第二个反汇编示例?在这种情况下,不是移动寄存器中的值,而是从常量CON1加载值。此外,反汇编中不提及像.global,.align,.word这些不同的关键字。 –
我更新了答案,以添加另一种生成装配的方式,您可以在其中播放以获得与您共享的示例类似的输出。另一件事是,你没有注意到他们提到了TI的C/C++编译器。他们可能从该编译器获得了汇编输出。 – auselen