如果我们使用汇编语言
mov eax, dword ptr[ebx]
那么就是复制ebx指向的值(ebx包含的是地址值,不是实际值,这条指令复制的是地址中的实际值)?
如果我们使用
mov eax, dword ptr[some_variable]
那么这意味着将变量“some_variable”本身的值复制到eax,而不是复制变量“some_variable”指向的值?
我的理解正确吗?
如果是,我很困惑为什么相同的汇编指令有两种不同的含义——在第一种情况下有一个间接级别,但在第二种情况下没有额外的间接级别。
任何意见?
编辑:
并非每个 [] 都不会产生任何影响,例如,指令 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