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

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

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

MUL指令完成将操作数1与操作数2的乘法运算,并把结果放置到目的寄存器中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数或无符号数。

指令示例:

MULR0,R1,R2;R0 = R1×R2

MULSR0,R1,R2;R0 = R1×R2,同时设置CPSR中的相关条件标志位

2、MLA指令

MLA指令的格式为:

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

MLA指令完成将操作数1与操作数2的乘法运算,再将乘积加上操作数3,并把结果放置到目的寄存器中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数或无符号数。

指令示例:

MLAR0,R1,R2,R3;R0 = R1×R2 + R3

MLASR0,R1,R2,R3;R0 = R1×R2 + R3,同时设置CPSR中的相关条件标志位

3、SMULL指令

SMULL指令的格式为:

SMULL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2

SMULL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位放置到目的寄存器Low中,结果的高32位放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数。

指令示例:

SMULLR0,R1,R2,R3;R0 =(R2×R3)的低32位

;R1 =(R2×R3)的高32位

4、SMLAL指令

SMLAL指令的格式为:

SMLAL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2

SMLAL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数。

对于目的寄存器Low,在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位。

对于目的寄存器High,在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位。

指令示例:

SMLALR0,R1,R2,R3;R0 =(R2×R3)的低32位+R0

;R1 =(R2×R3)的高32位+R1

5、UMULL指令

UMULL指令的格式为:

UMULL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2

UMULL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位放置到目的寄存器Low中,结果的高32位放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的无符号数。

指令示例:

UMULLR0,R1,R2,R3;R0 =(R2×R3)的低32位

;R1 =(R2×R3)的高32位

6、UMLAL指令

UMLAL指令的格式为:

UMLAL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2

UMLAL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的无符号数。

对于目的寄存器Low,在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位。

对于目的寄存器High,在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位。

指令示例:

UMLALR0,R1,R2,R3;R0 =(R2×R3)的低32位+R0

;R1 =(R2×R3)的高32位+R1

3.3.4程序状态寄存器访问指令

ARM微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:

—MRS程序状态寄存器到通用寄存器的数据传送指令

—MSR通用寄存器到程序状态寄存器的数据传送指令

1、MRS指令

MRS指令的格式为:

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

MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:

-当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。

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

指令示例:

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

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

2、MSR指令

MSR指令的格式为:

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

MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存器中需要操作的位,32位的程序状态寄存器可分为4个域:

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

网站地图

Top