PBXB64 Inline-Assembly

Native x64-Assembly PBXB64-Erweiterung

Schreiben Sie x64-Assembly direkt in PB- und B64-Programme. Voller Befehlssatz, alle Allzweck-Register, Speicheradressierungsmodi und nahtlose Integration mit der Symboltabelle des Compilers. Der Assembler ist eingebaut - keine externen Tools nötig.

Inline-ASM in PB

PB Inline-Assembly
FUNCTION PBMAIN() AS LONG LOCAL result AS LONG ! mov rax, 42 ! mov result, rax PRINT "Result: "; result ' 42 FUNCTION = 0 END FUNCTION

Präfixieren Sie Assembly-Zeilen mit ! in PB-Code. Der Assembler integriert sich mit der Register-Allokation und Frame-Layout des Compilers. Alle 16 x64-Allzweck-Register sind verfügbar.

Speicheradressierung und Labels

Speicher-Operationen und Labels
#COMPILE EXE #DIM ALL FUNCTION PBMAIN() AS LONG LOCAL buffer(0 TO 3) AS DWORD LOCAL p AS QUAD p = VARPTR(buffer(0)) ' address of the first element #ACODE mov rsi, qword ptr {p} ; {name} reads a BASIC variable mov ecx, 4 xor eax, eax loop_start: mov dword ptr [rsi + rax*4], eax ; base + index*scale addressing inc eax cmp eax, ecx jl loop_start #AEND PRINT "buffer(2) = "; buffer(2) ' 2 FUNCTION = 0 END FUNCTION

Inline-ASM unterstützt Speicheradressierung mit Scale/Index/Base, lokale Labels und bedingte Sprünge. Labels und Sprünge stehen in einem #ACODE ... #AEND-Block, in dem PB-Variablen als {name} referenziert werden. Der Compiler löst Label-Offsets auf und integriert sich mit dem Frame-Layout.

Inline-ASM in B64

B64 asm-Block
func main() i64 { asm { mov rax, 100 add rax, 50 mov rcx, 25 sub rax, rcx ' rax = 125 } return 0 }

B64 verwendet asm { ... }-Blöcke für mehrzeilige Assembly. Alle x64-Befehle, Register und Adressierungsmodi werden unterstützt. Der Block wird direkt an den integrierten Assembler übergeben.

Standalone ASM-Dateien

Reine Assembly-Kompilierung
REM Standalone .asm-Datei kompilieren PBXB64 add_two.asm -o add_two.exe add_two.exe REM Assembly mit C-Quelle PBXB64 main.c helper.asm -o program.exe

PBXB64 kann standalone .asm-Dateien direkt kompilieren. Der Assembler produziert COFF-Objekte, die mit C-, PB- und B64-Code verlinkt werden. Voller x64-Befehlssatz mit MASM-ähnlicher Syntax.

Zurück zur Feature-Liste