diff options
author | Pragyan Das <pragyandas@msn.com> | 2020-05-28 22:37:50 +0300 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2020-06-19 19:57:28 +0300 |
commit | 343cf1b3c176c01ea992d5db0145f34b3e2066b6 (patch) | |
tree | 98ead1e718f022292d4d0a206ea57f3914b77c81 /doc/api/wasi.md | |
parent | fdcd4893ff91f359433fb7526d4e3133260de777 (diff) |
doc: update WASM code sample
- Code sample updated by adding a hello-world (`demo.wat`) code example
- Step for compiling `.wat` to `.wasm` added (with reference to `wabt`
tools)
- The sample code prints "hello world\n" in the console
This update adds a very minimal change to the existing sample and can be
treated as an extension.
PR-URL: https://github.com/nodejs/node/pull/33626
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'doc/api/wasi.md')
-rw-r--r-- | doc/api/wasi.md | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/doc/api/wasi.md b/doc/api/wasi.md index 3f9c6c7f51b..b46aacfbcb1 100644 --- a/doc/api/wasi.md +++ b/doc/api/wasi.md @@ -22,15 +22,54 @@ const wasi = new WASI({ const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; (async () => { - const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm')); + const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm')); const instance = await WebAssembly.instantiate(wasm, importObject); wasi.start(instance); })(); ``` +To run the above example, create a new WebAssembly text format file named +`demo.wat`: + +```text +(module + ;; Import the required fd_write WASI function which will write the given io vectors to stdout + ;; The function signature for fd_write is: + ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written + (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32))) + + (memory 1) + (export "memory" (memory 0)) + + ;; Write 'hello world\n' to memory at an offset of 8 bytes + ;; Note the trailing newline which is required for the text to appear + (data (i32.const 8) "hello world\n") + + (func $main (export "_start") + ;; Creating a new io vector within linear memory + (i32.store (i32.const 0) (i32.const 8)) ;; iov.iov_base - This is a pointer to the start of the 'hello world\n' string + (i32.store (i32.const 4) (i32.const 12)) ;; iov.iov_len - The length of the 'hello world\n' string + + (call $fd_write + (i32.const 1) ;; file_descriptor - 1 for stdout + (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0 + (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one. + (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written + ) + drop ;; Discard the number of bytes written from the top of the stack + ) +) +``` + +Use [wabt](https://github.com/WebAssembly/wabt) to compile `.wat` to `.wasm` + +```console +$ wat2wasm demo.wat +``` + The `--experimental-wasi-unstable-preview1` and `--experimental-wasm-bigint` -CLI arguments are needed for the previous example to run. +CLI arguments are needed for this example to run. ## Class: `WASI` <!-- YAML |