R>потому что xchg умеет только r/rm, r или наоборот r, r/rm
R>соотв-но инструкция lock xchg [eax], [eax] не компилируется:
R>error: invalid combination of opcode and operands
не ну емое.. это как раз таки фигня вопрос:
for (;;)
{
long l = *p;
if (_InterlockedCompareExchange(p, l, l)==l) break;
}