我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 指令寄存器 >

ARM指令集和常用寄存器

归档日期:06-28       文本归类:指令寄存器      文章编辑:爱尚语录

  MOV R0, R2, LSL #3 //R2的值左移3位,结果放入 R0中 即 R0 = R2 * 8

  LSL逻辑左移、 LSR逻辑右移、 ASL算术左移、 ASR算术右移、 ROR循环右移、RRX带扩展的循环右移

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

  5,基址寻址 将基址寄存器的内容与指令中给出的偏移量相加,形成有效地址

  LDR R2,[R3, #0x0F] //将R3中数值加0x0F作为地址,取出数据保存在R2中

  LDR R0, [R1], #-4 //将R1地址单元内容存入R0中,且R1= R1 - 4

  LDMIA R1!, {R2-R7, R12} //将R1单元的数据读出到R2-R7,R12中,R1自动加1

  STMIA R0!,{R3-R6,R10} //将R3-R6中德数据保存到R0指向的地址,R0自动加1

  8,块拷贝寻址 多寄存器传送指令用于一块数据从存储器的某一位置拷贝到另一位置

  由程序计数器PC提供基准地址,指令中地址码字段作为偏移量,两者相加都得到的地址即为操作数的有效地址

  ARM处理器是加载/存储体系结构的典型RISC处理器,对存储器的访问只能使用加载和存储指令实现。LDR/STR

  批量加载和存储指令可实现一条指令加载/存储多个寄存器的内容,大大提高了效率。SWP指令是一条寄存器和存储器

  操作等。ARM处理器是冯诺依曼存储结构,程序空间、RAM空间及IO映射空间统一编址,

  除对RAM操作外,对外围IO、程序数据的访问均要通过加载/存储指令进行。

  LDR/STR T为可选后缀,有T表示处理器在特权模式下,使用后缀!表示结果回写。S表示带符号扩展。

  程序相对偏移 LDR Rd, label; //label为程序标号,必须是当前指令的+-4KB范围内

  1,LDM 和 STM 可以实现一组寄存器和一块连续的内存单元之间传输数据。主要用于现场保护、数据、参数传递等。

  STMFD R0!,{R0-R7,LR} //现场保存 将R0-R7,LR入栈

  寄存器和存储器交换指令,用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另

  SWP R1, R2, [R0] //将R0指向存储单元内容读取一字节到R1中(高24位清零),并将R2内容写入该内存单元

  LDC p5, c2, [R2, #4] //读取R2+4指向内存单元的数据传送到协处理器p5的c2寄存器中

  SWI immediately24 软中断指令 处理器进入管理模式

  MSR psr_fields, Rd/#immed_8r 写状态寄存器指令

  ADR伪指令 小范围的地址读取伪指令,用于将PC相对偏移的地址值读取到寄存器中。

  ADRL伪指令 中等范围的地址读取伪指令,用于将PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。

  LDR伪指令 大范围的地址读取伪指令,用于加载32位的立即数或一个地址到指定寄存器中。

  ARM汇编程序由机器指令, 伪指令和宏指令组成,伪指令不像机器指令那样在处理器运行期间由机器执行,而是由汇编程序

  GBLL全局的逻辑变量初始化为false LCLL 局部的 SETL 赋值

  **31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。

  ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器

  (R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存

  ****************************************************

  对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。系统为将备份寄存器用于任何的非凡用途,但是

  当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中

  对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外

  的五个对应于其他的五种处理器模式。采用下面的记号来区分各个物理寄存器:

  其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq

  未备份寄存器包括R0-R7。对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。未备份寄存器

  没有被系统用于非凡的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。

  可以作为一般的通用寄存器使用,但有一些指令在使用R15时有一些限制。由于ARM采用了流水线处理器机制,当正确读取

  了PC的值时,该值为当前指令地址值加上8个字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。

  需要注意的是,当使用str/stm保存R15时,保存的可能是当前指令地址值加8个字节,也可能保存的是当前指令地址值加12

  个字节。到底哪种方式取决于芯片的具体设计。对于用户来说,尽量避免使用STR/STM指令来保存R15的值。

  当成功的向R15写入一个数值时,程序将跳转到该地址执行。由于ARM指令是字对齐的,写入R15的值应满足bits[1:0]为0b00

  **对于arm3以及更低的版本,写入R15的地址值bits[1:0]被忽略,即写入r15的地址值将与0xFFFF FFFC做与操作。

  **对于ARM4以及更高的版本,程序必须保证写入R15的地址值bits[1:0]为0b00,否则将产生不可预知的后果。

  对于Thumb指令集来说,指令是班子对齐的,处理器将忽略bit[0]。

本文链接:http://f-taiken.net/zhilingjicunqi/150.html