arm底层汇编
目录
前言
在学习和工作中,遇到关于嵌入式程序运行的困惑,通过底层汇编,可以知道arm怎么做到保护现场、linux怎么做到安全运行和系统调用等。
arm发展简介

指令集的设计是处理器结构中最重要的一个部分,用ARM的术语称之为ISA(Instruction Set Architecture)。根据不同的指令集进行区分,ARM11芯片之后,也就是从ARMv7架构开始,ARM的命名方式有所改变。新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。(A、R、M),比较熟悉,stm32F4是cortex-M4,imx6ull是cortex-A7。2011 年 10 月,arm公司推出armv8架构,从之前32位到64位,支持64位指令集,在内存、虚拟化和安全有了一定的提升。2021年,arm已经推出armv9。
一、32位 ARMv7
以cortex-M为例
ARM主要有7种基本工作模式,USER、FIQ、IRQ、Supervisor、Abort、Undef和System。如果cortex-A会多出2种,安全监控模式(mon):可在安全模式和非安全模式下转换;HYP虚拟化模式。


1、bank寄存器
带有三角,表示bank 寄存器,该模式下独有的寄存器,没有带三角,表示各个模式共用这部分寄存器。
什么是寄存器?
存放数据的地方,cpu内部访问,读取速度最快。
2、特殊寄存器
r15 PC程序计数器(Program Counter),存储下一条要执行的指令的地址。
r14 LR 连接寄存器(Link Register ),保存函数返回地址,当通过BL或BLX指令调用函数时,硬件自动将函数返回地址保存在R14寄存器中。当函数完成时,将LR值传到PC,即可返回到被调用位置。
r13 SP 堆栈指针(Process Stack Pointer),保护现场和恢复现场要用,当发生异常的时候,硬件会把当前状态(使用到寄存器数值)保存在堆栈中,SP保存这个堆栈指针,异常处理完成,通过SP出栈,恢复到异常前的状态。
CPSR程序状态寄存器(current program status register),CPSR和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义.而CPSR寄存器是按位起作用的,也就是说,它的每一位都有专门的含义。


二、汇编指令
思考下C语言编译流程,预处理(preprocessing),对头文件和宏展开→编译(compilation),将展开后的程序转成汇编代码→汇编,将汇编代码转成零一二进制机器码,目标文件;链接,将多个目标文件链接成可执行的文件。
现在我们介绍汇

本文深入介绍了ARM处理器的发展,重点讲解了32位ARMv7架构的汇编指令和工作模式,包括寄存器、中断向量表以及现场保护。同时,探讨了64位ARMv8架构的新增特性,如64位指令集、异常处理和AArch64模式。通过示例代码展示了汇编指令的使用,并解释了如何从用户层进入内核层、中断处理和系统调用的工作原理。

3432

被折叠的 条评论
为什么被折叠?



