x86 Assemblée des pointeurs

espère que ce n'est pas une question stupide, mais je suis en train d'envelopper mon esprit autour de pointeurs dans l'assemblée.

Quelle est exactement la différence entre:

mov eax, ebx

et

mov [eax], ebx

et quand doit - dword ptr [eax] doit être utilisé?

Aussi, quand j'ai essayer de faire mov eax, [ebx] j'obtiens une erreur de compilation, pourquoi est-ce?

mov eax, ebx se déplace de la valeur dans le registre E EAX . Le mov [eax], ebx déplace la valeur de 32 bits dans E à l'emplacement de mémoire que EAX pointe à.
Ok, donc juste pour s'assurer que je suis à la compréhension de ce correctement. Le code suivant: int a; _asm { mov [a], eax copie la valeur stockée dans eax dans l'emplacement de mémoire qui int un vers? Si je procéder pour imprimer la valeur de a, puis-je voir la valeur qui a été stocké dans eax? Aussi, si je ne la suivant à la place: int a = 5; _asm{ mov [eax], a Ce qui se passe là-bas? Eax stockage de l'emplacement de la mémoire de l'un? ou est-ce le stockage de 5?
Il n'est pas aussi simple que cela. Si nous supposons que a est une variable, alors mov [a],ebx va écrire la valeur dans ebx à cette variable (a est considérée comme une adresse trop). Certains compilateurs permettent également mov a,ebx à faire de même, d'autres pas. Mais eax est un registre, de sorte qu'il n'est pas une variable. mov [eax],ebx n'est pas le même que mov eax,ebx. Le premier magasin ebx à l'adresse pointée par eax, ce dernier va stocker ebx dans eax.
Rudy je pense que vous venez peut-être éclairci un énorme point de confusion pour moi. Je suis à l'aide de Visual Studio (assembly en ligne) et a été à essayer de comprendre la différence entre mov a, eax et mov [a], eax. Lorsque l'on regarde les registres et les valeurs locales ils étaient tous identiques... vous dites qu'ils sont identiques? Grand savoir!
Dans MASM syntaxe les crochets [] sont ignorés, sauf si elles contiennent le nom d'un registre.

OriginalL'auteur Duxa | 2017-05-03