微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM汇编指令ARM寻址方式、汇编指令、伪指令

ARM汇编指令ARM寻址方式、汇编指令、伪指令

时间:11-20 来源:互联网 点击:

加载到目的寄存器。

与MOV指令不同之处是在传送之前按位取反了,既把一个取反的值传送给目的寄存器中。

其中S决定指令的操作是否影响CPSR中条件标识为的值,当没有S时指令不更新CPSR中条件标志位的值。

例程:

MVNR0,#0XFF

3)CMP指令

CMP{条件} 操作数1,操作数2

CMP指令用于把一个寄存器内容和另一个寄存器的内容或者立即数进行比较,同时更新CPSR中

条件标志位的值。

该指令进行一次减法运算,但是不保存结果,只更改条件标志位(其中指令条件上边的图片~~)~~

例如:

CMP R1,RO

CMP R1,#100;将寄存器R1中的值与立即数100相减,并根据结果设置CPSR的标志位

4)TST指令

TST{条件}操作数1,操作数2

TST指令用于把一个寄存器的内容和另一个寄存器的内容或者立即数按位的与运算。

并根据结果更新CPSR中条件标志位的值。

操作数1是要测试的数据,而操作数2是一个位掩码,根据测试结果设置相应的标志位。

例程:

TST R1,#%1;用于测试在寄存器R1中是否设置了最低位(%表示二进制数)。

5)ADD指令

ADD{条件}{S} 目的寄存器,操作数1,操作数2

ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。

操作数1一概是一个寄存器,操作数2可以是一个寄存器,被一位的寄存器,或者一个立即数。

例程:

ADD R0,R1,R2

ADD R0,R2,R3,LSL#1

6)SUB指令

不想说~~因为跟ADD指令一模一样,只是一个加一个减~~

7)AND指令

AND{条件}{S} 目的寄存器,操作数1,操作数2

AND指令用于在两个操作数上进行逻辑与运算,并肩结果放置在目的寄存器。

格式跟ADD一样。

例程:

AND R0,R0,#3;该指令保持R0的0、1位,其余位清零

8)ORR指令

按位或,格式跟AND指令一样~~

功能:常用于设置操作数1的某些位。

9)BIC指令

BIC{条件}{S} Rd,Rn,operand2

BIC指令用于清除Rn中的某些位,并把结果存放在Rd中,操作数operand2为32位的掩码,如果

掩码中设置了某一位为1,则清除这一位。

例程:

BIC R0,R0,#11;将R0的0,1,3位清零,其余位不变。

10)MUL指令

MUL{条件}{S}目的寄存器,操作数1,操作数2

其中操作数1和操作数2均为32位的有符号数或者无符号数。

11)MRS指令(程序状态寄存器访问指令)

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

MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。

注意:

该指令用于一下情况:

a、当需要改变程序状态寄存器时,可以用MRS将程序状态寄存器的内容读入通用寄存器,

修改后再写回程序状态寄存器。

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

12)MSR指令(与MRS相对应)

MSR{条件} 程序转台寄存器(CPSR或者SPSR)_<域>,操作数

MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中,其中,操作数可以为通用寄存器或立即数。

<域>用于设置程序状态寄存器中需要操作的位,32位的程序状态寄存器可分为4个域:

位[31:24]为条件标志位域,用f表示

位[23:16]为状态位域,用s表示

位[15:8]为扩展为域,用x表示

位[7:0]为控制位域,用c表示

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

例程:

MSR CPSR_C,RO;传送R0的内容到SPSR,但是仅仅修改CPSR中的位控制域

13)LDR指令(加载指令)

首先介绍一下加载/存储指令:

ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。

LDR{条件} 目的寄存器,<存储器地址>

LDR指令用于从存储器中将一个32位的数据传送到目的寄存器中。

该指令通常用于从存储器中读取32位的子数据到通用寄存器,然后对数据进行处理。

14)LDRB指令

格式通LDR指令一样!

LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。

15)LDRH指令

LDRH指令用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器中的高16位清零。

16)STR指令(存储指令)

STR{条件} 源寄存器,<存储器地址>

STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。

17)批量加载/存储指令-LDM/STM

ARM微处理器所支持的批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,

批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。

LDM{条件}{类型} 基址寄存器{!},寄存器列表

LDM(或STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间

传送数据,该指令的常见用途是将多个寄存器的内容入栈或出

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

网站地图

Top