Startseite › x64-Assembler-Referenz › Mnemonik-Familienübersichten Hilfe zum PBXB64-Compiler

Kern-GPR-Mnemonik

In diesem Abschnitt werden die vom PBXB64-Assembler unterstützten x86-64-General-Purpose-Register-Anweisungen (GPR) dokumentiert. Alle Anweisungen verwenden Intel-Syntax.

Kategorie: Mnemonik-Familienübersichten

Beschreibung

In diesem Abschnitt werden die vom PBXB64-Assembler unterstützten x86-64-General-Purpose-Register-Anweisungen (GPR) dokumentiert. Alle Anweisungen verwenden Intel-Syntax.

Datenbewegung

GedächtnisstützeBeschreibungOperanden
MOVVerschieben Sie Daten zwischen Registern, Speicher und Sofortdatenreg/mem, reg/mem/imm
MOVZXBewegen Sie sich ohne Verlängerungreg, reg/mem
MOVSXUmzug mit Schilderverlängerungreg, reg/mem
MOVSXDMit Vorzeichenerweiterung verschieben (32-Bit auf 64-Bit)reg64, reg/mem32
CMOVccBedingter Umzug (siehe unten)reg, reg/mem
XCHGDaten zwischen Operanden austauschenreg, reg/mem
BSWAPByte-Swap (Reverse Endianness)reg32/64
MOVBEVerschieben mit Big-Endian-Konvertierung (Laden/Speichern)reg, mem / mem, reg
MOVABS64-Bit-Absolutwert verschieben (Alias ​​auf MOV mit imm64)reg64, imm64

Bedingte Bewegungen (CMOVcc)

GedächtnisstützeZustandFlaggen
CMOVA / CMOVNBEOben (nicht unten oder gleich)CF=0 und ZF=0
CMOVAE / CMOVNBOben oder gleich (nicht unten)CF=0
CMOVB / CMOVNAEUnten (nicht darüber oder gleich)CF=1
CMOVBE / CMOVNAUnterhalb oder gleich (nicht darüber)CF=1 oder ZF=1
CMOVE / CMOVZGleich (Null)ZF=1
CMOVNE / CMOVNZUngleich (nicht Null)ZF=0
CMOVG / CMOVNLEGrößer (mit Vorzeichen, nicht kleiner oder gleich)ZF=0 und SF=OF
CMOVGE / CMOVNLGrößer oder gleich (mit Vorzeichen, nicht kleiner)SF=OF
CMOVL / CMOVNGEKleiner (mit Vorzeichen, nicht größer oder gleich)SF!=OF
CMOVLE / CMOVNGKleiner oder gleich (mit Vorzeichen, nicht größer)ZF=1 oder SF!=OF
CMOVOÜberlaufOF=1
CMOVNONicht überlaufenOF=0
CMOVSVorzeichen (negativ)SF=1
CMOVNSNicht signieren (nicht negativ)SF=0
CMOVP / CMOVPEParität (gerade)PF=1
CMOVNP / CMOVPOKeine Parität (ungerade)PF=0

Arithmetik

GedächtnisstützeBeschreibungOperanden
ADDGanzzahlige Additionreg/mem, reg/mem/imm
ADCMit Carry hinzufügenreg/mem, reg/mem/imm
SUBGanzzahlige Subtraktionreg/mem, reg/mem/imm
SBBMit „borgen“ subtrahierenreg/mem, reg/mem/imm
MULVorzeichenlose Multiplikation (r/m * AL/AX/EAX/RAX)reg/mem
IMULVorzeichenbehaftete Multiplikation (mehrere Formen)reg/mem / reg, reg/mem / reg, reg/mem, imm
DIVDivision ohne Vorzeichen (r/m dividiert AX/EAX/RAX)reg/mem
IDIVUnterzeichnete Kluftreg/mem
INCErhöhen Sie um 1reg/mem
DECUm 1 verringernreg/mem
NEGNegieren (Zweierkomplement)reg/mem
CMPVergleichen (setzt Flags, kein Ergebnis)reg/mem, reg/mem/imm
TESTLogischer Vergleich (UND setzt Flags)reg/mem, reg/mem/imm

DerMULUndDIVAnweisungen verwenden implizite Quell-/Zielregister:

OperandengrößeMUL: r/m *Ergebnis (Produkt)DIV: r/m dividiertQuotientRest
8-BitALAXTAXTALAH
16-BitAXTDX:AXDX:AXAXTDX
32-BitEAXEDX:EAXEDX:EAXEAXEDX
64-BitRAXRDX:RAXRDX:RAXRAXRDX

DerIMULDie Anweisung hat drei Formen:

Logisch / Bitweise

GedächtnisstützeBeschreibungOperanden
ANDBitwise ANDreg/mem, reg/mem/imm
ORBitwise ORreg/mem, reg/mem/imm
XORBitwise XORreg/mem, reg/mem/imm
NOTBitweises NICHT (Einzelkomplement)reg/mem
ANDNBitweises UND-NICHT (BMI1)reg, reg, reg/mem

Verschieben / Drehen

GedächtnisstützeBeschreibungOperanden
SHL / SALLogisch/arithmetisch nach links verschiebenreg/mem, imm8/CL
SHRLogisch nach rechts verschiebenreg/mem, imm8/CL
SARArithmetik nach rechts verschieben (vorzeichenerhaltend)reg/mem, imm8/CL
ROLNach links drehenreg/mem, imm8/CL
RORNach rechts drehenreg/mem, imm8/CL
RCLDurch Tragen nach links drehenreg/mem, imm8/CL
RCRNach rechts drehen durch Tragenreg/mem, imm8/CL
SHLDDoppelte Präzisionsverschiebung nach linksreg/mem, reg, imm8/CL
SHRDDoppelte Präzisionsverschiebung nach rechtsreg/mem, reg, imm8/CL

Stapeloperationen

GedächtnisstützeBeschreibungOperanden
PUSHAuf Stapel schieben (RSP um 8 in x64 dekrementiert)reg/mem/imm
POPPop vom Stapel (RSP um 8 in x64 erhöht)reg/mem
PUSHA / PUSHADAlle GPRs pushen (nicht gültig im x64-Modus)keiner
POPA / POPADPop alle GPRs (nicht gültig im x64-Modus)keiner
PUSHF / PUSHFDDrücken Sie EFLAGS/RFLAGSkeiner
POPF / POPFDPop EFLAGS/RFLAGSkeiner
PUSHQPush QWORD (impliziter 64-Bit-Push)imm32
ENTERStapelrahmen erstellen (push rbp, mov rbp, rsp; sub rsp, X)imm16, imm8
LEAVEStack-Frame zerstören (mov rsp, rbp; pop rbp)keiner
Notiz:Im x64-ModusPUSHUndPOPArbeiten Sie immer mit 64-Bit-Werten (RSP wird um 8 angepasst). 32-Bit- und 16-Bit-Push/Pop sind in x64 nicht kodierbar.PUSHA/POPAsind nicht verfügbar.

Kontrollübertragung

Bedingungslose Sprünge

GedächtnisstützeBeschreibungOperanden
JMPBedingungsloser SprungEtikett/Reg/Speicher
CALLAufrufvorgang (Push-Rücksprungadresse)Etikett/Reg/Speicher
RETRückkehr vom Verfahren (Pops-Rücksprungadresse)none / imm16 (Pop N Bytes)
RETFFar Return (wird in x64 nicht verwendet)keine / imm16

Bedingte Sprünge

GedächtnisstützeZustandFlaggen
JA / JNBESpringe, wenn obenCF=0 und ZF=0
JAE / JNB / JNCSpringe, wenn höher oder gleichCF=0
JB / JNAE / JCSpringe, wenn untenCF=1
JBE / JNASpringe, wenn weniger als oder gleichCF=1 oder ZF=1
JE / JZBei Gleichheit springenZF=1
JNE / JNZSpringe, wenn nicht gleichZF=0
JG / JNLESpringe, wenn größer (vorzeichenbehaftet)ZF=0 und SF=OF
JGE / JNLSpringen, wenn größer oder gleich (mit Vorzeichen)SF=OF
JL / JNGESpringe, wenn weniger (vorzeichenbehaftet)SF!=OF
JLE / JNGSpringen, wenn kleiner oder gleich (mit Vorzeichen)ZF=1 oder SF!=OF
JOBei Überlauf springenOF=1
JNOSpringe, wenn nicht überlaufenOF=0
JSSpringe, wenn Vorzeichen (negativ)SF=1
JNSSpringen Sie, wenn Sie nicht unterschreibenSF=0
JP / JPESpringe, wenn die Parität gerade istPF=1
JNP / JPOSpringe, wenn die Parität ungerade istPF=0
JCXZ / JECXZ / JRCXZSpringe, wenn CX/ECX/RCX Null istCX/ECX/RCX=0

Schleifenanweisungen

GedächtnisstützeBeschreibungOperanden
LOOPCX/ECX/RCX dekrementieren, springen, wenn nicht NullEtikett
LOOPE / LOOPZLOOP während gleich/nullEtikett
LOOPNE / LOOPNZLOOP solange ungleich/nicht NullEtikett

String-Operationen

GedächtnisstützeBeschreibungOperanden
MOVS / MOVSB / MOVSW / MOVSD / MOVSQZeichenfolge verschieben (RSI→RDI, nach Größe anpassen)keiner
CMPS / CMPSB / CMPSW / CMPSD / CMPSQZeichenfolge vergleichen (RSI vs. RDI)keiner
SCAS / SCASB / SCASW / SCASD / SCASQScan-String (vergleiche AL/AX/EAX/RAX mit [RDI])keiner
LODS / LODSB / LODSW / LODSD / LODSQString laden ([RSI]→AL/AX/EAX/RAX)keiner
STOS / STOSB / STOSW / STOSD / STOSQZeichenfolge speichern (AL/AX/EAX/RAX→[RDI])keiner

String-Anweisungen werden häufig mit dem kombiniertREPPräfix für Blockoperationen:

cld                     ; clear direction flag (forward)
rep movsb               ; copy RCX bytes from RSI to RDI
rep stosd               ; fill RCX dwords with EAX
repne scasb             ; scan for AL in [RDI], RCX times

Flaggenkontrolle

GedächtnisstützeBeschreibung
STCCarry-Flag setzen (CF=1)
CLCClear Carry Flag (CF=0)
CMCKomplement-Carry-Flag (CF=!CF)
STDRichtungsflag setzen (DF=1)
CLDFlag „Richtung löschen“ (DF=0)
STIInterrupt-Flag setzen (IF=1)
CLIInterrupt-Flag löschen (IF=0)
LAHFFlags in AH laden (SF:ZF:0:AF:0:PF:1:CF)
SAHFSpeichern Sie AH in Flags
SAHFSpeichern Sie AH im unteren RFLAGS-Byte

Bit-Manipulation

GedächtnisstützeBeschreibungOperanden
BTBittest (speichert Bit an Position in CF)reg/mem, reg/imm
BTSBit testen und einstellenreg/mem, reg/imm
BTRBittest und Resetreg/mem, reg/imm
BTCBittest und Ergänzungreg/mem, reg/imm
BSFBit-Scan vorwärts (niedrigstes gesetztes Bit)reg, reg/mem
BSRBit-Scan rückwärts (höchstes gesetztes Bit)reg, reg/mem
POPCNTBevölkerungszahl (Anzahl der gesetzten Bits) – SSE4.2reg, reg/mem
LZCNTFührende Nullen zählen – BMI1 (über F3 0F BD)reg, reg/mem
TZCNTNachgestellte Nullen zählen – BMI1reg, reg/mem

Tauschen / Konvertieren

GedächtnisstützeBeschreibungOperanden
XADDAustauschen und hinzufügen (atomar)reg/mem, reg
CMPXCHGVergleichen und austauschen (atomar)reg/mem, reg
CMPXCHG8BVergleichen und tauschen Sie 8 Bytes (atomar) ausmem64
CMPXCHG16BVergleichen und tauschen Sie 16 Bytes (atomar, benötigt LOCK)mem128
CBW / CWDE / CDQEKonvertieren Sie Byte in Wort / Wort in Dword / Dword in Qwordkeine (verwendet AL/AX/EAX)
CWD / CDQ / CQOKonvertieren Sie Wort in Dword / Dword in Qword / Qword in Dqword (DX:AX / EDX:EAX / RDX:RAX)keiner
CWDEWandeln Sie Wort (AX) in Doppelwort (EAX) mit Vorzeichenerweiterung umkeiner
CDQEDoppelwort (EAX) in Quadwort (RAX) mit Vorzeichenerweiterung umwandelnkeiner

Atomar-/Sperrpräfix

DerLOCKDas Präfix macht bestimmte Anweisungen auf Multiprozessorsystemen atomar. Unterstützte Anweisungen:

lock add / lock adc / lock sub / lock sbb / lock and / lock or / lock xor
lock inc / lock dec / lock neg / lock not
lock xadd / lock cmpxchg / lock cmpxchg8b / lock cmpxchg16b
lock bts / lock btr / lock btc

Beispiel:

lock inc DWORD PTR [counter]       ; atomic increment
lock cmpxchg DWORD PTR [ptr], ecx   ; atomic compare-exchange

Legacy / Kompatibilität

GedächtnisstützeBeschreibung
AAAASCII-Anpassung nach Hinzufügung (nicht gültig in x64)
AASASCII-Anpassung nach Subtraktion (nicht gültig in x64)
AAMASCII-Anpassung nach Multiplikation (nicht gültig in x64)
AADASCII-Anpassung vor der Division (nicht gültig in x64)
DAADezimalanpassung nach Addition (nicht gültig in x64)
DASDezimalanpassung nach Subtraktion (nicht gültig in x64)
Notiz:Die ASCII- und Dezimal-Anpassungsanweisungen sind im x64-Modus nicht codierbar, der Assembler akzeptiert sie jedoch aus Gründen der Kompatibilität mit Legacy-Code auf Quellebene.

NOP und Multi-Byte-NOPs

GedächtnisstützeCodierungGröße
NOP901 Byte
NOP(2 Byte)66 902 Bytes
NOP(3 Byte)0F 1F 003 Bytes
NOP(4 Byte)0F 1F 40 004 Bytes
NOP(5 Byte)0F 1F 44 00 005 Bytes
NOP(6 Byte)66 0F 1F 44 00 006 Bytes
NOP(7 Byte)0F 1F 80 00 00 00 007 Bytes
NOP(8 Byte)0F 1F 84 00 00 00 00 008 Byte
NOP(9 Byte)66 0F 1F 84 00 00 00 00 009 Bytes

Category: Assembly

PBXB64 Status: Referenzthema fuer Assembler-Syntax und Familienhinweise; untergeordnete Instruktionsseiten und registrierte Tests liefern den endgueltigen Support-Nachweis.

Beschreibung

Dieses Assembler-Thema gruppiert PBXB64-x64-Assembler-Syntax, Direktiven, Adressierungsregeln oder Mnemonik-Familien. Behandeln Sie es als Navigation plus Nutzungshinweis, sofern keine Unterseite oder kein registrierter Test eine konkrete Instruktionsform belegt.

Prüfung der Instruktionsfamilie

Verwenden Sie diese Mnemonik-Übersichten als Einstieg in fokussierte Assembler-Tests. Eine vollständige Prüfung nennt CPU-Feature-Bit, Operandenbreite, Register- oder Speicherform, Flag-Auswirkungen und ob die Instruktion im Windows-x64-User-Mode gültig ist.

PBXB64-Integrationshinweise

Inline-Assembler muss die Windows-x64-Aufrufkonvention erhalten, wenn die Kontrolle zu compilererzeugtem Code zurückkehrt. Sichern Sie nichtflüchtige Register, halten Sie Stack-Alignment bei Aufrufen ein und dokumentieren Sie absichtlich veränderte Flags oder Register.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.

Validierungsbeleg

Validierungsbeleg: Verwenden Sie die registrierten Inline-Assembler- und Standalone-Assembler-Validierungsprogramme als Nachweis fuer konkrete unterstuetzte Instruktionsformen und nennen Sie die genaue Testdatei auf der Unterseite, wenn vorhanden.