加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 5.5  单数据交换指令
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

数据传送指令之:单数据交换指令

2013/09/13
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

 

5.5  单数据交换指令

交换指令是load/store指令的一种特例,它把一个寄存器单元的内容与寄存器内容交换。交换指令是一个原子操作(atomic operation),也就是说,在连续的总线操作中读/写一个存储单元,在操作期间阻止其他任何指令对该存储单元的读/写。

交换指令如表5.4所示。

表5.4    交换指令SWP

指    令

作    用

操    作

SWP

字交换

Tmp=men32[Rn]

Mem32[Rn]=Rm

Rd=tmp

续表

指    令

作    用

操    作

SWPB

字节交换

Tmp=men8[Rn]

Mem8[Rn]=Rm

Rd=tmp

注意

交换指令在执行期间不能被其他任何指令或其他任何总线访问打断,在此期间系统占用总线(holds the bus),直至交换完成。

5.5.1  字交换指令SWP

(1)指令编码格式

SWP指令用于将内存中的一个字单元和一个指定寄存器的值相交换。操作过程如下,假设内存单元地址存放在寄存器<Rn>中,指令将<Rn>中的数据读取到目的寄存器Rd中,同时将另一个寄存器<Rm>的内容写入到该内存单元中。当<Rd>和<Rm>为同一个寄存器时,指令交换该寄存器和内存单元的内容。

指令的编码格式如图5.20所示。

图5.20  SWP指令编码格式

(2)指令的语法格式

SWP{<cond>}  <Rd>,<Rm>,[<Rn>]

① <cond>

为指令编码中的条件域。它指示SWP指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

② <Rd>

目标寄存器。

③ <Rm>

寄存器包含将要存储到内存中的数据。

④ <Rn>

寄存器中包含将要访问的内存地址。

(3)指令操作的伪代码

指令操作伪代码如下面程序段所示。

If  ConditionPassed{cond}  then

     If  Rn[1:0]==0b00  then

            Temp=memory[Rn,4]

     Else  if  Rn[1:0]==0b01  then

            Temp=memory[Rn,4]  Rotate_right 8

     Else  if  Rn[1:0]==0b10  then

            Temp=memory[Rn,4]  Rotate_right 16

     Else  /*  Rn[1:0]==0b11  */

            Temp=memory[Rn,4]  Rotate_right 24

     Memory[Rn,4]=Rm

     Rd=temp

 

5.5.2  字节交换指令SWPB

(1)指令编码格式

SWPB指令用于将内存中的一个字节单元和一个指定寄存器的低8位值相交换,操作过程如下。假设内存单元地址存放在寄存器<Rn>中,指令将<Rn>中的数据读取到目的寄存器Rd中,寄存器Rd的高24位设为0,同时将另一个寄存器<Rm>的低8位内容写入到该内存字节单元中。当<Rd>和<Rm>为同一个寄存器时,指令交换该寄存器低8位内容和内存字节单元的内容。

指令的编码格式如图5.21所示。

图5.21  SWPB指令编码格式

(2)指令的语法格式

SWP{<cond>}B  <Rd>,<Rm>,[<Rn>]

① <cond>

为指令编码中的条件域。它指示SWPB指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

② <Rd>

目标寄存器。

③ <Rm>

寄存器包含将要存储到内存中的数据。

④ <Rn>

寄存器中包含将要访问的内存地址。

(3)指令操作的伪代码

指令操作伪代码如下面程序段所示。

If  ConditionPassed{cond}  then

     Temp=Memory[Rn,1]

     Memory[Rn,1]=Rm[7:0]

     Rd=temp

5.5.3  交换指令SWP应用

寄存器和存储器交换指令SWP指令用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写到该内存单元中,使用SWP可实现信号量操作。

格式如下。

SWP{cond}B  Rd,Rm,[Rn]

其中,B为可选后缀,若有B,则交换字节,否则交换32位字。Rd为目的寄存器,存储从存储器中加载的数据,同时,Rm中的数据将会被存储到存储器中。若Rm与Rn相同,则为寄存器与存储器内容进行交换。Rn为要进行数据交换的存储器地址,Rn不能与Rd和Rm相同。

【例5.6】SWP指令举例。

SWP  r1,r1,[r0]         ;将r1的内容与r0指向的存储单元内容进行交换

SWPB  r1,r2,[r0]        ;将r0指向的存储单元内容读取一字节数据到r1中(高24位清零),

                       并将r2的内容写入到该内存单元中(最低字节有效)

使用SWP指令可以方便地进行信号量操作。

12C_SEM      EQU     0x40003000

             ……

12C_SEM_WAIT

          MOV      r0,#0

          LDR      r0,=12C_SEM

          SWP      r1,r1,[r0]        ;取出信号量,并将其设为0

          CMP      r1,#0             ;判断是否有信号

          BEQ      12C_SEM_WAIT       ;若没有信号则等待

Arm

Arm

ARM公司是一家知识产权(IP)供应商,主要为国际上其他的电子公司提供高性能RISC处理器、外设和系统芯片技术授权。目前,ARM公司的处理器内核已经成为便携通讯、手持计算设备、多媒体数字消费品等方案的RISC标准。公司1990年11月由Acorn、Apple和VLSI合并而成。

ARM公司是一家知识产权(IP)供应商,主要为国际上其他的电子公司提供高性能RISC处理器、外设和系统芯片技术授权。目前,ARM公司的处理器内核已经成为便携通讯、手持计算设备、多媒体数字消费品等方案的RISC标准。公司1990年11月由Acorn、Apple和VLSI合并而成。收起

查看更多

相关推荐

电子产业图谱

华清远见(www.farsight.com.cn)是国内领先嵌入师培训机构,2004年注册于中国北京海淀高科技园区,除北京总部外,上海、深圳、成都、南京、武汉、西安、广州均有直营分公司。华清远见除提供嵌入式相关的长期就业培训、短期高端培训、师资培训及企业员工内训等业务外,其下属研发中心还负责嵌入式、Android及物联网方向的教学实验平台的研发及培训教材的出版,截止目前为止已公开出版70余本嵌入式/移动开发/物联网相关图书。企业理念:专业始于专注 卓识源于远见。企业价值观:做良心教育、做专业教育,更要做受人尊敬的职业教育。