Comment lire et écrire x86 drapeaux de registres?
De ce que j'ai lu, semble comme il y a 9 différents drapeaux. Est-il possible de lire/modifier directement? Je sais que je peux savoir par exemple si l'indicateur de zéro est réglé, après avoir fait un cmp/instruction jmp, mais je me demande si il est possible de faire quelque chose comme
mov eax, flags
ou quelque chose.
Aussi, pour l'écriture, est-il possible de les mettre à la main?
Connexes: en.wikipedia.org/wiki/FLAGS_register a une carte de drapeau est où, après
Connexes: Comment puis-je activer ou désactiver indicateur de débordement en x86 assemblée? pour la compensation / réglage DE avec soit PUSHF/ET/POPF, ou une séquence d'instructions qui écrit tous les indicateurs, y compris DE avec une des valeurs connues.
pushf
ou lahf
.Connexes: Comment puis-je activer ou désactiver indicateur de débordement en x86 assemblée? pour la compensation / réglage DE avec soit PUSHF/ET/POPF, ou une séquence d'instructions qui écrit tous les indicateurs, y compris DE avec une des valeurs connues.
OriginalL'auteur devoured elysium | 2009-09-10
Vous devez vous connecter pour publier un commentaire.
Certains indicateurs peuvent être définis ou compensés directement avec des instructions spécifiques:
Pour la lecture et l'écriture, le signe, le zéro, auxiliaire de transporter, de la parité, et de porter les drapeaux, vous pouvez utiliser LAHF à charge de la partie inférieure 8 bits (ceux de 5 drapeaux de plus de 3 durée indéterminée bits) dans le registre AH, et vous pouvez les utiliser SAHF pour stocker les valeurs de AH en arrière dans l'historique des indicateurs.
Vous pouvez également utiliser le PUSHF instruction de pousser les drapeaux sur la pile, les lire et les modifier sur la pile, puis utilisez la POPF instruction de stocker et de retrouver l'historique des indicateurs.
Notez que vous ne pouvez pas définir la VM et RF drapeaux avec POPF-ils conserver leurs valeurs précédentes. De même, vous pouvez uniquement modifier les I/O niveau de privilège lors de l'exécution au niveau de privilège 0, et l'interruption indicateur ne peut être modifiée lors de l'exécution à un niveau de privilège au moins privilégiés que l'I/O niveau de privilège.
OriginalL'auteur Adam Rosenfield
Vous pouvez utiliser le pushf et popf instructions qui va pousser les drapeaux sur la pile, vous pouvez les modifier, puis les faire éclater.
OriginalL'auteur Michael
Si vous avez besoin seulement de l'octet de poids faible de l'historique des indicateurs (qui contient SF,ZF,AF,PF,CF), alors il est bizarre, mais pratique instruction LAHF (ha ha), qui charge le bas 8 bits de l'historique des indicateurs en AH, et son homologue SAHF pour stocker AH en drapeaux.
Pour le porte drapeau spécifiquement, x86 offre CCL, ctl et de la CMC, de clair, de définir et de compléter le drapeau de portage, respectivement.
OriginalL'auteur I. J. Kennedy
SETcc
Cette instruction en famille est un autre moyen d'observer un certain nombre de drapeaux /combinaison d'indicateurs. E. g., pour
CF
:Ccc
Cette instruction en famille est bien sûr une autre possibilité pour certains drapeaux, et pourrait être utilisé pour mettre en œuvre
SETcc
:OriginalL'auteur Ciro Santilli 新疆改造中心 六四事件 法轮功
Façon la plus simple est d'utiliser pushf/popf.
Si vous souhaitez déplacer
eflags
eneax
, utilisez le code ci-dessous.pop %eax
comme une personne normale? POP est plus rapide et plus petit que MOV + AJOUTER.Vous avez raison. Je vous remercie. J'ai corrigé!
OriginalL'auteur Jiwon
Enregistrer une copie des drapeaux dans une variable pour la garde
SAHF: magasins AH dans les indicateurs de statut
Récupérer la valeur de flags stockées précédemment
OriginalL'auteur israa