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

ARM汇编指令(6)

ARM汇编指令(6)

七、数据交换指令
1SWP指令
SWP指令的格式为:
SWP{条件} 目的寄存器,源寄存器1[源寄存器2]
SWP指令用于将源寄存器2所指向的存储器中的字数据传送到目的寄存器中,同时将源寄存器1中的字数据传送到源寄存器2所指向的存储器中。显然,当源寄存 1和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。
指令示例:
SWP   R0R1[R2]    ;将R2所指向的存储器中的字数据传送到R0,同时将R1 中的字数据传送到R2所指向的存储单元。
SWP   R0R0[R1]    ;该指令完成将R1所指向的存储器中的字数 据与R0中的数据交换。
2SWPB指令
SWPB指令的格式为:
SWP{条件}B 目的寄存器,源寄存器1[源寄存器2]
SWPB指令用于将源寄存器2所指向的存储器中的字节数据传送到目的寄存器中,目的寄存器的高24清零,同时将源寄存 1中的字节数据传送到源寄存器2所指向的存储器中。显然,当源寄存器1和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。
指令示例:
SWPB   R0R1[R2]      ;将R2所指向的存储器中的字节数据传送到 R0R0的高24位清零,同时将R1中的低8位数据传送到R2所指向的存储单元。
SWPB   R0R0[R1]     ;该指令完成将R1所指向的存储器中的 字节数据与R0中的低8位数据交换。八、移位指令
1LSL(或ASL
LSL(或ASL)的格式为:
通用寄存器,LSL(或ASL操作数      
LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作,按操作数所指定的数量向左移位,低位用零来填充。 其中,操作数可以是通用寄存器,也可以是立即数(031)。
操作示例
MOV   R0, R1, LSL#2          ;将R1中的内容左移两位后传送到R0 中。
2LSR
LSR的格式为:
通用寄存器,LSR 操作数      
LSR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用零来填充。其中,操作数可以是通用寄存器,也可以是立即数(031)。
操作示例:
MOV   R0, R1, LSR #2         ;将R1中的内容右移两位后传送到R0 中,左端用零来填充。
3ASR
ASR的格式为:
通用寄存器,ASR 操作数      
ASR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用第31位的值来填充。其中,操作数可以是通用寄存器,也可以是立 即数(031)。
操作示例:
MOV    R0, R1, ASR #2        ;将R1中的内容右移两位后传送到R0 中,左端用第31位的值来填充。
4ROR
ROR的格式为:
通用寄存器,ROR 操作数      
ROR可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器,也可以是立即数(031)。显然,当进行32位的循环右移操作时,通用寄存器中的值不改变。
操作示例:
MOV    R0, R1, ROR #2       ;将R1中的内容循环右移两位后传送到R0 中。
5RRX
RRX的格式为:
通用寄存器,RRX 操作数      
RRX可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位C来填充。其中,操作数可以是通用寄 存器,也可以是立即数(031)。
操作示例:
MOV   R0, R1, RRX #2         ;将R1中的内容进行带扩展的循环右移两位后传送到R0中。


九、协处理器指令
1CDP指令
CDP指令的格式为:
CDP{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2
CDP指令用于ARM处理器通知ARM协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码1和协处理 器操作码2为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM处理器的寄存器和存储器。
指令示例:
CDP   P32C12C10C34  ;该指令完成协处理器P3的初始化
2LDC指令
LDC指令的格式为:
LDC{条件}{L} 协处理器编码,目的寄存器,[源寄存器]
LDC指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指 令为长读取操作,如用于双精度数据的传输。
指令示例:
LDC   P3C4[R0]       ;将ARM处理器的寄存器R0所指向的存储器中的字数 据传送到协处理器P3的寄存器C4中。
3STC指令
STC指令的格式为:
STC{条件}{L} 协处理器编码,源寄存器,[目的寄存器]
STC指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指 令为长读取操作,如用于双精度数据的传输。
指令示例:
STC   P3C4[R0]    ;将协处理器P3的寄存器C4中的字数据传送到ARM处理 器的寄存器R0所指向的存储器中。
4MCR指令
MCR指令的格式为:
MCR{条件} 协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2
MCR指令用于将ARM处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理 器操作码2为协处理器将要执行的操作,源寄存器为ARM处理器的寄存器,目的寄存器1和目的寄存器2均为协处理器的寄 存器。
指令示例:
MCR   P33R0C4C56    ;将ARM处理器寄存器R0中的数据传送到协处 理器P3的寄存器C4C5中。
5MRC指令
MRC指令的格式为:
MRC{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2
MRC指令用于将协处理器寄存器中的数据传送到ARM处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理 器操作码2为协处理器将要执行的操作,目的寄存器为ARM处理器的寄存器,源寄存器1和源寄存器2均为协处理器的寄存器。
指令示例:
MRC   P33R0C4C56    ;该指令将协处理器P3的寄存器中的数据传送到 ARM处理器寄存器中。
继承事业,薪火相传
返回列表