使用する場合はアセンブリ言語で
mov eax, dword ptr[ebx]
次に、ebxが指す値をコピーすることを意味します(ebxには実際の値ではなくアドレス値が含まれ、この命令はアドレスの実際の値をコピーします)?
使用する場合
mov eax, dword ptr[some_variable]
次に、変数「some_variable」自体の値をeaxにコピーすることを意味し、変数「some_variable」が指す値をコピーするのではありませんか?
私の理解は正しいですか?
はいの場合、同じアセンブリ命令に2つの異なる意味がある理由がわかりません。最初のケースでは間接参照のレベルがありますが、2番目のケースでは追加の間接参照レベルはありません。
任意のコメント?
編集:
すべての[]が効果を発揮するわけではありません。たとえば、命令xchgは、edxが指す値をロードするin-directionのレベルを取ります。
ソースコード全体は、から見つけることができます、
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