我试图将代码从代码内存复制到堆栈,然后在堆栈中使用该代码执行。我使用以下函数
;Personal Function
IMPORT extfunc
EXPORT func
func
LDR R0,=extfunc;Function in C
LDR R1,=0x00000000;Counter for Counting instructions when i make code generic
PUSH {LR};For nested call
ADD R3,SP,#0x00;move
SUB SP,#0x10;As stack grows upwards, we just make space for 10 instructions for testing
ADD R5,SP,#0x0;Where we branch after copying
LOOP
LDR SP,[R0];Load in stack instruction
ADD R1,R1,#0x01;instruction count
ADD R0,#0x04;next C instruction address
ADD SP,#0x04;next instruction address
CMP R1,#0x10;Copy 10 instructions
BLT LOOP
ADD R0,PC,#0x0C;Get ready for branching
ADD LR,R0,#0x00;LR prepared
ADD PC,R5,#0x00;GO
ADD SP,R3,#0x00;When we return restore the SP
POP {LR}
BX LR但我得到以下错误
startup_XMC4500.s(335):错误: A1477E:此寄存器组合会导致不可预测的行为 startup_XMC4500.s(336):错误: A1477E:这种寄存器组合会导致不可预测的行为
显然,您不能将PC移动到任何在运行时计算的任意地址,有人能告诉我解决这个问题的方法吗?
发布于 2015-09-28 08:26:21
事实证明,不能通过添加具有某些值的寄存器并将其存储回去来操作特殊寄存器,您将不得不使用显式加载或存储指令。
https://stackoverflow.com/questions/29329095
复制相似问题