WebAssembly 二进制中的整数文字

Integer Literals in WebAssembly Binary

我正在使用 this demo 来了解 WebAssembly 文本格式是如何编译成二进制的。

我不明白的一件事是 i32.consti64.const 中使用的整数文字。

例如i32.const -1的代码如下:

0000024: 41                                        ; i32.const
0000025: 7f                                        ; i32 literal

0x7f(十进制的 127)与 -1 有什么关系?

这是 i32.const 1234 的代码:

0000024: 41                                        ; i32.const
0000025: d209                                      ; i32 literal

我知道 WASM 是小端字节序的,所以 WASM 十六进制表示法中的第一个字节 (d2) 对应于普通二进制表示法中的最后一个字节。 1234的32位二进制表示是00000000 00000000 00000100 11010010。最后一个字节是210,十六进制是d2。这与我在 WASM 代码中看到的相符。但是前面的字节是4。09在WASM代码中是从哪里来的?

还有很多我无法理解的例子。这些整数文字来自哪里?

0x7f 是 -1 的补码表示

0x31 是 opcode for i32.const.

d209 (0x09d2) 是 1234 (0x04d2)

Unsigned LEB128

Unsigned LEB128