WebAssembly 二进制中的整数文字
Integer Literals in WebAssembly Binary
我正在使用 this demo 来了解 WebAssembly 文本格式是如何编译成二进制的。
我不明白的一件事是 i32.const
和 i64.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
我正在使用 this demo 来了解 WebAssembly 文本格式是如何编译成二进制的。
我不明白的一件事是 i32.const
和 i64.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