Bedingungscodes: Unterschied zwischen den Versionen
Aus C und Assembler mit Raspberry
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 8: | Zeile 8: | ||
| EQ || gleich || = || gleich || = || Z == 1 | | EQ || gleich || = || gleich || = || Z == 1 | ||
|- | |- | ||
| NE || ungleich || <>, != || ungleich oder ungeordnet || <>, != || Z == 0 | | NE || ungleich || <>, != || ungleich oder ungeordnet<ref name="multiple">Bedeutung von "ungeordnet": <br />In der Welt der Gleitkommaberechnungen (Floating-Point) bedeutet "ungeordnet" (auf Englisch "unordered"), dass einer der Operanden keine gültige Zahl ist - typischerweise weil er NaN (Not-a-Number) ist. | ||
<br /><br /> | |||
Im ARMv8-Assembler bedeutet der Zustand "unordered" also, dass beim Vergleich mindestens einer der beteiligten Werte NaN ist. Dies unterscheidet sich von "ungleich" ("not equal"), was einfach nur bedeutet, dass die beiden Werte nicht dieselben sind.</ref> || <>, != || Z == 0 | |||
|- | |- | ||
| CS, HS || Vorzeichenlos größer oder gleich || >= || Größer , gleich oder ungeordnet || >= || C == 1 | | CS, HS || Vorzeichenlos größer oder gleich || >= || Größer , gleich oder ungeordnet<ref name="multiple" /> || >= || C == 1 | ||
|- | |- | ||
| CC, LO || Vorzeichenlos kleiner || < || Kleiner als || < || C == 0 | | CC, LO || Vorzeichenlos kleiner || < || Kleiner als || < || C == 0 | ||
| Zeile 16: | Zeile 18: | ||
| MI || Minus, negativ || < 0 || Kleiner als || < || N == 1 | | MI || Minus, negativ || < 0 || Kleiner als || < || N == 1 | ||
|- | |- | ||
| PL || Plus, positiv oder null || >= 0 || Größer, gleich oder ungeordnet || >= || N == 0 | | PL || Plus, positiv oder null || >= 0 || Größer, gleich oder ungeordnet<ref name="multiple" /> || >= || N == 0 | ||
|- | |- | ||
| VS || Überlauf || || Ungeordnet || || V == 1 | | VS || Überlauf || || Ungeordnet<ref name="multiple" /> || || V == 1 | ||
|- | |- | ||
| VC || Kein Überlauf || || Geordnet || || V == 0 | | VC || Kein Überlauf || || Geordnet || || V == 0 | ||
|- | |- | ||
| HI || Vorzeichenlos größer || > || Größer oder ungeordnet || > || C ==1 && Z == 0 | | HI || Vorzeichenlos größer || > || Größer oder ungeordnet<ref name="multiple" /> || > || C ==1 && Z == 0 | ||
|- | |- | ||
| LS || Vorzeichenlos kleiner oder gleich || <= || Kleiner oder gleich || <= || !(C ==1 && Z ==0) | | LS || Vorzeichenlos kleiner oder gleich || <= || Kleiner oder gleich || <= || !(C ==1 && Z ==0) | ||
| Zeile 28: | Zeile 30: | ||
| GE || Vorzeichenbehaftet größer oder gleich || >= || Größer oder gleich || >= || N == V | | GE || Vorzeichenbehaftet größer oder gleich || >= || Größer oder gleich || >= || N == V | ||
|- | |- | ||
| LT || Vorzeichenbehaftet kleiner || < || Kleiner oder ungeordnet || < || N != V | | LT || Vorzeichenbehaftet kleiner || < || Kleiner oder ungeordnet<ref name="multiple" /> || < || N != V | ||
|- | |- | ||
| GT || Vorzeichenbehaftet größer || > || Größer || > || Z == 0 && N == V | | GT || Vorzeichenbehaftet größer || > || Größer || > || Z == 0 && N == V | ||
|- | |- | ||
| LE || Vorzeichenbehaftet kleiner oder gleich || <= || Kleiner, gleich oder ungeordnet || <= || !(Z == 0 && N == V) | | LE || Vorzeichenbehaftet kleiner oder gleich || <= || Kleiner, gleich oder ungeordnet<ref name="multiple" /> || <= || !(Z == 0 && N == V) | ||
|- | |- | ||
| AL || Immer || || Immer || || Beliebig | | AL || Immer || || Immer || || Beliebig | ||
|} | |} | ||
== Anmerkung == | |||
<references /> | |||
Aktuelle Version vom 26. September 2024, 08:40 Uhr
In der Archektetur des ARMv8 gibt es Befehle, die Bedingungsflags setzen oder Bedingungscodes oder beides testen. Zu den jeweiligen Befehlen wird darauf eingegangen, wenn diese Befehle dies unterstützen. Hier ist eine Auflistung der Bedingungscodes, die verwendet werden:
| Symbol | Bedeutung (Ganzzahl) | Bedeutung (Gleitkomma) | Bedingungsflags | ||
|---|---|---|---|---|---|
| EQ | gleich | = | gleich | = | Z == 1 |
| NE | ungleich | <>, != | ungleich oder ungeordnet[1] | <>, != | Z == 0 |
| CS, HS | Vorzeichenlos größer oder gleich | >= | Größer , gleich oder ungeordnet[1] | >= | C == 1 |
| CC, LO | Vorzeichenlos kleiner | < | Kleiner als | < | C == 0 |
| MI | Minus, negativ | < 0 | Kleiner als | < | N == 1 |
| PL | Plus, positiv oder null | >= 0 | Größer, gleich oder ungeordnet[1] | >= | N == 0 |
| VS | Überlauf | Ungeordnet[1] | V == 1 | ||
| VC | Kein Überlauf | Geordnet | V == 0 | ||
| HI | Vorzeichenlos größer | > | Größer oder ungeordnet[1] | > | C ==1 && Z == 0 |
| LS | Vorzeichenlos kleiner oder gleich | <= | Kleiner oder gleich | <= | !(C ==1 && Z ==0) |
| GE | Vorzeichenbehaftet größer oder gleich | >= | Größer oder gleich | >= | N == V |
| LT | Vorzeichenbehaftet kleiner | < | Kleiner oder ungeordnet[1] | < | N != V |
| GT | Vorzeichenbehaftet größer | > | Größer | > | Z == 0 && N == V |
| LE | Vorzeichenbehaftet kleiner oder gleich | <= | Kleiner, gleich oder ungeordnet[1] | <= | !(Z == 0 && N == V) |
| AL | Immer | Immer | Beliebig | ||
Anmerkung
- ↑ 1,0 1,1 1,2 1,3 1,4 1,5 1,6 Bedeutung von "ungeordnet":
In der Welt der Gleitkommaberechnungen (Floating-Point) bedeutet "ungeordnet" (auf Englisch "unordered"), dass einer der Operanden keine gültige Zahl ist - typischerweise weil er NaN (Not-a-Number) ist.
Im ARMv8-Assembler bedeutet der Zustand "unordered" also, dass beim Vergleich mindestens einer der beteiligten Werte NaN ist. Dies unterscheidet sich von "ungleich" ("not equal"), was einfach nur bedeutet, dass die beiden Werte nicht dieselben sind.