1.ARM汇编基础

来源:互联网 发布:新郎接亲游戏知乎 编辑:程序博客网 时间:2024/06/06 19:46

1.ARM编程模型

RSIC:精简指令集

CSIC:复杂指令集

   ARM流水线:

冯诺依曼架构

取指令和取数据用一套总线

ARM7三级流水线,取值、译码、执行

哈佛架构

取指令和取数据是两套总线

ARM9五级流水线

2.ARM编程模型
  2.1 工作模式
      SVC(管理)模式,系统上电 执行swi指令 (内核态)
      FIQ(快速中断)模式, 产生了FIQ类型异常
      IRQ(中断)模式, 产生IRQ类型异常
      ABORT(中止)模式,非正常的存储器访问 
      UNDEF(未定义)模式,用于处理未定义的指令     
      system(系统)模式
      user(用户)模式 (用户态)
      
      前五种统称为异常模式
      前六种统称为特权模式

   2.2 工作状态
      ARM状态   :当执行ARM(32bit)指令
      THUMB状态 : 当执行THUMB(16bit)指令
  2.3 ARM寄存器组织结构
      特殊功能寄存器和ARM寄存器区别:
        1)存在的位置不同
           ARM寄存器位于ARMcore
           特殊功能寄存器位于S5PV210内
        2)特殊功能寄存器都有唯一的物理地址
           可以利用C语言的指针编程访问
           
           ARM寄存器没有地址,只有名称,
           通过C语言很难访问到它们
      有37个32bit寄存器,
      其中有31个通用寄存器,分别命名为
           r0 r1 r2 r3 ... r15
           
           
           约定成俗:
               r13(sp, stack poniter 栈指针寄存器)
               r14(lr, 保存函数的返回地址)
               r15(pc, )


6个程序状态寄存器
         cpsr
            [4:0], 模式位,标识当前处理处于哪种工作模式
            [5], T 为1时表明当前处理器工作于THUMB状态
                          0                                            ARM
            [6], F FIQ屏蔽位
            [7], I  IRQ屏蔽位
            [31:28]
                 N 如果运算结果为负数N被置位( 设置为1)
                 Z 如果运算结果为0,Z被置位
                 C 如果预算过程中最高位有进位C被置位
                 V 有符号数运算时如果有溢出会置位


        
         5个spsr, 作为CPSR的备份寄存器
         
      每种工作模式下只能访问37个寄存器的一个子集


    2.4 ARM异常与异常向量表
      ARM会产生7种异常
         reset,复位异常
               当按下复位键,会导致ARM进入SVC模式
         undef,未定义异常
               执行到不能识别的指令
               会导致ARM进入undef模式
         swi, 软中断异常
              当执行到汇编指令 “swi  n”
               会导致ARM进入SVC模式
         pretch abort,取指令访问了非法地址
               会导致ARM进入ABORT模式
         data abort, 取数据访问了非法地址 
                会导致ARM进入ABORT模式               
         IRQ, 中断异常
              按键 设备收发数据完毕
              会导致ARM进入IRQ模式
         FIQ, 快速中断异常
              会导致ARM进入FIQ模式 
     当异常产生时,硬件自动完成的工作:
        1)自动备份CPSR 到SPSR_<mode> 
        2)修改CPSR
               mode,
               T=0,异常处理代表必须是ARM指令
               F=1
               I=1,屏蔽FIQ IRQ异常
        3)保存返回地址到LR_<mode> 
        4) 设置PC为相应的入口地址
            reset PC=0x00 一条ARM指令
            undef PC=0x04
            swi   PC=0x08
            pretch PC=0x0c
            daabor PC=0x10
            IRQ   PC=0x18
            FIQ   PC=0x1c      
      当异常返回时,软件必须完成的工作
         1)从SPSR_<mode>恢复CPSR 
         2) 从LR_<mode>恢复PC    


1 0
原创粉丝点击