Datenverarbeitung unmittelbaren Operanden (Immediate Operands)

Aus C und Assembler mit Raspberry
Version vom 27. September 2024, 09:52 Uhr von Satyria (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Arithmetik (unmittelbar)

Dies bezieht sich auf arithmetische Operationen, die direkt mit sofortigen (Immediates) Werten ausgeführt werden. Beispiele sind Addition, Subtraktion, etc., wobei einer der Operanden ein konstanter Wert ist.

Die arithmetischen (unmittelbar) Anweisungen akzeptieren einen 12-Bit-unvorzeichenlosen Sofortwert, der optional um 12 Bit nach links verschoben werden kann.

Die arithmetischen (unmittelbar) Anweisungen, die keine Bedingungsflags setzen, können vom aktuellen Stapelzeiger lesen und in ihn schreiben.

Die Anweisungen zum Setzen von Flags können vom Stapelzeiger lesen, aber nicht in ihn schreiben.

Code Beschreibung Siehe auch
ADD Addieren ADD
ADDS Addieren und Flag setzen ADDS
SUB Subtrahieren SUB
SUBS Subtrahieren und Flags setzen SUBS
CMP Vergleiche CMP
CMN Vergleiche Negativ CMN

Ganzzahl Minimum und Maximum (unmittelbar)

Hierbei handelt es sich um Anweisungen, die den Minimum- oder Maximumwert aus zwei Ganzzahlen bestimmen, wobei einer dieser Operanden ein unmittelbarer Wert ist.

Die Integer-Maximum- und Minimum-Anweisungen (unmittelbar) bestimmen das Maximum/Minimum des Quellregisterwerts und des Sofortwerts.

Code Beschreibung Siehe auch
SMAX Vorzeichen Maximum SMAX
SMIN Vorzeichen Minimum SMIN
UMAX Vorzeichenlos Maximum UMAX
UMIN Vorzeichenlos Minimum UMIN

Logisch (unmittelbar)

Logische Operationen wie AND, OR, EOR, etc., bei denen ein Operand ein unmittelbarer Wert ist.

Die logischen (unmittelbar) Anweisungen akzeptieren einen Bitmasken-Sofortwert, der ein 32-Bit-Muster oder ein 64-Bit-Muster ist, das als Vektor identischer Elemente der Größe e = 2, 4, 8, 16, 32 oder 64 Bits betrachtet wird. Jedes Element enthält dasselbe Untermuster, d. h. eine einzelne Folge von 1 bis (e - 1) Bits ungleich Null ab Bit 0, gefolgt von Nullbits, dann rotiert um 0 bis (e - 1) Bits. Dieser Mechanismus kann 5334 einzigartige 64-Bit-Muster als 2667 Musterpaare und deren bitweise Inverse erzeugen.

Hinweis: Werte, die nur aus Nullen oder nur Einsen bestehen, können auf diese Weise nicht beschrieben werden.

Die logischen (sofortigen) Anweisungen, die die Bedingungsflags nicht setzen, können in den aktuellen Stapelzeiger schreiben, um beispielsweise den Stapelzeiger in einem Funktionsprolog auszurichten.

Hinweis: Mit Ausnahme von ANDS und seinem TST-Alias ​​setzen logische (sofortige) Anweisungen die Bedingungsflags nicht. Die endgültigen Ergebnisse einer bitweisen Operation können jedoch durch einen bedingten CBZ-, CBNZ-, TBZ- oder TBNZ-Zweig getestet werden.

Code Beschreibung Siehe auch
AND Bitweise UND AND
ANDS Bitweise UND und setzt Flags ANDS
EOR Bitweise exklusiv ODER EOR
ORR Bitweise inklusiv ODER ORR
TST Teste Bits TST

Bewegen (Move, weiter unmittelbarer Wert)

Dies bezieht sich auf Bewegungsoperationen, bei denen große unmittelbare Werte (oft 32 oder 64 Bit) in Register geladen werden.

Die Move-Anweisungen (weiter unmittelbarer Wert) fügen einen 16-Bit-Immediate-Befehl oder einen invertierten Immediate-Befehl in eine 16-Bit-ausgerichtete Position im Zielregister ein. Der Wert der anderen Bits im Zielregister hängt von der verwendeten Variante ab. Der optionale Verschiebungsbetrag kann ein beliebiges Vielfaches von 16 sein, das kleiner als die Registergröße ist.

Code Beschreibung Siehe auch
MOVZ Schreibe Wert und Fülle mit NULL MOVZ
MOVN Bit-weise Komplementen Wert (negiert) MOVN
MOVK Ersetze nur gesetzte Bits MOVK

Bewegen (Move, unmittelbar)

Operationen, die unmittelbare Werte in Register laden, jedoch in diesem Fall kleinere Werte.

Code Beschreibung Siehe auch
MOV Kopiere Wert MOV

PC-relative Adressberechnung

Dies beinhaltet Berechnungen von Adressen relativ zum Program Counter (PC), oft um relative Adressen innerhalb des Codes zu berechnen.

Bitfeldbewegung

Hierbei handelt es sich um Operationen, die Bitfelder innerhalb eines Registers extrahieren oder verschieben.

Bitfeld einfügen und extrahieren

Dies umfasst detaillierte Operationen zum Einfügen oder Extrahieren spezifischer Bitfelder in oder aus einem Register.

Register extrahieren

Dieser Abschnitt beschreibt Operationen, bei denen Teile eines Registers in ein anderes Register extrahiert werden.

Schift (unmittelbar)

Hierbei handelt es sich um Schiftoperationen an Registerwerten, wobei die Schiftgrösse ein unmittelbarer Wert ist.

Vorzeichen-Erweiterung und Null-Erweiterung

Diese Operationen erweitern einen kleineren Integer-Wert auf eine größere Größe, entweder indem das Vorzeichenbit (Vorzeichen-Erweiterung) oder Nullen (Null-Erweiterung) hinzugefügt werden.