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

相关推荐
十年磨一剑~7 小时前
Linux程序接收到sigpipe信号崩溃处理
linux
geshifei8 小时前
Sched ext回调3——select_cpu(linux 6.15.7)
linux·ebpf
代码游侠8 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
你真是饿了8 小时前
6.库制作与原理
linux·服务器
Zach_yuan9 小时前
深入浅出 JSONCpp
linux·服务器·网络·c++
北京迅为10 小时前
《【北京迅为】itop-3568开发板NPU使用手册》- 第 7章 使用RKNN-Toolkit-lite2
linux·人工智能·嵌入式·npu
Dragon~Snow10 小时前
Linux Centos9 安装 Elasticsearch
linux·elasticsearch·jenkins
熊延10 小时前
麒麟V10系统安装部署elasticsearch
linux·运维·服务器·elasticsearch·搜索引擎·全文检索
Jia ming11 小时前
跟踪器与事件使用举例
linux·事件·跟踪器
生活很暖很治愈11 小时前
Linux——基础IO&软硬链接
linux·ubuntu