Chinaunix首页 | 论坛 | 博客
  • 博客访问: 550131
  • 博文数量: 181
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1498
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 15:17
个人简介

用发呆的时间来理清自己的思绪

文章存档

2015年(7)

2014年(134)

2013年(40)

分类: 嵌入式

2014-07-20 17:00:53

    寄存器和存储器交换指令。SWP指令用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd 中,同时将另一个寄存器Rm 的内容写入到该内存单元中,该操作是一个原子操作使用SWP可实现信号量操作。
    指令格式如下:
    SWP{cond}{B} Rd,Rm,[Rn]
    其中,B为可选后缀,若有B,则交换字节,否则交换32 位字:Rd 为数据从存储器加载到的寄存器;Rm 的数据用于存储到存储器中,若Rm 与Rn 相同,则为寄存器与存储器内容进行交换;Rn 为要进行数据交换的存储器地址,Rn 不能与Rd 和Rm 相同。
     SWP 指令举例如下:
     SWP R1,R1,[R0] ; 将R1 的内容与R0 指向的存储单元的内容进行交换
     SWP 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      ;若没有信号,则等待
文章摘自:
阅读(1449) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~