0

首先,我是 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]
4

1 回答 1

1

根据您使用的 ARM 指令集和 ARM 变体的哪些功能,您可能不需要重写太多。您的 ARM 代码也可能已经与 Thumb-2 兼容。

ARM 在引入 Thumb-2 后就创建了统一汇编语言,以提高代码的可移植性。您可以在此处找到相关信息:ARM UAL。我发现这与过去的 ARM 汇编并没有太大的不同,最大的变化是引入了IT(E)条件执行指令。维基百科在这里有一个例子。

还有一些其他结构不会直接移植,如果您使用的是 Cortex-M4 没有的更高级或更复杂的 ARM 内核的功能,则需要重写该部分。

我认为,如果代码尚未用 ARM UAL 编写,虽然这需要时间,但在代码上运行脚本会相对简单,该脚本可以标记未为 UAL 正确编写的功能的使用。一个简单的正则表达式可以检查指令末尾的条件,然后将这些构造转换为使用可能相对容易IT(E) <cond>

于 2014-05-05T13:48:41.413 回答