堆栈指针从寄存器读取不正确的值
Stack Pointer reading incorrect value from register
为什么堆栈指针寄存器没有从另一个寄存器读取正确的值?当我将值从寄存器 (r0) 移动到堆栈指针 (r13) 时,SP 读取不正确的值。
这是什么意思:
MOV R0, 10
MOV R13, R0
在这种情况下,"A" 应该移动到 R13,但它变成了 8。
同样,
MOV R0, 9
MOV R13, R0
在这种情况下,R13 存储 8 而不是 9。
这是一个演示问题的简单程序,
void Init()
{
__asm(
"LDR R0, =0x3FFFFDA7\n"
"MOV R13, R0\n"
);
}
int main(void)
{
Init();
return (1);
}
void SystemInit(void)
{
}
这里没有发生太多事情。只是一个简单的函数调用。在函数内部,我将地址移动到 r0。然后我将地址移动到 R13(SP),但不是实际地址,即 0x3FFFFDA7,SP 收到 0x3FFFFDA4。
图像显示了拆卸,
那么这是怎么回事?为什么堆栈指针寄存器读取的值不正确?
我在 C 中使用 ARM 内联汇编。IDE 是 KEIL。
提前致谢。
对于那些可能觉得这有帮助的人。
armv7 的堆栈指针必须对齐 4 字节。您可以在那里写 0、4、8、12、16 等,但不能写 9、10、F 等
因此,如果您想将任何值移动到 Stack-Pointer,请确保它是 4 字节对齐的。
为什么堆栈指针寄存器没有从另一个寄存器读取正确的值?当我将值从寄存器 (r0) 移动到堆栈指针 (r13) 时,SP 读取不正确的值。 这是什么意思:
MOV R0, 10
MOV R13, R0
在这种情况下,"A" 应该移动到 R13,但它变成了 8。 同样,
MOV R0, 9
MOV R13, R0
在这种情况下,R13 存储 8 而不是 9。
这是一个演示问题的简单程序,
void Init()
{
__asm(
"LDR R0, =0x3FFFFDA7\n"
"MOV R13, R0\n"
);
}
int main(void)
{
Init();
return (1);
}
void SystemInit(void)
{
}
这里没有发生太多事情。只是一个简单的函数调用。在函数内部,我将地址移动到 r0。然后我将地址移动到 R13(SP),但不是实际地址,即 0x3FFFFDA7,SP 收到 0x3FFFFDA4。 图像显示了拆卸,
那么这是怎么回事?为什么堆栈指针寄存器读取的值不正确?
我在 C 中使用 ARM 内联汇编。IDE 是 KEIL。
提前致谢。
对于那些可能觉得这有帮助的人。
armv7 的堆栈指针必须对齐 4 字节。您可以在那里写 0、4、8、12、16 等,但不能写 9、10、F 等
因此,如果您想将任何值移动到 Stack-Pointer,请确保它是 4 字节对齐的。