欢迎光临散文网 会员登陆 & 注册

ARM体系架构知识

2022-06-14 11:53 作者:信盈达  | 我要投稿

一、ARM处理器简介及RISC特点

1、ARM处理器简介:

  ARM(Advanced RISC Machines)是一个32位RISC(精简指令集)处理器架构,ARM处理器则是ARM架构下

的微处理器。ARM处理器广泛的使用在许多嵌入式系统。ARM处理器的特点有指令长度固定,执行效率高,低成本等。


2、RISC设计主要特点:

  (1)指令集——RISC减少了指令集的种类,通常一个周期一条指令,采用固定长度的指令格式,编译器或

     程序员通过几条指令完成一个复杂的操作。而CISC指令集的指令长度通常不固定;

  (2)流水线——RISC采用单周期指令,且指令长度固定,便于流水线操作执行;

  (3)寄存器——RISC的处理器拥有更多的通用寄存器,寄存器操作较多。例如ARM处理器具有37个寄存器;

  (4)Load/Store结构——使用加载/存储指令批量从内存中读写数据,提高数据的传输效率;

  (5)寻址方式简化,指令长度固定,指令格式和寻址方式种类减少。


二、Arm的基本数据类型:

  双字节(DoubleWoRd):64位

  字(WoRd):在ARM体系结构中,字的长度为32位。

  半字(Half-WoRd):在ARM体系结构中,半字的长度为16位。

  字节(Byte):在ARM体系结构中,字节的长度为8位。


三、ARM处理器存储格式:

  ARM体系结构将存储器看作是从0地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB。ARM体系结构可以用两种方法存储字数据,分别为大端模式和小端模式。

  大端模式(高地高低):字的高字节存储在低地址字节单元中,字的低字节存储在高地址字节单元中。

  小端模式(高高低低):字的高字节存储在高地址字节单元中,字的低字节存储在低地址字节单元中。


四、内核的工作模式:

  1、用户模式(user):正常程序执行模式;

  2、快速中断模式(FIQ):高优先级的中断产生会进入该种模式,用于高速通道传输;

  3、外部中断模式(IRQ):低优先级中断产生会进入该模式,用于普通的中断处理;

  4、特权模式(Supervisor):复位和软中断指令会进入该模式;

  5、数据访问中止模式(Abort):当存储异常时会进入该模式;

  6、未定义指令中止模式(Undefined):执行未定义指令会进入该模式;

  7、系统模式(System):用于运行特权级操作系统任务;

  8、监控模式(Monitor):可以在安全模式和非安全模式之间切换;


五、ARM指令集:

1、数据操作指令:

(1)MOV 将数据从一个寄存器传送到另一个寄存器:

  MOV AX,2000H;将16位数据2000H传送到AX寄存器

  MOV AL,20H;将8位数据20H传送到AL寄存器

  MOV AX,BX;将BX寄存器的16位数据传送到AX寄存器

  MOV AL,[2000H];将2000H单元的内容传送到AL寄存器

  MOVW  把 16 位立即数放到寄存器的底16位,高16位清0

  MOVT  把 16 位立即数放到寄存器的高16位,低 16位不影响

   movw    r8, #19028    ; 0x4a54

   movt    r8, #49456    ; 0xc130

   r8 = 0xc1304a54


(2)AND将寄存器做“逻辑与”操作后保存结果到其他寄存器

       AND   R2,R1,R3      //  R2 = R1 & R3

       ANDS  R0,R0,#0x01   //  R0 = R0 & 0x01


(3)SUB

       SUB   R0,R1,R2      //R0 = R1 – R2

       SUB   R0,R1,#256    //R0 = R1 -256


(4)ADD

       ADD  R0,R1,R2       //R0 = R1 + R2

       ADD  R0,R1,#256     //R0 = R1 + 256

       ADD  R0,R2,LSL#1    //R0 = R2 + (R3 << 1)


(5)CMP比较指令


(6)BIC位清零指令

       BIC  R0,R0,#0x1011  //清除位 0/1/3


2、乘法指令:

  MUL  MLA

  MUL  R1,R2,R3     //R1 = R2 * R3

  MOV  R0,#0x0A

  MLA  R1,R2,R3,R0   // R1 = R2 * R3 + 10


3、Load/Store指令:

(1)LDR从存储器中将一个32位的字数据传送到目的寄存器中。

       LDR  R1,[R0,#0x12] //将R0 +12地址处的数据读出,保存到R0中;

       LDR  R1,[R0,R2]   //将R0 + R1地址的数据读出,保存到R1中;

       LDR  Rd,[Rn],#0x04 //Rn的值用作传输数据的基地址,在数据传送后,将偏移量0x04与Rn相加写回到Rd中

  LDR R0,[R1,LSL #3]            ;将存储器地址为R1*8的字数据读入寄存器R0。

  LDR R0,[R1,R2,LSL #2]    ;将存储器地址为R1+R2*4的字数据读入寄存器R0。

  LDR R0,[R1,,R2,LSL #2]!  ;将存储器地址为R1+R2*4的字数据读入寄存器R0,并将R1+R2*4的值存入R1。


(2)STR 用于将一个32bit的数据写入到指定的内存单元

      STR  R0,[R1],#8   //将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。

  STR  R0,[R1,#8]      //将R0中的字数据写入以R1+8为地址的存储器中

  STR  R1, [R0]        //将r1寄存器的值,传送到地址值为r0的(存储器)内存中


4、跳转指令:

  B    跳转指令

  BL   带返回的连接跳转

  BX   跳转并切换状态

  BLX  带返回的跳转并切换状态


5、状态操作指令:

  ARM指令提供了两条如下指令,可直接控制程序状态寄存器(只有在特权模式下才能修改状态寄存器):

(1)MRS: 把程序状态寄存器的值送到一个通用寄存器中

       MRS  R1, CPSR  //将CPSR状态寄存器读出,保存到R1中

       MRS  R2, SPSR


(2)MSR:把寄存器的内容传送到程序状态寄存器

       MSR  CPSR_c,#0xD3  //CPSR[7:0] = 0xD3切换到管理模式

       MSR  CPSR_c,R3      //CPSR = R3


6、异常产生指令:

  SWI:软中断指令,产生软中断,处理器进入管理模式;

         SWI  0  //产生软中断,中断立即数为0

         SWI  0x123456  //产生软中断,中断立即数为0x123456


  BKPT:断点中断指令,处理器产生软件中断;

     产生一个预取异常,用来设置软件断点;


六、ARM指令的寻址方式:

1、立即数寻址:

  MOV  R0,#0          //送0到R0中

  ADD  R3,R3,#1      //R3的值加1

  CMP  R7,#1000       //R7的值和1000比较

  BIC   R9,R8,#0xff00  //将R8中8~15位清0,结果保存在R9中


2、寄存器寻址:

  寄存器的值可以被直接用于数据操作指令

   MOV  R2,R0      //R0的值送R2

   ADD  R4,R3,R2  //R4 = R2 + R3

   CMP  R7,R8      //比较R7和R8的值


3、寄存器移位寻址:

  预处理和移位发生在同一周期内,有效使用移位寄存器,可以提供代码执行效率;

   ADD  R2,R0,R1,LSR  #5

   MOV  R1,R0,LSL  #2

   RSB  R9,R5,R5,LSL  #1

   SUB  R1,R2,R0,LSR  #4


4、寄存器间接寻址:

  LDR  R1,[R2]  //将R2的数值作为地址,取出地址中的数据保存到R1中

  STR  R1,[R2]  //将R2数值作为地址,取出R1中的值存入R2所指向的地址


5、基址变址寻址:

  基址变址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址;

  基址变址寻址常用于查表、数组操作、访问基址附近的存储单元等。

   LDR  R1,[ R0,#0xf ]  //将R0的数值加0x0f作为地址,取出此地址的数值保存到R1

   STR  R1,[R0,#-2]   //将R0的数值减2作为地址,将R1中的内容保存到此地址中

   STR  R1,[R0,+R2]   //将R0的值加上R2的值作为地址,把R1的内容保存到该地址


6、多寄存器寻址/块拷贝寻址:

  批量Load、Store指令将一片连续的内存单元数据加载到通用寄存器组中,或将一组通用寄存器的数据存储

到内存单元中:

    IA :后递增方式

    IB :先递增方式

    DA:后递减方式

    DB:先递减方式


块拷贝寻址指令:

         STMIA  

         STMIB


7、相对寻址:

  BL  FUN1     //调用到FUN1的子程序

  B   LOOP     //条件跳转到LOOP标号处

  STMDA

  STMDB


版权声明:本文为CSDN博主「frank_zyp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。版权归原作者所有,如有侵权,请联系删除。

原文链接:ARM体系架构总结_frank_zyp的博客-CSDN博客_arm架构

ARM体系架构知识的评论 (共 条)

分享到微博请遵守国家法律