交流指令是load/store指令的一种特例,它把一个寄存器单元的内容与寄存器内容交流。交流指令是一个原子操作(atomic operation),也就是说,在接连的总线操作中读/写一个存储单元,在操作期间阻挠其他任何指令对该存储单元的读/写。
留意交流指令在履行期间不能被其他任何指令或其他任何总线拜访打断,在此期间体系占用总线(holds the bus),直至交流完结。
SWP指令用于将内存中的一个字单元和一个指定寄存器的值相交流。操作的流程如下,假定内存单元地址存放在寄存器《Rn》中,指令将《Rn》中的数据读取到意图寄存器Rd中,一起将另一个寄存器《Rm》的内容写入到该内存单元中。当《Rd》和《Rm》为同一个寄存器时,指令交流该寄存器和内存单元的内容。
为指令编码中的条件域。它指示SWP指令在什么样的条件下履行。当《cond》疏忽时,指令为无条件履行(cond=AL(Alway))。
SWPB指令用于将内存中的一个字节单元和一个指定寄存器的低8位值相交流,操作的流程如下。假定内存单元地址存放在寄存器《Rn》中,指令将《Rn》中的数据读取到意图寄存器Rd中,寄存器Rd的高24位设为0,一起将另一个寄存器《Rm》的低8位内容写入到该内存字节单元中。当《Rd》和《Rm》为同一个寄存器时,指令交流该寄存器低8位内容和内存字节单元的内容。
为指令编码中的条件域。它指示SWPB指令在什么样的条件下履行。当《cond》疏忽时,指令为无条件履行(cond=AL(Alway))。
寄存器和存储器交流指令SWP指令用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,一起将另一个寄存器Rm的内容写到该内存单元中,运用SWP可完成信号量操作。
其间,B为可选后缀,若有B,则交流字节,不然交流32位字。Rd为意图寄存器,存储从存储器中加载的数据,一起,Rm中的数据将会被存储到存储器中。若Rm与Rn相同,则为寄存器与存储器内容做交流。Rn为要进行数据交流的存储器地址,Rn不能与Rd和Rm相同。
SWP r1,r1,[r0] ;将r1的内容与r0指向的存储单元内容做交流
SWPB r1,r2,[r0] ;将r0指向的存储单元内容读取一字节数据到r1中(高24位清零),
