une petite explication sur mov

Pour discuter de l'assembleur
aliong
Messages : 44
Inscription : lun. 12/avr./2010 22:17

une petite explication sur mov

Message par aliong »

Bonsoir,
je suis vraiment très très nul en asm, mais j'essaie de mis mettre doucement et surement ! :p
voila je recherche des adresses de base dans différents programme et je suis tombé la dessus :
mov [eax], esi
EAX = 0BBF0648
ESI = 0000002B
donc d'après le peu de chose que je connais ESI est une constante. mais je comprend pas bien on déplace la valeur
de la constante ESI dans EAX ? on ajoute soustrait ?
Merci par avance pour votre aide !
Aliong
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: une petite explication sur mov

Message par Warkering »

Bonjour à toi!

Pour commencer, si tu pouvait nous dire ton assembleur que tu utilise ( Il en existe plusieurs : Nasm, GAS, Masm, Tasm et des poussières... ).
Quoique pour ce problème ce ne soit pas vraiment necéssaire! ESI est un registre, et non une constante. C'est la version étendue ( 32 bits ) du registre SI il me semble. Elle pointe généralement vers un bout de mémoire important ( Désolé, je ne me rapelle plus très bien des bases! ).
La fonction MOV permet de placer la valeur d'un registre ou bien tout simplement une donnée dans l'un des registre. Elle ne soustrait ni addition. Elle remplace simplement la valeur du premier registre par celui du deuxième indiquer.

MOV [Cible], [Donnée/Registre]

Bon codage!

EDIT : J'avais pas remarquer sur le coup, mais il y a des crochets autour du registre cible. Cela change tout le sens de l'instruction. Lorsque nous employons des balises, cela veut dire "L'adresse de ...". Pour ton instruction par exemple, cela signifie "Copier la valeur du registre ESI à l'adresse du registre EAX". Ce qui pour moi n'a pas trop de sens... :?
Y a-t-il un autre expert dans la salle? :lol:

Sinon, je peux aussi te conseiller ce tutoriel. Il n'offre que l'assembleur avec Tasm en 16 bits ( Voir section Download ), mais il contient les bases de n'importe lequel assembleur à savoir : les instructions et la syntaxe.
http://www.iprezo.org/index.php?page=asm
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: une petite explication sur mov

Message par TazNormand »

Warkering a écrit : EDIT : J'avais pas remarquer sur le coup, mais il y a des crochets autour du registre cible. Cela change tout le sens de l'instruction. Lorsque nous employons des balises, cela veut dire "L'adresse de ...". Pour ton instruction par exemple, cela signifie "Copier la valeur du registre ESI à l'adresse du registre EAX". Ce qui pour moi n'a pas trop de sens... :?
Salut

je ne suis pas expert, loin de là, mais j'ai quelques reste ASM 8 bits et 16 bits.
Copier une valeur/registre dans un autre registre permet de modifier ce registre, mais les crochets permettent de modifier "l'octet" à l'adresse de ce registre.
Si EAX = 0BBF0648 et ESI = 0000002B, et que les valeurs à ces emplacements mémoire soient respectivement FFFFFFFF et 99999999, alors on a :

Mov eax, esi ==> EAX=0000002B ==> Emplacement mémoire 0BBF0648 contient toujours FFFFFFFF
Mov[eax],esi ==> EAX=0BFF0648 ==> Emplacement mémoire 0BBF0648 contient maintenant 99999999

les crochets permettent de changer la valeur à une adresse mémoire indiquée par le registre eax par celle contenue dans ESI.

Aux experts : ai-je bien expliqué ?
Image
Image
aliong
Messages : 44
Inscription : lun. 12/avr./2010 22:17

Re: une petite explication sur mov

Message par aliong »

TazNormand a écrit :
Warkering a écrit : Aux experts : ai-je bien expliqué ?
je sais pas si tu as bien expliqué une chose est sur c'est que j'ai très bien compris et je vous remerci tous les deux pour vos réponses.
donc si j'ai bien compris ce que je recherche est stocké dans 0000002B.
je test et vous tiens au courant ! merci encore pour votre aide !
Aliong
Répondre