微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > arm的汇编指令精选合辑

arm的汇编指令精选合辑

时间:06-04 来源:网络整理 点击:

器。

  格式:

  MSR{《条件码》CPSR_f|SPSR_f,《#ommed_8r》

  MSR{《条件码》CPSR_《field》|SPSR_《field》,Rm

  其中:

  《field》字段可以是以下之一或多种:

  lC:控制域屏蔽字段(PSR中的第0位到第7位);

  lX:扩展域屏蔽字段(PSR中的第8位到第15位);

  lS:状态域屏蔽字段(PSR中的第16位到第32位);

  lF:标志域屏蔽字段(PSR中的第24位到第31位)。

  immed_8r 值数字常量的表达式。常量必须对应8位位图。该位图在32位字中循环移位偶数数位。

  Rm 源寄存器。

  注释:

  同前一条指令(MRS)。

  例1:设置N、Z、C、V标志。

  MSR CPSR_f,#&f0000000 ;仅高位有效,其他必须为0

  例2:

  仅置位C标志,保留N、Z、V标志。

  MRS R0,CPSR ;将CPSR中的内容传送至R0

  ORR R0,R0,#&1f ;置位R0的第29位

  MSR CPSR_c,R0 ;再将R0中的内容传送至CPSR

  3 软件中断指令SWI

  格式:

  SWI{《条件码》immed_24

  其中:

  immed_24 表达式,其值范围为0~ -1的整数(24位整数)。

  注释:

  (1) SWI指令用来执行系统调用,处理器进入管理模式,并从地址0x08开始执行指令《24位立即数》并不影响指令的执行,由系统所解释。CPSR保存到管理模式的SPSR中执行转移到SWI向量。

  (2) 条件码标志。这条指令不影响条件码标志。

  例1:输出字符"A"

  MOV R0,#"A" ;从R0中得到"A"

  SWI SWI_WriteC ;然后显示

  例2:通过SWI指令输出字符串

  …

  BL STROUT ;输出如下信息

  = "Hello World",&0a,&0d,0

  … ;返回

  STROUT LDRB R0,R[14],#1 ;得到字符

  CMP R0,#0 ;检查结束标记

  SWINE SWI_WriteC ;如果没有结束,则继续

  BNE STROUT ;…循环

  ADD R14,#3 ;字对齐

  BIC R14,#3

  MOV PC,R14 ;返回

  例3:结束用户程序返回监控程序

  SWI SWI _Exit ;返回

  4 断占指令(v5T)

  格式:

  BKPT immmed_16

  其中:

  immmed_16 表达式,基值范围为0~65536内的整数(16位整数)。

  注释:

  支持软件调试,执行时中断正常指令,进入相应的调试子程序。BKPT指令适用于ARM v5指令系统及以上版本。

  例:

  BKPT

  3.3 Thumb指令系统

  并非所有的ARM处理器都可以执行Thumb指令,在指令集名中,含有T的均可执行Thumb指令,如ARM7TDMI。

  CPSR中的T标志决定是执行Thumb指令还是ARM指令,如置位,执行Thumb指令,否则执行ARM指令。

  ARM在复位以后,执行ARM指令。通常至Thumb指令的执行是由一条转移和交换指令完成的,如BX指令。但是例程处理程序中如果使用数据处理指令或者多寄存器调用指令,也会转移到Thumb指令中去。如果例程处理完毕,也将返回ARM指令中。

  必须明确的是Thumb指令系统必须包括ARM代码,至少是初始化和例程入口部分。

  Thumb指令集是ARM指令集的子集,Thumb只使用有限的ARM寄存器。Thumb指令一般可以完全访问通用寄存器R0~R7(称为低寄存器),R13用作堆栈指针,R14用作链接寄存器,R15用作PC。Thumb中的一些指令可以访问其余的寄存器如R8~R15(称为高寄存器),算术运算和逻辑运算指令可以访问CPS2中的标志位。

  大部分的Thumb 指令与ARM指令类似,不过在寄存器、立即数、寻址等方面会有些差异,Thumb和ARM指令性计划集的区别一般有以下几点:

  l转移指令;

  l数据传送指令;

  l单寄存器Load和Store指令;

  l多寄存器Load和Store指令。

  Thumb指令集没有协处理器指令、信号量(samaphore)指令以及访问CPSR或SPSR的指令。

  (1) 转移指令

  转移指令用于:

  l向后转移形成循环;

  l条件结构向前转移;

  l转向子程序;

  l处理器从Thumb状态切换到ARM状态。

  程序相对转移,特别是条件转移与在ARM状态下相比,在范围上有更多的限制,转向子程序只能是无条件转移。

  (2) 数据处理指令

  这些指令对通用寄存器进行操作,在许多情况下,操作的结果必须放入其中一个操作数寄存器中,而不是第3个寄存器中。数据处理操作比ARM状态更少,访问寄存器R8~R15受到一定限制。

  MOV或ADD指令可访问寄存器R8~R15,数据处理指令总是更新CPS2中的ALU状态标志。访问寄存器R8~R15的Thumb数据处理指令不能更新标志。

  (3) 单寄存器Load和Store指令

  这些指令从存储器读取1个寄存器值,或把1个寄存器值存储到存储器。在Thumb状态下,这些指令只能访问寄存器R0~R7。

  (4) 多寄存器Load和Store指令

LDM和STM将任何范围为R0~R7的寄存器

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top