微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM应用系统开发详解:第3章 ARM微处理器的指令系统

ARM应用系统开发详解:第3章 ARM微处理器的指令系统

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

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

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

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

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

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

指令示例:

MSRCPSR,R0;传送R0的内容到CPSR

MSRSPSR,R0;传送R0的内容到SPSR

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

3.3.5加载/存储指令

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

—LDR字数据加载指令

—LDRB字节数据加载指令

—LDRH半字数据加载指令

—STR字数据存储指令

—STRB字节数据存储指令

—STRH半字数据存储指令

1、LDR指令

LDR指令的格式为:

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

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。

指令示例:

LDRR0,[R1];将存储器地址为R1的字数据读入寄存器R0。

LDRR0,[R1,R2];将存储器地址为R1+R2的字数据读入寄存器R0。

LDRR0,[R1,#8];将存储器地址为R1+8的字数据读入寄存器R0。

LDRR0,[R1,R2]!;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。

LDRR0,[R1,#8]!;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。

LDRR0,[R1],R2;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。

LDRR0,[R1,R2,LSL#2]!;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。

LDRR0,[R1],R2,LSL#2;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。

2、LDRB指令

LDRB指令的格式为:

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

LDRB指令用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

指令示例:

LDRBR0,[R1];将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零。

LDRBR0,[R1,#8];将存储器地址为R1+8的字节数据读入寄存器R0,并将R0的高24位清零。

3、LDRH指令

LDRH指令的格式为:

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

LDRH指令用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。该指令通常用于从存储器中读取16位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

指令示例:

LDRHR0,[R1];将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零。

LDRHR0,[R1,#8];将存储器地址为R1+8的半字数据读入寄存器R0,并将R0的高16位清零。

LDRHR0,[R1,R2];将存储器地址为R1+R2的半字数据读入寄存器R0,并将R0的高16位清零。

4、STR指令

STR指令的格式为:

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

STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。

指令示例:

STRR0,[R1],#8;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。

STRR0,[R1,#8];将R0中的字数据写入以R1+8为地址的存储器中。

5、STRB指令

STRB指令的格式为:

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

STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。

指令示例:

STRBR0,[R1];将寄存器R0中的字节数据写入以R1为地址的存储器中。

STRBR0,[R1,#8];将寄存器R0中的字节数据写入以R1+8为地址的存储器中。

6、STRH指令

STRH指令的格式为:

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

STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。

指令示例:

STRHR0,[R1];将寄存器R0中的半字数据写入以R1为地址的存储器中。

STRHR0,[R1,#8];将寄存器R0中的半字数据写入以R1+8为地址的存储器中。

3.3.6批量数据加载/存储指令

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

网站地图

Top