首先,当涉及到手臂装配时,我是新手。我实际上有一些为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]发布于 2014-05-05 21:48:41
根据所使用的ARM指令集和ARM变体的特性,您可能不需要重写太多代码。也有可能您的ARM代码已经与Thumb-2兼容。
一旦Thumb-2被引入,ARM就创建了统一汇编语言,以增加代码的可移植性。你可以在这里找到它的信息:ARM UAL。我发现它与以前的ARM汇编并没有太大的不同,最大的变化是引入了用于条件执行的IT(E)指令。维基百科有一个here的例子。
还有一些其他结构不能直接移植,如果您正在使用Cortex-M4没有的更高级或更复杂的ARM内核的功能,那么将需要重写该部分。
我认为如果代码不是用ARM UAL编写的,虽然这需要时间,但在代码上运行一个脚本来标记UAL没有正确编写的功能的用法将是相对简单的。一个简单的正则表达式可以检查指令末尾的条件,甚至可以相对容易地将这些构造转换为使用IT(E) <cond>。
https://stackoverflow.com/questions/23470779
复制相似问题