RAM体系结构

本文详细介绍了ARM处理器的指令集类型,如RISC和X86,并列举了常见的ARM核及应用,如Cortex系列。深入探讨了流水线原理、工作模式、寄存器组织结构,特别是异常处理机制和异常向量表。此外,还讨论了数据对齐、数据类型以及大小端模式。ARM处理器在32位和16位指令间的切换以及其在异常处理时的寄存器备份和恢复过程也得到了阐述。

RISC,精简指令集    ARM
ISC,complex 复杂指令集    X86
  
   指令集       ARM核        SOC
   ARMV4      ARM7        s3c44b0
   ARMV5      ARM9        s3c2410/s3c2440
   ARMV6      ARM11      s3c6410
   ARMV7
   ARMV8      cortx-A:     sp56818 (cortex-A53)
                          高大尚领域 多媒体数据处理 例如手机 PC
                      cortx-R:
                          real time 高实时性领域
                      cortx-M:
                          以单片机的价格实现32bit处理器能力
                           stm32
1、流水线
     三级流水线:取指令 解码指令 执行指令
     for(i=0; i<1000000; i++)
     {
         for(j=0; j<100; j++)
         {
             ...
         }
     }      
     
     for(j=0; j<100; j++)    //这种方式代码执行效率高(外层循环次数越少效率越高)
     {
         for(i=0; i<1000000; i++)
         {
              ...
         }
     }
  经典书籍:ARM体系结构与编程.pdf
                    ARM嵌入式系统开发:软件设计与优化.pdf
     
2、工作模式
    ARM有7种工作模式
       1、SVC:  管理模式              系统上电  (内核态)
       2、FIQ:  快速中断模式        产生了高优先级中断
       3、IRQ:  中断模式               产生了低优先级中断
       4、Abort:终止模式            产生了非法的存储器访问
       5、Undef:未定义模式       执行到非法的指令
       6、System:系统模式
       7、User:用户模式         (用户态)
    前5种称为异常模式,前6种称为特权模式

3、工作状态
    arm状态, 执行32bit机器指令时
    thumb状态, 执行16bit机器指令时 
    这种两种工作状态软件可以控制自由切换
    当处理异常代码时,异常代码必须是ARM指令

4、寄存器组织结构
     寄存器与特殊功能寄存器的区别:
        1)存在位置不同
           寄存器在ARM 核内
           特殊功能寄存器在ARM 核外
        2)访问方式不同
           寄存器只有名字没有地址,C语言很难访问到
           特殊功能寄存器都有特定的物理地址,可以通过指针访问
        3)功能不同
           特殊功能寄存器是驱动硬件的媒介
     
     ARM核中有37个32bit的寄存器
     其中有31个通用寄存器,被命名为r0 r1 r2 ... r15
               r13(sp, 栈指针寄存器)
               r14(lr, 保存函数的返回地址)
               r15(pc, 取指令的地址)
     
     有6个状态寄存器      
           1个CPSR寄存器
              [4:0]  MODE,工作模式
              [5]     T =0 处于ARM工作状态,T =1 处于thumb工作状态
              [6]     F  0/1 使能/禁止 FIQ异常
              [7]     I  0/1 使能/禁止 IRQ异常
              [28]   V  overflow 有符号数据运算是否溢出 (忽略)
              [29]   C  CARRAY 最高位(第31bit)是否有进位或者借位
                               例如 0xfffffffc + 8 该运算会使C=1,0xfc +8  C=0
              [30]   Z  zero 运算结果是否为0,为0 Z=1,反之 Z=0
              [31]   N  negative 负数 
    5个SPSR寄存器,它是CPSR的备份寄存器,每种工作模式下只能访问其中的一个子集  
   
5、异常与异常向量表
     ARM 支持7种异常
        Reset                          按下复位键                                             SVC
        Undef                          执行到不认识的机器指令                       Undef
        SWI                             软中断汇编指令swi的执行                      SVC
        PRETCH ABORT        取指令时产生了非法的存储器访问         Abort
        DATA ABORT              取数据时产生了非法的存储器访问         Abort
        IRQ                              产生了低优先级的中断                           IRQ
        FIQ                              产生了高优先级的中断                           FIQ
        
     ARM收到异常信号后,硬件会自动做4件事
        1)备份CPSR
               SPSR_<mode>=CPSR
        2) 修改CPSR
               mode
               T = 0//切换为ARM工作状态
               F = 1 //屏蔽FIQ异常
               I =1  //屏蔽IRQ异常
        3) 保存返回地址到LR_<mode>
        4) 给PC赋值
             reset     pc = vec_base + 0x00
             undef   pc = vec_base + 0x04
             swi       pc = vec_base + 0x08
             pre ab  pc = vec_base + 0x0c
             dat ab  pc = vec_base + 0x10
             irq        pc = vec_base + 0x18
             fiq        pc = vec_base + 0x1c

     异常处理结束后 软件必须完成的工作
         1)恢复CPSR
            CPSR=SPSR_<mode>
         2) 给PC赋值       
            PC = LR_<mode>

6、对齐方式
      struct test
      {
          int a;
          char c;
          short n;
          char x;
          long m;
      }test1;(32位机器)
      sizeof(test1) = 4+4+4 +4 = 16
      4字节对齐:起始地址可以被4整除

7、ARM支持的数据类型
      byte               8bit(1个字节)
      half word       16bit(2个字节)
      word              32bit(4个字节)
      double word  64bit(8个字节)

8、大小端问题
       int x = 0x12345678;   
       地址         大    小
       0x100     12    78
       0x101     34    56
       0x102     56    34
       0x103     78    12
       
       高位放在低地址就是大端模式
       低位放在低地址就是小端模式
         union
       {
          int a;
          char c[4];
       }test;
       test.a=1;
       if(test.c[0]==1)
           小端
       ---------------------------------
       int x= 0x12345678;
       *((char *)&x)==0x78
            小端    
  
       ARM 既支持大端模式 也支持小端模式 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搁い浅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值