在汇编语言中如果我们使用
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