【发布时间】:2014-05-05 10:55:48
【问题描述】:
首先,我是 ARM 组装的新手。我实际上有一些为 ARM 指令集编写的代码,但我的目标是使用 Thumb-2 指令集的 Cortex-M4 架构。我是否必须重新编写整个代码、更改部分代码或保持原样?
我实际上有几个文件,每个文件大约 250 行。这是一个示例
msr cpsr_c, #(CPSR_IRQ_LOCKED | CPSR_SVC_MODE)
stmfd sp!, {r0-r2,lr}
mrs r1, spsr
stmfd sp!, {r1}
ldr r1, =nested_kernel_entrance_counter
ldr r2, [r1]
add r2, r2, #1
str r2, [r1]
cmp r2, #1
bhi skip_kernel_enter
#if WITH_MEMORY_PROTECTION == YES
stmfd sp!, {r3}
bl tpl_mp_kernel_enter
ldmfd sp!, {r3}
#endif
ldr r1, =tpl_kern
mov r2, #NO_NEED_SWITCH
strb r2, [r1, #TPL_KERN_OFFSET_NEED_SWITCH]
【问题讨论】:
-
我希望你的旧代码不是很大。 wiki.ubuntu.com/ARM/Thumb2PortingHowto
-
大部分代码都必须重写。这两个指令集在同一个寄存器集上运行,但采用了非常不同的方法。唯一可以单独使用的指令是 NEON。
-
试试吧,为 cortex-m4 组装并修补汇编程序投诉,这是最快的方法...如果您已经或曾经使用过统一语法,那么它会毫无怨言地跨越。
-
我认为 thumb2 的一个特点是恢复了大部分 arm 语法/功能,但使用可变长度指令集可以节省一点代码空间,而不会牺牲性能。对于相同的任务,早期的拇指只比手臂慢 10% 左右
标签: assembly arm instruction-set thumb cortex-m