This guide explores WebAssemblys core instructions and data types for efficient execution in browsers and WASM runtimes.
In this guide, we’ll dive into WebAssembly’s core instructions (the verbs) and data types (the nouns) that power efficient, predictable execution in browsers and other WASM runtimes. By mastering these fundamentals, you can write low-level modules that perform reliably across platforms.
WebAssembly instructions are low-level opcodes executed by the WASM virtual machine. Because they resemble machine code more than high-level languages, browsers can optimize them aggressively for speed.
i32.add ;; adds two i32 valuesf64.sub ;; subtracts one f64 value from another
Each instruction strictly enforces its operand types. Supplying mismatched types (e.g., passing a boolean into an arithmetic opcode) will trigger a runtime trap.
Always verify operand types before invoking an instruction. WebAssembly performs no implicit conversions and will trap on type mismatches.
Choosing the right data type in WebAssembly ensures efficient memory usage and accurate calculations. For instance, consider a web app that displays two temperature readings:
25 °C (an integer)
25.5 °C (a decimal)
In WASM you’d represent these as:
25 °C → i32
25.5 °C → f64
Below is a quick overview of the core WebAssembly types:
WebAssembly categorizes its instructions into arithmetic, comparison, control flow, and memory operations. Here’s a concise reference:
Copy
;; Arithmetici32.add ;; add two 32-bit integersi64.sub ;; subtract two 64-bit integersf32.mul ;; multiply two 32-bit floatsf64.div ;; divide two 64-bit floats;; Comparisoni32.eq ;; equal? (32-bit integers)f64.ne ;; not equal? (64-bit floats)i32.lt_s ;; less than (signed 32-bit integers)f32.ge ;; greater than or equal (32-bit floats);; Control Flowblock ;; start a blockloop ;; start a loopif ;; conditional branchbr ;; branch to a label;; Memoryi32.load ;; load a 32-bit integer from memoryf64.store ;; store a 64-bit float to memorymemory.size ;; query current memory pagesmemory.grow ;; expand memory by pages