-
LOCKis not an instruction itself: it is an instruction prefix, which applies to the following instruction. That instruction must be something that does a read-modify-write on memory (INC,XCHG,CMPXCHGetc.) — in this case it is theincl (%ecx)instruction whichincrements thelong word at the address held in theecxregister.The
LOCKprefix ensures that the CPU has exclusive ownership of the appropriate cache line for the duration of the operation, and provides certain additional ordering guarantees. This may be achieved by asserting a bus lock, but the CPU will avoid this where possible. If the bus is locked then it is only for the duration of the locked instruction. -
This code copies the address of the variable to be incremented off the stack into the
ecxregister, then it doeslock incl (%ecx)to atomically increment that variable by 1. The next two instructions set theeaxregister (which holds the return value from the function) to 0 if the new value of the variable is 0, and 1 otherwise. The operation is an increment, not an add (hence the name).