arm启动代码总结

一、指令概括

1.ldr:加载内容到寄存器 ldr sp, =0x40001000(将地址加载入sp寄存器中)

2.b:跳转到对应标志地方 bx lr:将lr寄存器保存的地址返回到pc中 bl:跳转前将pc地址保存在lr寄存器中

3.stmfd sp!,{r0-r12,lr} :压栈,将{}里面内容压入栈中保存

ldmfd sp!,{r0-r12,lr} :弹栈,将栈里面保存的{}里面的内容返回

ldmfd sp!,{r0-r12,pc}^ :^自动切换回User模式,将lr地址直接返回到pc中

4.import :c文件中的函数在汇编文件调用时使用

export :汇编文件中的函数在c文件调用时使用

5.swi #7 :软中断产生直接跳到初始化的软中断向量处

6.mrs r0, cpsr :将系统状态寄存器写入通用寄存器(用于修改模式)

msr cpsr_c, r0

7.bic r0, r0, #(0x1F << 0) :清零低五位

orr r0, r0, #(0x10 << 0) :第五位置1

8.sub、add :加减法

9.mov :寄存器赋值

10.ge:greater equal lt :小于 cmp:比较

11.str r1, [r0], #4 :*p++ 都是单目运算自右结合,后置++先用再偏移 (这里是地址偏移),值存储在0x40000000中,r0指向了0x40000004

str r1, [r0, #4] :先偏移在0x40000004,值存在0x40000004中

二、伪指令执行完,异常处理向量必须按序写,因为每一个地址都是固定的

三、arm汇编用c语言函数以及c语言函数调用汇编编写的函数,函数的参数和返回值如何处理?

1.汇编调用c语言:①import+函数名:导入要调用的函数 ②如果参数小于5个值,汇编中使用mov r0, #10形式赋值,返回值默认存储在r0寄存器内 ③如果参数大于4个值,第5个值及后面的值需要压栈和弹栈 ④c语言中正常写此函数

2.c语言调汇编:①export+函数名:汇编中要导出的函数 ②c语言中函数直接传参 ③返回值通过mov可将存有结果值得通用寄存器赋值给r0寄存器,通过r0寄存器返回

四、aem内核中有几种异常分别是什么,会时内核切换到那种工作模式?

1.复位(Reset):系统上电或者硬件复位时,内核进入特权模式(Supervisor)

2.未定义指令(Undefined Instruction):执行无效指令时触发,内核进入未定义模式(Undefined)

3.软件中的(SWI/SVC):通过软件指令(svc/swi)主动触发,内核进入特权模式

4.预取中止(Prefetch Abort):指令预取失败时触发,内核进入中止模式(Abort)

5.数据中止(Data Abort):数据访问失败时触发,内核进入中止模式(Abort )

6.外部中断(IRQ):普通硬件中断触发,内核进入中断模式(IRQ)

7.快速中断(FIQ):高优先级硬件中断触发,内核进入快速中断模式(FIQ)

五、内核切换模式步骤

六、状态寄存器

(一)条件位:28-31位

1.N:运算结果正负标志

2.Z:运算结果是否为0

3.C:是否有进位或者借位标志

4.V:运算结果是否溢出标志

(二)Mode位:0-4

(三)细节图

七、ARM使用环境配置

(一)Windows系统使用vs code写代码

(二)Ubuntu下交叉编译

(三)编译器使用:Linaro GCC 4.9-2017.01

相关推荐
国科安芯1 小时前
核电厂执行器控制系统中的抗辐照MCU选型:为什么需要150krad(Si) TID指标?
服务器·单片机·嵌入式硬件·fpga开发·架构
云数据构建师1 小时前
TB62262FTAG芯片应用和设计电路图
单片机·嵌入式硬件·fpga开发
XINVRY-FPGA1 小时前
5CEFA9F23I7N Altera CycloneV E(Enhanced)FPGA
人工智能·嵌入式硬件·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
Rock_yzh1 小时前
LeetCode算法刷题——49. 字母异位词分组
数据结构·c++·学习·算法·leetcode·职场和发展·哈希算法
Wayfreem1 小时前
Spring AI Alibaba 学习之最简单的快速入门
人工智能·学习·spring
再玩一会儿看代码1 小时前
Ken的Java学习之路——Java中关于面向对象
java·开发语言·经验分享·python·学习
Pluchon3 小时前
硅基计划6.0 伍 JavaEE 网络原理
网络·网络协议·学习·tcp/ip·udp·java-ee·信息与通信
编码追梦人8 小时前
从零入门嵌入式系统:核心概念 + 环境搭建 + 传感器实战
单片机·嵌入式硬件
椰壳也可9 小时前
06_作业基于CubeMx实现按键控制LED灯(裸机)(立芯嵌入式笔记)
笔记·stm32·学习
im_AMBER11 小时前
Leetcode 52
笔记·学习·算法·leetcode