La meilleure façon de comprendre ces opérations est de marcher à travers eux étape par étape. Je vais essayer d'expliquer le processus du mieux que je peux. À chaque étape, j'inclurai le statut des deux registres pour que vous puissiez suivre. Afin de maintenir les valeurs supérieures de EAX, nous devons d'abord déplacer son contenu dans un autre registre pour la manipulation.
Début:
EAX: 1100 1001 1111 0011 1011 1100 1001 1111
mov ebx, eax; copies contenu de eax dans EBX
EAX: 0011 1100 1001 1111 1011 1100 1001 1111
EBX: 1100 1001 1111 0011 1011 1100 1001 1111
SHL EBX, 24; cela efface les bits de ebx que nous ne sommes pas concernés
shr ebx, 24; déplace en arrière à la position initiale
EAX: 0011 1100 1001 1111 1011 1100 1001 1111
EBX: 0000 0000 0000 0000 0000 0000 1100 1001
SHL EBX, 4; Déplacez-vous vers la gauche de 4 bits. Bx est où nous le voulons pour la prochaine étape.
EAX: 0011 1100 1001 1111 1011 1100 1001 1111
EBX: 0000 0000 0000 0000 0000 1100 1001 0000
add bl, 0Fh; ajoute 0xF à bl. Ou, en binaire, 1111. jeu de quartet le moins significatif.
EAX: 0011 1100 1001 1111 1011 1100 1001 1111
EBX: 0000 0000 0000 0000 0000 1100 1001 1111
ax xor, ax; efface le contenu de la hache, faire de la place pour ce qui est Bx
EAX: 0011 1100 1001 1111 0000 0000 0000 0000
EBX: 0000 0000 0000 0000 0000 1100 1001 1111
hache ajouter, bx; combiner les résultats de bx retour dans eax pour le résultat final
EAX: 1100 1001 1111 0011 0000 1100 1001 1111
Et là, vous l'avez! Maintenant que vous connaissez les opérations de quart, je vous laisse la dernière partie.
À la votre!
Utilisez-vous uniquement des quarts de travail? ** 2 ** ressemble à un travail pour ET/OU. ** 3 ** ne semble pas possible en utilisant * seulement * Maj ou tourner. Cela ressemble à un travail pour LEA (qui change et ajoute dans le même insn): 'lea ecx, [rcx * 2]'/'lea eax, [rcx + 8 * rax]'. Ou plus simplement, faites x10 avec x2, x5: 'shl eax' /' lea eax, [rax + 4 * rax] '. –