【发布时间】:2019-02-19 02:02:02
【问题描述】:
我在德州仪器公司的 Code Composer Studio 上进行调试,发现当 CPU 处于 ARM 模式时在反汇编视图上显示推送指令。
根据ARM and Thumb Assembler Instructions:
PUSH 在 Thumb 状态下将多个寄存器推入堆栈(对于 ARM 状态使用STM)
Q1:为什么显示的是push指令而不是STM?
我还注意到,在程序开始运行之前,堆栈指针的值已经设置好了。
Q2:栈指针的值是由谁决定的?
程序:
int main(void)
{ // program stops here
OS_ERR err = OS_ERR_NONE;
/*rest of code are omitted*/
}
反汇编:
main():
805dce18: E92D4008 push {r3, lr}
17 OS_ERR err = OS_ERR_NONE;
805dce1c: E3A0C000 mov r12, #0
805dce20: E58DC000 str r12, [sp]
注册:
Name Value Description
CPSR 0x6000019F current program status registers
T 0 If set ARM is in Thumb mode
SP 0x88000F30 stack pointer
【问题讨论】:
-
A1) 只是您的反汇编程序的友好服务。请注意,官方材料建议使用
push,这可能就是反汇编程序将stmdb也显示为push的原因。 A2)打电话给你main的人已经设置好了。至于是不是随机的,我不知道。如果您的操作系统尚未运行,那么它可能不是随机的。 -
SP 寄存器在 main() 被调用之前由启动代码初始化(例如 C 运行时初始化)。