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

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

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

存器R3~R0:

ADDSR0,R4,R8;加低端的字

ADCSR1,R5,R9;加第二个字,带进位

ADCSR2,R6,R10;加第三个字,带进位

ADCR3,R7,R11;加第四个字,带进位

9、SUB指令

SUB指令的格式为:

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

SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:

SUBR0,R1,R2;R0 = R1 - R2

SUBR0,R1,#256;R0 = R1 - 256

SUBR0,R2,R3,LSL#1;R0 = R2 - (R3 < 1)

10、SBC指令

SBC指令的格式为:

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

SBC指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。

指令示例:

SUBSR0,R1,R2;R0 = R1 - R2 -!C,并根据结果设置CPSR的进位标志位

11、RSB指令

RSB指令的格式为:

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

RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:

RSBR0,R1,R2;R0 = R2 – R1

RSBR0,R1,#256;R0 = 256 – R1

RSBR0,R2,R3,LSL#1;R0 = (R3 < 1) - R2

12、RSC指令

RSC指令的格式为:

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

RSC指令用于把操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。

指令示例:

RSCR0,R1,R2;R0 = R2 – R1 -!C

13、AND指令

AND指令的格式为:

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

AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数1的某些位。

指令示例:

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

14、ORR指令

ORR指令的格式为:

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

ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。

指令示例:

ORRR0,R0,#3;该指令设置R0的0、1位,其余位保持不变。

15、EOR指令

EOR指令的格式为:

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

EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数1的某些位。

指令示例:

EORR0,R0,#3;该指令反转R0的0、1位,其余位保持不变。

16、BIC指令

BIC指令的格式为:

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

BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。操作数2为32位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。

指令示例:

BICR0,R0,#%1011;该指令清除R0中的位0、1、和3,其余的位保持不变。

3.3.3乘法指令与乘加指令

ARM微处理器支持的乘法指令与乘加指令共有6条,可分为运算结果为32位和运算结果为64位两类,与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数1必须是不同的寄存器。

乘法指令与乘加指令共有以下6条:

—MUL32位乘法指令

—MLA32位乘加指令

—SMULL64位有符号数乘法指令

—SMLAL64位有符号数乘加指令

—UMULL64位无符号数乘法指令

—UMLAL64位无符号数乘加指令

1、MUL指令

MUL指令的格式为:

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

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

网站地图

Top