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

相关推荐
石像鬼₧魂石5 小时前
如何配置Fail2Ban的Jail?
linux·学习·ubuntu
椰子今天很可爱6 小时前
五种I/O模型与多路转接
linux·c语言·c++
Lueeee.6 小时前
Linux kernel Makefile 语法
linux
切糕师学AI7 小时前
ARM 架构中的 CONTROL 寄存器
arm开发·硬件架构·嵌入式·芯片·寄存器
爱吃山竹的大肚肚8 小时前
EasyPOI 大数据导出
java·linux·windows
极地星光8 小时前
dmesg 工具的核心功能与作用
linux
福尔摩斯张9 小时前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
hgz071010 小时前
Linux服务器环境部署与JMeter压测准备
linux·服务器·jmeter
ShirleyWang01210 小时前
VMware如何导入vmdk文件
linux·数据库
Lueeee.10 小时前
内核menuconfig配置实验
linux