这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 下载专区 » ARM微处理器的指令系统3

共12条 1/2 1 2 跳转至

ARM微处理器的指令系统3

院士
2007-01-04 22:24:26     打赏
[replyview]3.3.3 乘法指令与乘加指令

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

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

— MUL 32位乘法指令

— MLA 32位乘加指令

— SMULL 64位有符号数乘法指令

— SMLAL 64位有符号数乘加指令

— UMULL 64位无符号数乘法指令

— UMLAL 64位无符号数乘加指令

1、 MUL指令

MUL指令的格式为:

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

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

指令示例:

MUL R0,R1,R2 ;R0 = R1 × R2

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

2、 MLA指令

MLA指令的格式为:

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

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

指令示例:

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

MLAS R0,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位的有符号数。

指令示例:

SMULL R0,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位。

指令示例:

SMLAL R0,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位的无符号数。

指令示例:

UMULL R0,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位。

指令示例:

UMLAL R0,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将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。

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

指令示例:

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

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

2、 MSR指令

MSR指令的格式为:

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

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

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

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

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

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

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

指令示例:

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

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

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

[/replyview] [align=right][color=#000066][此贴子已经被作者于2007-1-4 14:56:33编辑过][/color][/align]



关键词: 微处理器     指令系统     乘法     指令     运算     32位     作数    

菜鸟
2007-01-08 23:35:00     打赏
2楼
攻城为下,攻人为次,攻心为上

菜鸟
2007-02-27 23:10:00     打赏
3楼
[em02]

菜鸟
2007-03-01 05:53:00     打赏
4楼
ok

菜鸟
2007-03-08 03:31:00     打赏
5楼
.....

菜鸟
2007-03-10 02:44:00     打赏
6楼

good!


菜鸟
2007-03-11 07:37:00     打赏
7楼
顶顶顶!!!

菜鸟
2007-03-22 06:50:00     打赏
8楼

菜鸟
2007-03-29 23:15:00     打赏
9楼
[em01]

菜鸟
2007-05-08 23:09:00     打赏
10楼
[em01]

共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]