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

相关推荐
__如风__1 小时前
内网环境下ubuntu 20.04搭建深度学习环境总结
linux·服务器·ubuntu
学c语言的枫子1 小时前
Linux文件IO——系统IO
linux·运维·服务器
敲上瘾1 小时前
Docker网络实战:容器通信与隔离之道
linux·网络·docker·微服务·容器
知北游天2 小时前
Linux网络:初识网络
linux·运维·网络
染指11102 小时前
13.渗透-.Linux基础命令(五)-用户管理(修改用户密码)
linux·运维·服务器·linux命令
wheeldown2 小时前
【Linux】面试常考!Linux 进程核心考点:写时拷贝优化原理 + 进程等待实战,一篇理清进程一生
linux·运维·服务器·面试·php
歪比巴卜__3 小时前
【系列文章】Linux中的并发与竞争[02]-原子操作
linux
MyCollege19997 小时前
win10使用ssh访问vmware虚拟机
linux·运维·centos
许怀楠9 小时前
【主页介绍】
linux·c++·贪心算法·visual studio
大聪明-PLUS10 小时前
GCC 对 C 语言的扩展
linux·嵌入式·arm·smarc