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

Était-ce utile?

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

  1. 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

  2. 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 ou dword avant l'adresse. Par exemple:

idiv byte [bx] ; m8

idiv word [bx] ; m16

idiv dword [bx] ; m32

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top