(译自intel 64-ia-32-architectures-software-developer-instruction-set-reference-manual)
LOCK指令前缀会设置处理器的LOCK#信号(译注:这个信号会使总线锁定,阻止其他处理器接管总线访问内存),直到使用LOCK前缀的指令执行结束,这会使这条指令的执行变为原子操作。在多处理器环境下,设置LOCK#信号能保证某个处理器对共享内存的独占使用。
LOCK指令前缀只能用于以下指令,并且要求指令目的操作数为内存操作数,如果源操作数为内存操作数,就会产生undefined opcode异常:ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B,CMPXCHG16B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG。LOCK指令前缀用于其他任何指令时,也会产生如果源操作数为内存操作数,就会产生undefined opcode异常。另外,XCHG指令默认会设置LOCK#信号,无论是否使用LOCK指令前缀。
LOCK指令前缀经常用于BTS指令,用来在共享内存进行一次read-modify-write操作。
从P6处理器家族开始,如果使用了LOCK指令前缀的指令要访问的目的地址的内容已经缓存在了cache中,那么LOCK#信号一般就不会被设置,但是当前处理器的cache会被锁定,然后缓存一致性(cache coherency )机制会自动确保操作的原子性。
Intel 64汇编指令集中的LOCK指令前缀
最新推荐文章于 2024-09-13 20:28:03 发布