首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM汇编指令(4)

ARM汇编指令(4)

6UMLAL指令
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   R0R1R2R3           R0 = R2 × R3)的低32 R0
                                                      
R1 = R2 × R3)的高32 R1
四、程序状态寄存器访问指令1MRS指令
MRS指令的格式为:

MRS{条件}    通用寄存器 程序状态寄存器(CPSRSPSR
MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情况:
.当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。
.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。
指令示例:
MRS R0CPSR                        ;传送CPSR的内容到R0
MRS R0SPSR                        ;传送 SPSR的内容到R0
2MSR指令
MSR指令的格式为:

MSR{条件}    程序状态寄存器(CPSRSPSR_<>,操作数
MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<>用于设置程序状态寄存器中需要 操作的位,32位的程序状态寄存器可分为4个域:
[3124]为条件位域,用f表示;
[2316]为状态位域,用s表示;
[158] 为扩展位域,用x表示;
[70]    为控制位域,用c表示;
该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中指明将要操作的域。
指令示例:
MSR CPSRR0       ;传送R0的内容到CPSR
MSR SPSRR0       ;传送R0的内容到SPSR
MSR CPSR_cR0    ;传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域
五、加载/存储指令。ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储 指令则完成相反的操作。常用的加载存储指令如下:
1LDR指令
LDR指令的格式为:

LDR{条件} 目的寄存器,<存储器地址>
LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为 目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。
指令示例:
LDR R0[R1]               ;将存储器地址为R1的字数据读入寄存器R0
LDR R0[R1R2]      ;将存储器地址为R1+R2的字数据读入寄存器R0
LDR R0[R1#8]       ;将存储器地址为R1+8的字数据读入寄存器R0
LDR R0[R1R2]
;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地
R1R2写入R1
LDR R0[R1,#8]
;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址 R1
;+8写入R1
LDR R0[R1]R2       ;将存储器地址为R1的字数据读入寄存器R0,并将新地址 R1
R2写入R1
LDR R0[R1R2LSL2] ;将存储器地址为R1R2×4的字数据读入寄存器R0,并
;将新地址R1R2×4写入R1
LDR R0[R1]R2LSL2     ;将存储器地址为R1的字数据读入 寄存器R0,并将新地
;址R1R2×4写入R1
继承事业,薪火相传
返回列表