【发布时间】:2010-10-15 21:14:43
【问题描述】:
如果我们使用汇编语言
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
【问题讨论】:
标签: pointers assembly x86 masm dword