×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-20 发布时间:
|
跳转指令:最简单的这届修改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:断点中断指令

关键字:ARM  裸机开发  指令集 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法