微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM裸机开发笔记5ARM指令集

ARM裸机开发笔记5ARM指令集

时间:11-19 来源:互联网 点击:
跳转指令:最简单的这届修改PC的值

以下指令中可以完成从当前指令向前或向后的32M的地址空间的跳转

B{条件} 目标地址 ;花括号表示条件,可以省略

最简单的跳转指令,一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行

CMP R!,#0

BEQ Label ;EQ相等

当CPSR寄存器中的Z条件码位置时,程序跳转到标号Label处执行


BL

BL{条件} 目标地址

跳转之前,会在寄存器R14中保存PC当前值。因此可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。

BLX

X表示跳转到指定地址的同时,将工作状态从ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到R14中

因此当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态,同时,子程序的返回可以通过将寄存器R14值到PC中来完成。

BX 跳转并切换状态

数据处理指令

MOV指令

MOV{条件}{S} 目标寄存器,源操作数 ----------》S加上可能会影响CPSR中的标志位。不加指令不更新CPSR。一般都不加。源操作数不可以是内存

MVN{条件}{S} 在传送之前把源操作数按位取反

CMP指令

TST指令 测试某一个位是否被设置了

TST R1,#%1 结果 ;用于测试在寄存器R1中是否设置了最低位(%表示二进制数)对操作数1与操作数2进行按位的与运算,结果为0 ,EQ位将被设置

LDR R5,=0xffffffff
TST R5,#(1<23) ;当bit23位为1时,CPSR EQ位被设置

MOVEQ R5,#0x00 ---->不执行词语据,不满足EQ
MOVNE R5,#0x01

ADD指令 加

SUB指令 减

AND 逻辑与

ORR 逻辑或

BIC Rd,Rn,operand2 用于将Rn中的某些位清零。并把结果存放在Rd中,操作数operand2为32位的掩码,如果掩码设置了某一位为1,则清除这一位。

BIC R0,R0,#%1011 ;将R0的0,1,3位清零,其余位保持不变。

MUL乘法指令

程序状态字的访问指令

MRS{条件} 通用寄存器,程序状态寄存器(CPSR/SPSR)

将程序状态寄存器的内容传送到通用寄存器中

1.当需要改变程序状态寄存器内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。

2.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。

MRS R0,SPSR ;传送CPSR的内容到R0

MSR指令

MSR 程序状态寄存器(CPSR/SPSR)_<域> ,操作数

将操作数的内容传送到程序状态寄存器或其特定域中。其中操作数可以是通用寄存器或立即数。<域>用于设置程序状态寄存器中需要操作的位,32位的程序状态寄存器可以分为4个域

位为条件标志位,用f表示。位为状态域位,用s表示。为为扩展位域,用x表示。为为控制位域,用c表示

该指令通常用于或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中指明将要操作的域。

MSR CPSR,R0

MSR SPSR,R0 ;传送R0内容带SPSR

MSR CPSR_c,R0 ;传送R0到CPSR,但仅仅修改CPSR中的控制位域

访问内存

寄存器和存储器之间传送数据

加载和存储指令

LDR 目地寄存器,<存储器地址>

从存储器中将一个32位数据传送到目地寄存器中

LDRB 目的寄存器,<存储器地址>

LDRB用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。

LDRH

和LDRB操作类似,是取一个16位的数据

STR 源寄存器,<存储器地址>

STR从源寄存器中将一个32为的字数据传到存储器中

批量加载存储指令

LDM

STM

数据交换指令

SWP

SWPB

移位指令(逻辑移位不考虑正负号,算数移位考虑正负号)

LSL  逻辑左移

ASL 算数左移

LSR 逻辑右移

ASR 算数右移

ROR 循环右移

异常产生指令

ARM支持的异常产生指令有如下两条

SWI:软件中断指令

BKPT:断点中断指令

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

网站地图

Top