Ich versuche, Register Flag Abhängigkeit in meiner Schleife zu vermeiden, und ich denke, gibt es eine Vergleichsanweisung für Integer, die nur CF oder OF-Flag gesetzt. Und nur diese Flaggen. Die wichtige Tatsache ist: Ist ein Operand größer oder nicht, so reicht das eine Bit aus.Vergleich Einstellung nur ein Flag
Antwort
Nein, gibt es nicht. Was genau willst du vermeiden? Alle CPUs (außer P4) benennen verschiedene Teile von EFLAGS einzeln um, also inc
doesn't have a false dependency on the old value of EFLAGS. Wenn Sie eine Schleife ohne Änderung einer Flagge erstellen möchten, ist es normalerweise CF
, die Sie beibehalten möchten. (Für eine adc
Schleife oder Verschieben von Bits aus einem Register in CF
eine nach der anderen.)
Sie kann Schleife ohne Fahnen an allen mit lea
und jrcxz
zu beeinflussen, aber das ist es nicht wert für eine adc
Schleife auf Intel SnB und später, wenn das partielle Flag-Merging schnell ist.
Aber wenn Sie ein tatsächliches vergleichen müssen, nicht nur ein Count-Down (like the slow loop
instruction), können Sie es wie folgt tun:
### Don't actually do this. This is just to illustrate how bad the best option is
# A in eax, B in ebx
movd xmm0, eax
movd xmm1, ebx
pcmpgtqd xmm0, xmm1 ; all-ones if eax>ebx (32bit signed compare), else all-0
movd ecx
jrcxz A_ngt_B
; fall-through path: A > B, ecx = -1
Dieses saugt viel, im Vergleich zu anderen Optionen. Es ist wahrscheinlich schlimmer, als einfach Flags mit sahf
/lahf
zu speichern/wiederherzustellen, oder das sogar langsamere pushf/popf
. Oft kann man eine Flagge mit einer setcc dl
oder so etwas "speichern", und dann eine Art test
oder sub dl, 1
, um einen Übertrag zu generieren oder nicht.
Um das zu erreichen genau das, was die Frage nach, verwenden Sie diesen Zweig auf jrcxz
bedingt läuft stc
oder clc
zu setzen oder zu löschen CF
(bedingt nur CF
ohne andere Einstellung zu beeinflussen).
Siehe auch die Tag Wiki.
- 1. Einstellung nur eine Set-Eigenschaft
- 2. Einstellung der Tastatur auf ein Textfeld nur in englischer Sprache
- 3. Einstellung DialogResult nur nach ShowDialog() in WPF
- 4. Einstellung Nur-Lese-Eigenschaft einen Wert
- 5. Inhalt Einstellung von Freunden angesehen werden nur
- 6. MongoDB Vergleich Daten nur ohne mal
- 7. Machen Sie ein Flag Kobra-Befehl erforderlich
- 8. jquery Eingangswert Vergleich wird nur eine Ziffer
- 9. Vergleich Aufzählungen nur Variante schätzt nicht
- 10. Einstellung einer Einzeiligen Android-Benachrichtigung (nur Titel)
- 11. Einschränkung PostgreSQL - nur eine Zeile kann Flag gesetzt haben
- 12. Nur das O_RDONLY-Flag zum Öffnen prüfen (2)
- 13. openrefine flag geänderte Zeilen
- 14. NSIS Installer Error Flag
- 15. IEnumerable.Except() und ein benutzerdefinierter Vergleich
- 16. ListView mit LVS_OWNERDATA Flag
- 17. geht Test-Flag: Flag versehen, aber nicht definiert
- 18. Einstellung ein Arguments mit bash
- 19. Three.JS Drahtgittermaterial - alle Polygone im Vergleich zu nur Kanten
- 20. Kerndaten "Nicht sichern" -Flag
- 21. Kein Proxy-Flag für Kabale unter Windows?
- 22. LocationServices.SettingsApi Reset SETTINGS_CHANGE_UNAVAILABLE flag
- 23. Warum ist das ein gültiger Vergleich
- 24. Flag Enum in C#
- 25. Kombinieren von -v Flag und -A Flag in Grep
- 26. Globales Flag zum Ein-/Ausschalten der Validierung in Prismatic/Schema?
- 27. Set/Unset ein Debug-Flag während Grunt/Requirejs Build
- 28. clang W flag order
- 29. Das Flag-Feld des IP-Headers setzen
- 30. Java Concurrency: flag/event