微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM指令集详解2

ARM指令集详解2

时间:11-20 来源:互联网 点击:
加载和存储指令

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

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

指令用于将存储器中的一个32位的字数据传送到目的寄存器中。本指令通常用于将存储器上的字数据传送到通用寄存器。

LDR R0,[R1]

将存储器地址为R1的字数据读入寄存器R0

LDR R0,[R1,R2]

将存储器地址为R1+R2的字数据读入寄存器R0。

LDR R0,[R1,#8]

将存储器地址为R1+8的字数据读入寄存器R0

LDR R0, [R1,R2]!

将存储器地址R1+R2的字数据读入寄存器R0,同时将新地址R1+R2写入R1。

LDR R0, [R1,#5]!

将存储器地址R1+5的字数据读入寄存器R0,同时将新地址R1+5写入到R1。

LDR R0,[R1], R2

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

LDR R0,[R1,R2,LSL #2]!

将存储器地址为R1+R2*4的字数据读入到寄存器R0中,并将新地址R1+R2*4写入R1

LDR R0, [R1], R2, LSL #2

将存储器地址为R1的字数据读入寄存器R0,并进新地址R1+R2*4写入R1。

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

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

LDRB R0,[R1]

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

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

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

LDRH R0,[R1]

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

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

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

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

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

ARM微处理器所支持的批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传递数据,批量加载指令用于将一片连续的存储单元的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。

LDM批量数据加载指令

STM批量数据存储指令

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

指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。其中,{类型}为以下几种情况:

IA 每次传送后地址加1;

IB 每次传送前地址加1;

DA 每次传送后地址减1;

DB 每次传送前地址减1;

FD 满递减堆栈;

ED 空递减堆栈;

FA 满递增堆栈;

EA 空递增堆栈;

{!}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容部改变。基址寄存器不允许为R15,寄存器列表可以为R0-R15的任意组合。

{^}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送之外,还将SPSR到CPSR。

STMFD R13!, {R0,R4-R12,LR}

将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈。

LDMFD R13!, {R0,R4-R12,LR}

将堆栈内容恢复到寄存器(R0,R4到R12,LR)。

数据交换指令

ARM微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。

SWP 字数据交换指令

SWPB 字节数据交换指令

SWP{条件} 目的寄存器, 源寄存器1,[源寄存器2]

SWP指令用于将源寄存器2所指向的存储器中的字数据传送到目的寄存器中,同时将源寄存器1中的字数据传送到源寄存器2所指向的存储器中,显然,当源寄存器1和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。

SWP R0,R1,[R2]

SWP R0,R0,[R1];该指令实现了将R1所指向的存储器的字数据与R0中的字数据交换。

移位指令

ARM微处理器支持数据的移位操作,移位操作在ARM指令集中不作为单独的指令使用,它只能作为指令格式中是一个字段。

LSL logical shifter left

ASL arithmetic shifter left

LSR logical shifter right

ASR arithmetic shifter right

ROR rotate right

通用寄存器,LSL操作数

LSL可完成对寄存器中的内容进行逻辑左移操作,按操作数所指定的数量向左移位,低位用零来填充。其中,操作数可以是通用寄存器,也可以是立即数(0—31)。

MOV R0,R1,LSL#2

将R1中的内容左移两位后传送到R0中。

通用寄存器,ROR 操作数

ROR可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器,也可以是立即数(0-31)。显然,当进行32位的循

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

网站地图

Top