Flat Assembler ELF inside Blink Wasm.
npm i fasm.js -g
fasm hello.asm
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!';MIT