Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
709 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  PTR

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PTR

n°920115
maerlin666
Posté le 10-12-2004 à 23:14:53  profilanswer
 

salut c'est mon premier post dans la section asm,
j'ai une question sur le mot PTR
J'utilise MASM
par exemple
 
double DWORD ?
 
mov ax, WORD PTR double
 
pourquoi l'expression  
mov ax, double
 est elle fausse  
 
double est une varialble contenant une adresse de depart
WORD PTR double est ausi une variable contenant une adresse de depart  
en quoi WORD PTR est il necessaire pour ne prendre que le premier mot de double
quelle difference y a t il entre les deux formes  
 
merci  

mood
Publicité
Posté le 10-12-2004 à 23:14:53  profilanswer
 

n°920125
chrisbk
-
Posté le 10-12-2004 à 23:27:43  profilanswer
 

bin ax fait 16bits, donc fo que ty fasse entrer qqchose de 16bits

n°920127
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-12-2004 à 23:32:02  profilanswer
 

DWORD = 4 octets
WORD = 2 octets
 
mov ax,double => j'essaie de faire rentrer 4 octets dans un espace de 2 octets => BOUM
mov ax,WORD PTR double => j'essaie de faire entrer les 2 premiers octets pointés par l'adresse "double" dans un espace de 2 octets => OK


---------------
J'ai un string dans l'array (Paris Hilton)
n°920138
maerlin666
Posté le 10-12-2004 à 23:40:47  profilanswer
 

pouvez vous me dire la difference physique entre un pointeur WORD PTR et [double]
comment le processeur sait il que l'un est sur 4 bytes et l'autre sur 2

n°920141
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-12-2004 à 23:46:37  profilanswer
 

WORD PTR renvoie les 2 premiers octets pointés par l'adresse "double"
[double] renvoie le contenu de l'adresse mémoire "double", qui sera donc obligatoirement sur 4 octets (puisque "double" est déclaré comme une variable de 4 octets)


Message édité par Harkonnen le 10-12-2004 à 23:46:59

---------------
J'ai un string dans l'array (Paris Hilton)
n°920563
maerlin666
Posté le 11-12-2004 à 18:44:00  profilanswer
 

ce que je ne comprend pas c'est que double est une adresse
par exemple double remplace 0x00000000
 
si je fais  
mov eax, double
 
ca equivaut a
mov eax, [0x00000000]
 
et si je fais  
mov ax, [0x00000000]
ca devrait aussi marcher non.
 
Etantdonné que l'adresse ne donne aucune information sur la taille de la variable comment celle ci est elle definie?
 
est ce que double contient plus d'information qu'un simple
0x00000000
 

n°921778
db__
spécialiste de l'à peu près
Posté le 13-12-2004 à 13:03:16  profilanswer
 

Le problème c'est que pour l'assembleur qui va transformer ton code en langage machine tu déclare une adresse symbolique comme pointant sur un mot de 32 bits
AX étant un registre 16 bits, l'assembleur te signal juste que tu essaie de mettre dans AX (16 bits) un contenu de 32 bits en C on ferait un cast ici le word ptr est l'équivalent du cast.
Ce n'est pas un problème du langage machine, seulement un problème de syntaxe propre à l'assembleur masm
je pense que nasm accepterait la conversion implicite sans problème.
exemple
mov [0], 1             provoquera une erreur car l'assembleur est incapable de déterminer s'il travaille sur des octets ou 16 bits ou 32 bits
mov [double], 1        ne provoquera pas d'erreur car l'assembleur sait qu'il travaille sur un 32 bits vu la déclaration préalable.

n°922079
bjone
Insert booze to continue
Posté le 13-12-2004 à 17:26:04  profilanswer
 

mov eax, [0x00000000]
et
mov ax, [0x00000000]
 
n'ont pas le même opcode forcément.

n°922642
db__
spécialiste de l'à peu près
Posté le 14-12-2004 à 13:00:24  profilanswer
 

Sauf erreur de ma part,
mov eax, [0x00000000] et mov ax, [0x00000000]
ont le même code machine
il y aura éventuellement un octet avant ce code suivant le contexte du processeur à ce moment.
en contexte 16 bits mov eax, [0x00000000] aura un octet préfixe pour indiquer une opération 32 bits alors que
mov ax, [0x0000] n'en aura pas
en contexte 32 bits mov eax, [0x00000000] n'aura pas d'octet préfixe mais mov ax, [0x00000000] en aura un
tout comme mov eax, ebx et mov ax, bx ont le même code machine seul le contexte 32 bits ou 16 bits fera la différence et il faudra utiliser un octet préfixe modificateur de contexte pour passer du 16 bits au 32 bits ou inversement.

n°922699
bjone
Insert booze to continue
Posté le 14-12-2004 à 13:50:55  profilanswer
 

oui j'entends avec l'octet de préfixe.
sinon c'est tout à fait ça, et c'est 66h l'octet de préfixe (bon à savoir pour faire du 32bits avec un assembleur 16bits)


Message édité par bjone le 14-12-2004 à 13:51:29

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  PTR

 

Sujets relatifs
Plus de sujets relatifs à : PTR


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR