arm 模式栈初始化

初始化 栈的一般的步骤,

首先要 切换到特定的模式,

然后是 将栈地址 给到PC指针。

有多少种模式就有多少种 栈地址。

PC 寄存器 是R13

每种模式都有自己的 R13

每种模式 都要初始化自己的R13

一共这个多的模式

那么CPU 怎么区分 处于何种模式呢?

就是通过 CPSR的 后5个 bit 来判断的。

复制代码
	area reset,code
	code32
	entry
start
 	bl stack_init
stack_init                      ; 栈指针初始化函数
;    @undefine_stack                                       
    msr cpsr_c,#0xdb             ; 切换到未定义异常
    ldr sp,=0x34000000      ; 栈指针为内存最高地址,栈为倒生的栈
                             ; 栈空间的最后1M 0x34000000~0x33f00000
;    @abort_stack                                                      
    msr cpsr_c,#0xd7                ; 切换到终止异常模式
    ldr        sp,=0x33f00000       ; 栈空间为1M,0x33f00000~0x33e00000
 ;   @irq_stack                                                
    msr      cpsr_c,#0xd2            ; 切换到中断模式
    ldr        sp,=0x33e00000        ; 栈空间为1M,0x33e00000~0x33d00000
 ;   @ sys_stack                                               
    msr  cpsr_c,#0xdf              ; 切换到系统模式
    ldr  sp,=0x33d00000           ; 栈空间为1M,0x33d00000~0x33c00000
    msr  cpsr_c,#0xd3           ; 切换回管理模式
    mov pc,lr	
	end

一共设置了 5种模式 的 SP

相关推荐
C-DHEnry19 分钟前
Linux 不小心挂载错磁盘导致无法启动系统咋办
linux·运维·服务器·雨云
hakukun3 小时前
Ubuntu启动时volume报错无法进入系统问题解决
linux·ubuntu
qq_401700413 小时前
Linux磁盘配置与管理
linux·运维·服务器
hoo3434 小时前
【SolidWorks2025】3D CAD 软件:机械设计安装 + 补丁教程
linux
先知后行。4 小时前
STM32常问问题
linux
Code Warrior5 小时前
【Linux】传输层协议UDP
linux·运维·udp
Evan芙5 小时前
Bash 变量命名规则与类型使用
linux·运维·开发语言·chrome·bash
濊繵6 小时前
Linux网络--Socket 编程 TCP
linux·网络·tcp/ip
menge23336 小时前
Linux网站搭建
linux·运维·网络
Bruce_Liuxiaowei6 小时前
Kali Linux 加入 Windows 域实战指南:解决域发现与加入失败问题
linux·运维·windows