opérandes de mémoire d'assemblage x86
-
11-10-2019 - |
Question
Bonjour à tous J'ai une question relative à x86. Dans le manuel Intel une instruction peut prendre différents types d'opérations de mémoire. par exemple. IDIV r / ou m8 IDIV r / M16 ou IDIV r / M32 ou IDIV r / M64 maintenant ils sont tous IDIV est-il possible de savoir si l'opérande est m8, M16, M32 ou M64? Je pensais si l'opérande est alors m8 il est adressé par un registre 8 bits par exemple. hache si 32 puis EAX, esp ... Mon hypothèse correcte? Corrige moi si je me trompe Toutes les suggestions bienvenues Merci
La solution
Oui, le registre qui est utilisé comme opérande résout l'ambiguïté. (Notez, cependant, que ax
est un registre de 16 bits, et non pas un registre à 8 bits. - ce serait ah
ou al
pour l'octet de poids faible ou élevée, respectivement)
Si vous ne se référant à des opérandes de mémoire, vous devez utiliser un BYTE PTR
, WORD PTR
ou spécificateur DWORD PTR
pour résoudre l'ambiguïté, comme ceci:
mov dword ptr [eax], 0
Cet exemple définit la quantité de 32 bits ( « double mot ») à l'adresse contenue dans eax
à 0.
Autres conseils
-
Si l'opérande est m8, M16 ou M32, le registre utilisé pour régler l'emplacement de mémoire peut être 8, 16 ou 32 bits. - tous sont afaik valide
-
Pour spécifier le nombre de bits doivent être lus de la mémoire, vous devez utiliser un de la taille spécificateurs
byte
,word
oudword
avant l'adresse. Par exemple:
idiv byte [bx] ; m8
idiv word [bx] ; m16
idiv dword [bx] ; m32