arm体系结构编程

  • 1 基本概念
  • 2 ARM编程模型
  • 2.1 工作模式
  • 2.2 工作状态
  • 2.3 寄存器组织结构
  • 2.3.1 和特殊功能寄存器的区别
  • 2.3.2 arm寄存器个数


1 基本概念

RISC,精简指令集 arm
CISC,复杂指令集 intel

指令集 架构 SOC
armv4t ARM7 S3C44B0 之前都是三级流水线
ARMV5TE ARM9 s3c2410/s3c2440
ARMV6 ARM11 s3c6410
ARMV7 cortex-A s5pv210
R系列
M系列
ARMV8 A53 s5p6818

cortex-A: 高大尚领域 多媒体数据的处理
cortex-R: 高实时领域
cortex-M: 以单片机的价格实现32bit运算能力 stm32
老产品的升级改造,全新产品的研发

三级流水线:取指令 解码指令 执行指令

arm7 ,三级流水线
arm9, 五级流水线

2 ARM编程模型

2.1 工作模式

SVC(管理模式)  系统上电/执行了软中断指令
  FIQ(快速中断模式) 发生了高优先级中断
  IRQ(中断模式)  发生了低优先级中断
  ABORT(中止模式) 产生了非法的存储器访问
  UNDEF(未定义模式) 执行到不认识的指令
  SYSTEM(系统模式)
  USER(用户模式) 对应了用户态
  
  前5种称作异常工作模式
  前6种称作特权工作模式

2.2 工作状态

有2种工作状态

arm状态: 执行arm(32bit)指令时,每条指令32bit位

可通过反汇编获得汇编代码:arm-cortex_a9-linux-gnueabi-objdump -S shell >1.asm

onlyoffice arm架构编译 arm架构编程_反汇编


thumb状态:执行thumb(16bit)指令时,thumb指令占据存储空间小,但是代码执行效率低 。

onlyoffice arm架构编译 arm架构编程_arm_02

arm工作状态和thumb工作状态可以相互切换,但是异常处理过程必须处于ARM工作状态 ,因为异常处理有时序要求,必须快速处理
arm指令代码执行效率高(指令占用空间大,效率高,空间换时间)

2.3 寄存器组织结构

2.3.1 和特殊功能寄存器的区别

arm寄存器与我们常说的特殊功能寄存器不同
1)所在的位置不同
寄存器位于ARM core中
特殊功能寄存器位于s5p6818
2) 访问方式不同
特殊功能寄存器都有特定的物理地址
寄存器只有名字没有地址 很难用C语言访问的
3)作用不同
特殊功能寄存器是软件控制硬件的媒介
寄存器…

2.3.2 arm寄存器个数

arm中有37个32bit的寄存器,其中有31个通用寄存器 r0 r1 r2 …r15(有重名的)
其中有31个通用寄存器 r0 r1 r2 …r15(有重名的)

r11(fp .....)  
            r13(sp 栈指针寄存器,c语言中常说的栈)
            r14(lr 保存函数的返回地址)
            r15(pc 保存取指令的地址)  
              
          有6个状态寄存器
            1个程序状态寄存器 cpsr
               [4:0] mode 当前arm处于哪种工作模式
               [5]   T   =1,处于THUMB工作状态
                         =0,处于ARM工作状态
               [6]   F   =1, 屏蔽FIQ
                         =0,使能FIQ
               [7]   I   =1, 屏蔽IRQ
                         =0,使能IRQ
               [28]  V   overflow, 带符号数据运算最高位是否溢出(忽略)
               [29]  C   carry    =1, 最高位有进位
                                      0xfffffffc + 8   C会被置1
                                      0xfc + 8    C=0 
               
               [30]  Z   zero     =1, 运算结果为0
                                  =0,运算结果为非0
               [31]  N   negative =1, 运算结果为负数
                                  =0,运算结果非负
               
            5个状态寄存器 spsr,作为cpsr的备份寄存器 
       每种工作模式下只能访问其中一个子集

onlyoffice arm架构编译 arm架构编程_工作模式_03