ARM信号量操作指令

来源:互联网 发布:c语言中删除文件 编辑:程序博客网 时间:2024/05/19 13:26

信号量操作指令

一、信号量用于进程间的同步和互斥。对信号量的操作通常是一个原子操作,即在一条指令中,完成信号量的读取和修改操作,而不能被中断。ARM中提供了两条指令完成信号量的操作(ARM v6架构之前的):

  1. SWP(交换指令)

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

    用于将一个内存单元(内存单元地址存放在寄存器Rn中)的内容读取到一个寄存器Rd,同时将另一个寄存器Rm的内容写入到该内存单元中。当Rd,Rm为同一个寄存器是,交换该寄存器和内存单元的内容。

  2. SWPB用于将一个内存单元(内存单元地址存放在寄存器Rn中)的内容读取到一个寄存器Rd,寄存器Rd的高24位设置为0,同时将另一个寄存器Rm的底8位数值写入到该内存单元中。当Rd,Rm为同一个寄存器是,交换该寄存器底8位和内存单元的内容

二、ARM v6ldrexstrex实现信号量操作,而不是SWP(交换指令)。

Loadand store exclusive //装载和存储专用指令

LDREX{<cond>} Rd, [Rn]

Rn保存的地址中装载数据到Rd,并设置内存监视器(monitor,从内存中读取数据放入到寄存器中。

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

Rd,保存存储状态的返回值,内存跟新成功,返回0;更新内存失败,返回1.

Rm,是需要保存到内存的值

Rn,要操作的内存地址


0 0
原创粉丝点击