为什么在ARM模式而不是STM中使用的推动指令?

问题描述 投票:0回答:1
尽管在Coposer Studio(Texas Instruments)中使用CPU进行调试,但我在拆卸视图中观察了推动指令。 根据

臂和拇指汇编器说明

Push将多个寄存器推到拇指状态的堆栈(手臂 状态使用STM)

如上所述,推动指示在拇指状态下使用,而STM则在ARM状态中使用。
Q1:为什么使用推送指令在手臂模式下使用而不是STM?

我还注意到,在程序开始运行之前,已经设置了堆栈指针的值。
Q2:堆栈指针的值由谁决定?

程序:

int main(void) { // program stops here OS_ERR err = OS_ERR_NONE; /*rest of code are omitted*/ }

disAssembly:

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

对于Q1)请注意,您给出的链接是针对ARMV6 Architecture
。 如果您的情况在该案件中保持不变,请小心。

,也是ARM信息中心

给出答案:

  
assembly arm embedded
1个回答
2
投票

如果您想检查有关此问题的整个讨论,请在Ti的讨论论坛中参考Herey。

对于Q2)堆栈指针初始化位置位于您的二进制文件中。输出二进制中的前四个字节表示要初始化堆栈指针的位置。您可以修改此值以及链接文件中的堆栈大小。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.