/fasm.js

Flat Assembler ELF inside Blink Wasm

Primary LanguageJavaScriptMIT LicenseMIT

Fasm.js License NPM version Build Status Coverage Status

Flat Assembler ELF inside Blink Wasm.

Install

npm i fasm.js -g

Usage

fasm hello.asm

API

import {translate} from 'fasm.js';

const source = `
    format ELF64 executable 3
    segment readable executable
    entry $
    
    _start:
      ; Set up arguments for print function
      mov rdi, 1
      lea rsi, [msg]
      mov rdx, msg_size
      call print
      
      ; Set up arguments for exit function
      xor rdi, rdi
      call exit
    
    ; Print function
    ; Arguments:
    ;   rdi - File descriptor (1 for stdout)
    ;   rsi - Pointer to the string to print
    ;   rdx - Length of the string
    ; Return:
    ;   None
    print:
      push rbp
      mov rbp, rsp
      mov rax, 1
      syscall
      pop rbp
      ret
    
    ; Exit function
    ; Arguments:
    ;   rdi - Exit code
    ; Return:
    ;   None
    exit:
      push rbp
      mov rbp, rsp
      mov rax, 60
      syscall
      pop rbp
      ret
    
    
    segment readable writeable
    msg db 'Hello 64-bit world!',0xA
    msg_size = $-msg
`;

const [buffer, places, output] = await translate(source);

await run(binary);
// returns
'Hello 64-bit world!';

Related

License

MIT