В языке ассемблера, если мы используем
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