正如在类似的 SO-question和erlang-documentation 中所述:
请注意,汇编程序文件的格式没有记录,并且可能会在版本之间发生变化 - 此选项主要用于内部调试。
如果你真的想知道发生了什么,似乎你必须在源代码中追踪它。大部分工作都在 erts/emulator/beam/beam_emu.c 中完成(我查看了 otp_src_R15B02):
call_ext
:将继续指针设置为当前指令+2并调度/调用外部。call_ext_only
: 不碰CP,直接派送。(~第 1520 行)
- 两者都分配内存,但
allocate_zero
也将其初始化为0x00
(~第 334 行)。
test_heap
: 检查堆的 Nh 个字是否可用;如果没有,请进行垃圾收集。(~第 390 行)
allocate(StackNeeded, NumberOfRegistersToPreserve)
(〜第316行)
整个文件是#defines和gotos的组合,一些宏在同一文件夹中的 ops.tab 中定义。我也不是 erlang-asm 方面的专家,可能错过了一些东西。请记住这一点,并在开始与他们合作之前交叉检查我的陈述。
从链接的 SO-awnser 引用 TamasNagy:
我不确定你想用这个实现什么,但核心 erlang 可能是一个更好的代码操作级别。
请查看那里以获取更多信息。Erlang 有它的优势,但文档不是其中之一。
问候。