En lenguaje ensamblador si utilizamosDWORD uso ptr confusión
mov eax, dword ptr[ebx]
entonces significa copiar el valor señalado por EBX (EBX contiene el valor de la dirección, no el valor real, esta instrucción copia el valor real en la dirección)?
Si utilizamos
mov eax, dword ptr[some_variable]
entonces significa copiar el valor de la variable "some_variable" sí a EAX, no copia el valor apuntado por la variable "some_variable"?
¿Es correcto mi entendimiento?
En caso afirmativo, no estoy seguro de por qué la misma instrucción de ensamblaje tiene dos maneras diferentes: en el primer caso, hay un nivel de indirección, pero en el segundo no hay un nivel adicional de indirección.
¿Alguna observación?
EDIT:
No todos [] no teniendo ningún efecto, por ejemplo, xchg instrucción se llevará a un nivel de in-dirección, que carga el valor señalado por EDX.
código fuente entero se puede conocer a partir,
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
"sin corchetes, significaría lo mismo". - eso depende del ensamblador utilizado. MASM permite esto, nasm/yasm/fasm no (y con razón, usted * está * haciendo indirección cuando lee una variable, lo mejor es ser explícito al respecto. De eso se trata el montaje, ¿no?) – snemarch
Sí, claro. Una comprensión errónea a menudo equivale a una depuración a largo plazo. – sharptooth
Hola sharptooth, si agrega [] y sin agregar [], los efectos son los mismos, ¿por qué las personas escribirán adicional []? Creo que la mayoría de los desarrolladores son flojos.:-) – George2