LOCK

LOCK# 信号前缀

stableVMJITAOTinstruction

这是前缀而非指令:它修饰其后的指令,本身没有编码。

说明

使处理器的LOCK#信号在执行配套指令(将指令变为原子指令)时得到坚持. 在多处理器环境中,LOCK#信号确保处理器在信号被断言时,能够独家使用任何共享内存.

在大多数IA-32和所有Intel 64处理器中,不断言LOCK#信号就可能发生锁定. 详见下文"IA-32架构兼容性"部分.

LOCK前缀只能预制到以下指令,并且只能预制到目标操作数为内存操作数的指令形式: 1. ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,CMPXCHG16B,DEC,INC,NEG,NOT,OR,SBB,SUB,XOR,XADD,XCHG. 如果使用LOCK前缀时带有这些指令之一,且源操作数是一个内存操作数,则可以生成一个未定义的操作码例外(#UD). 如果使用 LOCK 前缀, 并使用不属于以上列表的任何指令, 也会生成未定义的 操作码 例外 。 XCHG指令总是坚持LOCK#信号,无论LOCK前缀是否存在.

LOCK前缀一般与BTS指令一起用于在共享内存环境中的内存位置上执行读改写操作.

LOCK前缀的完整性不受内存字段对齐的影响. 对任意错配字段进行内存锁定观察.

此指令的操作在非64位模式和64位模式中是相同的.

IA-32 架构兼容性

从P6家族处理器开始,当LOCK前缀被前缀到一个指令,并且正在访问的内存区域在处理器内部缓存时,一般不断言LOCK#信号. 相反,只有处理器的缓存被锁定. 在这里,处理器的缓存一致性机制确保操作在内存方面进行解剖. 见Intel(R)64和IA-32架构软件开发者手册第11章"锁定操作对内部处理器卡切斯的影响",第3A卷,关于锁定缓存的更多信息.

行动

AssertLOCK#(DurationOfAccompaningInstruction);

受影响的旗帜

None.

异常

保护模式
#UD如果使用 LOCK 前缀时未列出指令: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, CMPXCHG16B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG. 当应用 LOCK前缀时,可以产生其他例外.
实地址模式
与保护模式中的例外相同.
虚拟 8086 模式
与保护模式中的例外相同.
兼容模式
与保护模式中的例外相同.
64 位模式
与保护模式中的例外相同.

来源