ARM体系结构与编程学习(一)

第一章:ARM概述及其基本编程模型

1.4 arm处理器模式

arm体系结构支持7中处理模式。

用户模式 (usr)                              正常程序执行的模式                           

快速中断模式(fiq)                          用于高速数据传输和通道处理              

外部中断模式(irq)                          用于通常的中断处理                          

特权模式(svc)                              供操作系统使用的一种保护模式            

数据访问中止模式(abt)                  用于虚拟存储及存储保护                     

未定义指令中止模式(und)              用于支持通过软件仿真硬件的协处理器   

系统模式(sys)                              用于运行特权级的操作系统任务  

备注:除用户模式为,其他的六种模式成为特权模式,而除系统模式外,剩下的五种模式又成为异常模式。每种异常模式都有特定的2个寄存器,用来保存特定异常模式的状态信息。

 

1.5 arm共有37个寄存器,可以分为两类:

1、通用寄存器31个

     R0~R7共8个未分组寄存器,所有处理模式下都是同一个物理寄存器。   

     R8~R14有两个分组,一个分组为R8~R12,为fiq模式单独用了5个寄存器,故有10个寄存器。

                                   另一个分组为R13~R14分组寄存器,5(异常模式)x2+2(用户模式和系统模式共用)共12个寄存器。

                                   R13和R14都有特定的用途。一般R13用作堆栈指针。R14用作连接寄存器,保存子程序或者异常返回地

                                   址,当然也可以当做通用寄存器。

     R15为程序计数器,即PC。当向R15写入正常的地址时,程序将转向该地址并执行。注:由于arm指令是字对齐的,而存储结构中是按照字节存储的,也就是存储中的每一位代表一个字节,故要求写入R15的地址应该为4的倍数,也就是要求bits[1:0]=0b00。

2、状态寄存器6个

     CPSR,7种模式共用,保存当前程序的状态信息。包括条件标志位、中断禁止位、当前处理器模式标志以及其他一些控制和状态位。

     SPSR,5种异常模式各有一个专用的备份程序状态寄存器。当特定的异常中断发生时,用来保存CPSR中的内容,直到退出异常程序,再将保存的内容恢复到CPSR中。

     关于状态寄存器的状态信息:

     1、bits[31:28],条件标志位,分别保存N(表示结果正负)、Z(表示结果是否为零,CMP指令,=1表示相等)、C(进/借位标志,受加/减运算影响)、V(表示符号溢出,受加/减运算影响)

     2、bit[27],Q标志位,在E系列处理器中表示增强的DSP指令是否发生溢出。

     3、bits[7:0],控制位,分别为I(IRQ中断控制)、F(FIQ中断控制)、T(Thumb指令控制)、M[4:0](处理器模式控制)

  

1.6  arm异常中断

arm共有7种异常中断,包括复位、未定义指令、软件中断、预取指令中断、数据访问中止、外部中断、快速中断。

异常中断响应过程:

     1、保存CPSR到将要执行的相对应SPSR中。

     2、重新设置CPSR相应位,使处理器进入相应的中断模式。

     3、将相应的链接寄存器LR_mode设置为返回地址。

     4、将PC设置为异常中断的中断向量地址,及跳转到异常中断程序中去执行。

     5、将SPSR内容送CPSR,将LR_mode送PC。

 

1.7 arm体系中存储系统

arm存储以字节为单位,地址空间为2^32个字节共4G空间。

arm存储格式有小端结尾(低字节存储在低位,即由小到大)、大端结尾(最高字节存储在低位,即由大到小)。

arm存储访问由对齐访问和非对齐访问。

 

第二章 ARM指令分类及寻址方式

2.1arm指令概述

arm指令共6种,分为:跳转指令、数据处理指令、程序状态传输指令、Load/Store指令、协处理器指令、异常中断指令

arm指令长度固定为一个字长,即32位。

典型的arm指令编码格式为

 

典型的arm指令语法格式为:

<opcode> {<cond>} {s} <Rd>, <Rn>, <shifter_operand>

其中:<opcode>   指令助记符,如ADD表示算术加操作指令

        {<cond>}    表示指令执行条件,大括号表示可选

        {S}              指令操作是否影响标志位

        <Rd>           表示目标寄存器

        <Rn>           表示第1个操作数的寄存器

        <shifter_operand>   表示第2个操作数

arm指令条件码域

     

 

2.2 arm指令寻址方式

1. 寄存器寻址:

    MOV R1,R2        ;读取R2的值到R1中

    SUB R0,R1,R2   ;将R1的值减去R2的值,结果保存到R0中

 

    2.立即寻址:

    SUBS R0,R0,#1  ;R0减1,结果保存到R0中,并影响标志位

    MOV R0,#0xFF000 ;将0xFF000存储到R0中

 

    3. 寄存器移位寻址:

    MOV R0,R2,

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值