Startseite › x64-Assembler-Referenz › Übersicht Hilfe zum PBXB64-Compiler

ASM

Identifizieren Sie eine Assembler-Anweisung. PowerBASICs

Kategorie: Übersicht | Zertifizierung: [ZERTIFIZIERT GETESTET]

Syntax

{! | ASM} { opcode | label }
{! | ASM} ALIGN boundary

Beschreibung

Identifizieren Sie eine Assembler-Anweisung. PowerBASICs

Typ:Anweisung |Kategorie:Inline-Assembler

PBXB64-Status:TEILWEISE

PBXB64-Zertifizierung: Getestet für den unten dokumentierten PBXB64-Teilsatz; umfassende native Inline-Assembler-Abdeckung bleibt offen.

PBXB64-Hinweis: ASM ALIGN Grenze wird als Kompatibilitäts-No-Op akzeptiert. Das IR-Backend garantiert derzeit keine echte Code-Segment-Ausrichtung, daher wird kein NOP-Padding eingefügt.

Beschreibung

Mit dieser Anweisung können Sie Assembler-Code in Ihren PowerBASIC-Quellcode einfügen. Ein Ausrufezeichen (!) dient als Abkürzung für das Schlüsselwort ASM.

Jede Gruppe von ASM-Anweisungen muss die folgenden CPU-Register beibehalten, wenn der Assemblercode zu einer Änderung führt: EBX, ESI, EDI, ESP, EBP und alle Segmentregister. Weitere Informationen finden Sie unter Register speichern.

In derselben Zeile wie eine ASM-Anweisung dürfen keine anderen Anweisungen stehen; Kommentare sind jedoch akzeptabel.

! DB 1, 2, 3, 4, 5

! TT &H45001222, &HFFFF4327

Jede Variable, auf die in einer Assembler-Anweisung verwiesen wird, muss vor der Verwendung definiert werden. Zum Beispiel:

x% = 10

! MOV AX, x%

Sie können nicht mit einer einzelnen ASM-Anweisung auf das Ziel eines Zeigers zugreifen, wie dies möglicherweise im BASIC-Quellcode der Fall wäre. Stattdessen müssen Sie die Zeigeradresse indirekt verwenden. Um die BASIC-Anweisung INCR @x zu simulieren, würden Sie schreiben:

DIM x AS INTEGER PTR

ASM MOV EAX, x ; EAX enthält einen Zeiger auf eine Ganzzahl

ASM INC WORD PTR [EAX] ; Addiere eins zum Zielwert

Im Inline-Assembler-Code können Zeichenfolgenliterale mit bis zu vier Zeichen verwendet werden:

! MOV AL, „a“ ; Verschiebe char a in reg AL

! MOV AX, „ab“ ; Verschiebe die Zeichen ab in reg AX

! ; „a“ in AL, „b“ in AH

! MOV EAX, „abcd“ ; Verschieben Sie die Zeichen abcd in reg EAX

PowerBASIC erkennt entweder ein Apostroph (') oder ein Semikolon (;), um einen Kommentar nach einer Zeile Assembler-Code anzugeben:

! PUSH EAX ; Speichern Sie das EAX-Register

! PUSH EBX ' speichert das EBX-Register

ASM ALIGN wird in kritischen Situationen eingesetzt, um maximale Effizienz aus Assembler-Codeabschnitten zu ziehen.

ASM ALIGN wird verwendet, um den Befehlsort auf eine Zweierpotenzadresse aufzurunden. Der angezeigte Grenzparameter muss eine Zweierpotenz im Bereich von 2 bis 256 sein.

PowerBASIC fügt NOP-Anweisungen in den Codeabschnitt ein, um die Anweisungsposition an die gewünschte Adresse zu bringen. Wenn sich die Anweisungsposition bereits auf einem Vielfachen der Grenze befindet, hat ALIGN keine Auswirkung.

Die #ALIGN-Metaanweisung funktioniert in derselben Hinsicht wie ASM ALIGN, die ASM ALIGN-Anweisung eignet sich jedoch besser für die Verwendung in einem PREFIX/END PREFIX-Block.

Einschränkungen

Es sollte darauf geachtet werden, dass die Register ordnungsgemäß erhalten bleiben, wenn Inline-Assembler-Code mit BASIC-Anweisungen vermischt wird. Weitere Informationen finden Sie unter Register speichern.

Assembler-Integration

Assembler-Konzeptseiten sollen Registerbreite, Stack-Alignment, erhaltene Register, Flag-Nutzung und User-Mode-Gültigkeit unter Windows nennen. Inline-Schnipsel müssen mit intakter x64-Aufrufkonvention zurückkehren.

Prüfung

Verwenden Sie kleine Programme, die Register oder Speicher initialisieren, jeweils ein Konzept ausführen und das exakte Ergebnis vergleichen. Bei Stack-Beispielen muss gezeigt werden, dass Aufrufe nach dem Schnipsel weiter korrekt laufen.

Migrationshinweise

Prüfen Sie 32-Bit-Beispiele auf ESP/EBP-Annahmen, PUSHAD/POPAD, Pointer-Trunkierung und x87/MMX-Zustandswechsel.

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.

Beispiel

LOCAL a&, b&, c&, z&

Siehe auch