На ассемблере, если мы используем
mov eax, dword ptr[ebx]
тогда это означает скопировать значение, указанное в ebx (ebx содержит значение адреса, а не фактическое значение, эта инструкция копирует фактическое значение в адресе)?
Если мы используем
mov eax, dword ptr[some_variable]
тогда это означает, что нужно скопировать значение переменной "some_variable" в eax, а не скопировать значение, указанное в переменной "some_variable"?
Правильно ли мое понимание?
Если да, я запутался, почему одна и та же инструкция по сборке имеет два разных значения - в первом случае есть уровень косвенности, но во втором нет дополнительного уровня косвенности.
Любой комментарий?
EDIT:
Не каждый [] не дает никакого эффекта, например, инструкция xchg будет принимать уровень в направлении, который загружает значение, указанное edx.
Весь исходный код можно найти,
http://www.codeproject.com/KB/threads/spinlocks.aspx
#ifdef WIN32
inline int CPP_SpinLock::TestAndSet(int* targetAddress, int nValue)
{
__asm {
mov edx, dword ptr [pTargetAddress]
mov eax, nValue
lock xchg eax, dword ptr [edx]
}
}
#endif // WIN32