7 votes

Comment puis-je activer ou désactiver le drapeau de débordement en assembleur x86 ?

Je souhaite écrire un code simple (ou un algorithme) pour activer/désactiver le drapeau de débordement. Pour définir OF, je sais que je peux utiliser des valeurs signées. Mais comment puis-je l'effacer ?

3voto

user1354557 Points 659

Il existe de nombreuses solutions possibles.

Par exemple, test al, al effacera le OF sans affecter le contenu du registre.


Ou, si vous ne voulez pas affecter les autres drapeaux, vous pouvez simplement modifier directement l'attribut *FLAGS registre. Par exemple, en 32 bits, cela ressemblerait à :

pushfd                   ; Push EFLAGS onto the stack
and dword [esp], ~0x800  ; Clear bit 11 (OF)
popfd                    ; Pop the modified result back into EFLAGS

Edit : Changé <code>or al, al</code> à <code>test al, al</code> par <a href="https://stackoverflow.com/users/224132/peter-cordes">Peter Cordes </a>Recommandation. (Les effets sont les mêmes, mais cette dernière est meilleure pour des raisons de performance).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X