Cortex M0 PUSH入栈顺序

因为要知道cortex m0程序调用的帧结构,对PUSH {r0,r1,r2}的入栈顺序不了解,英文文档比较难啃,没找到在那里描述,通过试验的方法得出结果,试验代码:

__asm   volatile   ( " MOV   r0,   #12\n " );
    __asm   volatile   ( " MOV   r1,   #13\n " );
    __asm   volatile   ( " MOV   r2,   #14\n " );
    __asm   volatile   ( " PUSH   {r0,   r1,   r2}\n " );

    pu32SP   =   __get_MSP();

    printf( " 0   %08x\r\n " ,   pu32SP[ 0 ]);
    printf( " 4   %08x\r\n " ,   pu32SP[ 1 ]);
10     printf( " 8   %08x\r\n " ,   pu32SP[ 2 ]);

运行结果

0 0000000c
4 0000000d
8 0000000e

由于cortex m0是递减堆栈,所以可以看到最先入栈的是r2,最后入栈的是r0

PUSH {r0, r1, r2}的入栈顺序是从左到右,r2->r1->r0

你可能感兴趣的:(Cortex M0 PUSH入栈顺序)