Ich möchte einen einfachen Code (oder Algorithmus) schreiben, um Überlaufflag zu setzen/löschen.können Sie mir helfen?Wie kann ich Überlauf-Flag in x86-Assembly setzen?
Antwort
Zum Einstellen der Overflow flag(OF) - Bit 11 of EFLAGS Verwendung (in MASM Syntax)
pushf ; mov EFLAGS to stack
bts dword ptr [esp], 11 ; set OF flag
popf ; write it back to status register
und jeweils verwenden folgenden wird die von Flag zurückgesetzt:
pushf ; mov EFLAGS to stack
btr dword ptr [esp], 11 ; reset OF flag
popf ; write it back to status register
'or' oder' and' mit einem Speicherziel ist weniger uops als 'bts [mem], imm auf Intel-CPUs. Selbst mit einer sofortigen Bitzahl sind 'bts' und Freunde mit einem Speicherziel nicht so effizient, also vermeide sie im Allgemeinen mit Speicheroperanden, außer wenn du einen atomaren (' lock') Test-and-set benötigst. –
Viele Befehle klare OF
als Nebenwirkung, zum Beispiel test
. Als solche können Sie etwas wie test eax, eax
schreiben und das wird OF
löschen, obwohl es andere Flags beeinflussen wird. Du hast nicht angegeben, ob das erlaubt ist.
Um OF
einzustellen, können Sie einige Operationen ausführen, die es einstellen. Fügen Sie zum Beispiel 1 zur größten positiven Zahl: mov al, 0x7f; add al, 1
Alternativ können Sie eine Kopie des Flags auf dem Stapel machen mit pushf
, ändern Sie es nach Ihren Wünschen und es dann popf
mit zurück.
Sie sollten in Erwägung ziehen, Ihre Antwort hier zu löschen und sie in das Duplikat zu verschieben. Oder indem Sie diese Frage markieren und einen Moderator bitten, alle seine Antworten in das Duplikat einzufügen. –
http://stackoverflow.com/questions/1406783/flags-register-can-we-read-oder-write-them-directly – ABuckau