Langage d'assemblage - Comment Faire Modulo?
Est là quelque chose comme un modulo-opérateur en Assembleur x86?
Vous devez vous connecter pour publier un commentaire.
Est là quelque chose comme un modulo-opérateur en Assembleur x86?
Vous devez vous connecter pour publier un commentaire.
La
DIV
instruction (et c'est homologueIDIV
pour les nombres signés) donne le quotient et le reste (modulo).DIV r16
divise un nombre de 32 bits dansDX:AX
par un 16-bit opérande et stocke le quotient dansAX
et le reste dansDX
.Exemple:
En 32 bits assemblée que vous pouvez faire
div ebx
de diviser une version 64 bits de l'opérande dansEDX:EAX
parEBX
. Voir Intels Développement Logiciel pour les Architectures, les Manuels de pour plus d'informations.Si vous calculer modulo une puissance de deux, à l'aide de bit-à-bit ET est plus simple et généralement plus rapide que d'effectuer la division. Si
b
est une puissance de deux,a % b == a & (b - 1)
.Par exemple, prenons une valeur dans le registre EAX, modulo 64.
La façon la plus simple serait
AND EAX, 63
, parce que 63 est de 111 111 en binaire.Masqués, la hausse des chiffres ne sont pas d'intérêt pour nous. L'essayer!
Analogiquement, au lieu d'utiliser MUL ou des DIV avec des puissances de deux, de décalage de bits est le chemin à parcourir. Méfiez-vous des entiers signés, si!