2 APIs
(require x64asm/base) | package: x64asm-lib |
(require x64asm) | package: x64asm-lib |
(require x64asm/untyped) | package: x64asm-lib |
2.1 Core APIs
syntax
procedure
parameter
(current-assembler asm) → void? asm : Assembler?
procedure
(Assembler? asm) → boolean?
asm : any/c
procedure
(emit-code! [asm ctx ctx*]) → void?
asm : Assembler? = (current-assembler) ctx : Context? = (assert (current-context)) ctx* : (listof Context?) = '()
procedure
(assembler-shutdown-all! [asm]) → void?
asm : Assembler? = (current-assembler)
syntax
See also Instructions.
procedure
(make-context) → Context?
parameter
(current-context) → (or/c #f Context?)
(current-context ctx) → void? ctx : (or/c #f Context?)
syntax
syntax
(label may-id)
maybe-id =
| id
When id is given, see also with-labels.
procedure
l : Label?
2.2 Instrcution Operands
syntax
80 and 256 are currently not used.
syntax
syntax
syntax
syntax
syntax
syntax
syntax
syntax
syntax
(mref size-expr maybe-seg maybe-sib maybe-disp)
maybe-seg =
| seg-expr : maybe-sib =
| base-expr | base-expr + index-expr * scale-expr | index-expr * scale-expr maybe-disp =
| + int/imm-expr | - int-expr
syntax
procedure
num : (or/c integer? Label?) self! : (or/c #f Label?) = #f (imm16 num [#:! self!]) → Imm? num : (or/c integer? Label?) self! : (or/c #f Label?) = #f (imm32 num [#:! self!]) → Imm? num : (or/c integer? Label?) self! : (or/c #f Label?) = #f (imm64 num [#:! self!]) → Imm? num : (or/c integer? Label?) self! : (or/c #f Label?) = #f
When self! is provided, it will point to this immediate number, which may be useful for self-modifying code.
procedure
l : Label? self! : (or/c #f Label?) = #f (rel32 l [#:! self!]) → Imm? l : Label? self! : (or/c #f Label?) = #f
procedure
(latent-imm size proc [#:! self!]) → Imm?
size : (or/c 8 16 32 64) proc : (-> integer?) self! : (or/c #f Label?) = #f
syntax
2.3 Helper Macros
syntax
(define-cast id #:type Type #:ctype ctype-expr)
(define-cast flfls #:type (FlVector FlVector -> Void) #:ctype (let () (local-require racket/flonum) (_fun (a b) :: (_pointer = (flvector->cpointer a)) (_pointer = (flvector->cpointer b)) [_size = (flvector-length b)] -> _void)))
syntax
(with-labels maybe-captured (l ...) body ...)
maybe-captured =
| #:captured
When #:captured is given, (label id) syntax is enabled inside body. When (label id) is used, there is no need to define a label before using it.
syntax
(λ! cast-expr maybe-labels maybe-asm maybe-capture body ...)
maybe-labels =
| #:labels (l ...) maybe-asm =
| #:assembler asm-expr maybe-capture =
| #:captured
For maybe-labels and maybe-capture, see with-labels.
syntax
(define-λ! id form ...)