J'essaie de décaler un nombre stocké dans le registre EAX par la quantité stockée dans le registre EBX. Cependant, lorsque j'essaie d'exécuter mon programme avec l'instruction shift suivante :

shll %ebx, %eax

Je récupère l'erreur suivante à la compilation :

Erreur : incompatibilité de type d'opérande pour `shl'

Je ne comprends pas bien ce que signifie cette erreur, d'après ce que je comprends, passer des références de registre en tant que paramètres devrait être l'utilisation correcte d'une fonction de décalage.

1
Adam Lee 31 oct. 2020 à 01:43

1 réponse

Meilleure réponse

Le compte de décalage dans une instruction x86 doit être soit une constante, soit dans le registre %cl. Vous ne pouvez pas utiliser d'autres registres pour le décompte des équipes. %ebx n'est ni une constante ni %cl, vous obtenez donc une erreur.

Le le manuel d'Intel montre les formes disponibles de shl.

Si vous pouvez supposer la prise en charge des extensions BMI2, shlx %ebx, %eax, %eax permet au nombre de décalages d'être un registre arbitraire et est plus rapide sur les processeurs Intel. (https://www.felixcloutier.com/x86/sarx:shlx:shrx)

6
Peter Cordes 31 oct. 2020 à 01:45