Bedingungscodes: Unterschied zwischen den Versionen

Aus C und Assembler mit Raspberry
Die Seite wurde neu angelegt: „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: Code Bedeutung (Ganzzahl) Bedeutung (Gleitkomma) Bedingungsflags {| class="wikitable" |+ Bedingungscodes |- ! Code !! Bedeutung (Ganzzahl) !! Bedeutung (Gleitkomma) !! Bedingungsflags |…“
 
KKeine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
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:
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:


Code Bedeutung (Ganzzahl) Bedeutung (Gleitkomma) Bedingungsflags
{| class="wikitable"
{| class="wikitable"
|+ Bedingungscodes
|+ Bedingungscodes
|-
|-
! Code !! Bedeutung (Ganzzahl) !! Bedeutung (Gleitkomma) !! Bedingungsflags
! Symbol !! colspan="2"|Bedeutung (Ganzzahl) !! colspan="2"|Bedeutung (Gleitkomma) !! Bedingungsflags
|-
|-
| EQ || Gleich || Gleich || Z == 1
| EQ || gleich || = || gleich || = || Z == 1
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| 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
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| CS, HS || Vorzeichenlos größer oder gleich || >= || Größer , gleich oder ungeordnet<ref name="multiple" /> || >= || C == 1
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| CC, LO || Vorzeichenlos kleiner || < || Kleiner als || < || C == 0
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| MI || Minus, negativ || < 0 || Kleiner als || < || N == 1
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| PL || Plus, positiv oder null || >= 0 || Größer, gleich oder ungeordnet<ref name="multiple" /> || >= || N == 0
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| VS || Überlauf || || Ungeordnet<ref name="multiple" /> || || V == 1
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| VC || Kein Überlauf || || Geordnet || || V == 0
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| HI || Vorzeichenlos größer || > || Größer oder ungeordnet<ref name="multiple" /> || > || C ==1 && Z == 0
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| LS || Vorzeichenlos kleiner oder gleich || <= || Kleiner oder gleich || <= || !(C ==1 && Z ==0)
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| GE || Vorzeichenbehaftet größer oder gleich || >= || Größer oder gleich || >= || N == V
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| LT || Vorzeichenbehaftet kleiner || < || Kleiner oder ungeordnet<ref name="multiple" /> || < || N != V
|-
|-
| Beispiel || Beispiel || Beispiel || Beispiel
| GT || Vorzeichenbehaftet größer || > || Größer || > || Z == 0 && N == V
|-
| LE || Vorzeichenbehaftet kleiner oder gleich || <= || Kleiner, gleich oder ungeordnet<ref name="multiple" /> || <= || !(Z == 0 && N == V)
|-
| AL || Immer || || Immer || || Beliebig
|}
|}


cond Mnemonische Bedeutung (Ganzzahl) Bedeutung (Gleitkomma)a Bedingungsflags
== Anmerkung ==
0000 EQ Gleich Gleich Z == 1
<references />
0001 NE Ungleich Ungleich oder ungeordnet Z == 0
0010 CS oder HS Übertragssatz Größer als, gleich oder ungeordnet C == 1
0011 CC oder LO Übertragslöschung Kleiner als C == 0
0100 MI Minus, negativ Kleiner als N == 1
0101 PL Plus, positiv oder null Größer als, gleich oder ungeordnet N == 0
0110 VS Überlauf Ungeordnet V == 1
0111 VC Kein Überlauf Geordnet V == 0
1000 HI Vorzeichenlos höher Größer als oder ungeordnet C ==1 && Z == 0
1001 LS Vorzeichenlos niedriger oder gleich Kleiner als oder gleich !(C ==1 && Z ==0)
1010 GE Vorzeichenbehaftet größer als oder gleich Größer als oder gleich N == V
1011 LT Vorzeichenbehaftet kleiner als Kleiner als oder ungeordnet N != V
1100 GT Vorzeichenbehaftet größer als Größer als Z == 0 && N == V
1101 LE Vorzeichenbehaftet kleiner als oder gleich Kleiner als, gleich oder ungeordnet !(Z == 0 && N == V)
1110 AL Immer Immer Beliebig
1111 NVb Immer Immer Beliebig

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:

Bedingungscodes
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. 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.