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

相关推荐
写代码的学渣31 分钟前
运维工程师概述及职责
linux·运维·系统安全
robot_大菜鸟31 分钟前
linux -L4.linux 暂停和启动进程
linux·运维·服务器
南林yan1 小时前
Linux:命令行参数
linux
小鹿( ﹡ˆoˆ﹡ )1 小时前
Excel数据清洗工具:提高数据处理效率的利器
linux·运维·excel
人世间的烟火1 小时前
linux更换阿里镜像源
linux·运维·服务器
陈小也~1 小时前
嵌入式-QT学习-小练习
linux·c++·qt
鹏大师运维2 小时前
【信创】麒麟KOS上安装使用网络抓包工具Wireshark
linux·网络·测试工具·wireshark·国产化·麒麟·kylinos2403
码农研究僧2 小时前
详细分析linux中的MySql跳过密码验证以及Bug(图文)
linux·mysql·bug·密码验证
Q行天下2 小时前
x86的Docker环境下载ARM版容器镜像
arm开发·docker·容器
像风一样自由20203 小时前
Ubuntu系统入门指南:常用命令详解
linux·运维·ubuntu