我有简单的ocaml文件test.ml

1 + 2;;


我编译了它。我可以看到此代码的汇编输出吗?也许ocaml packet有任何工具可以这样做?

谢谢。

最佳答案

是的,您可以:请参阅下文。代码中剩下的所有内容都是movl $7, %eax(7是OCaml的3表示,这是1 + 2的结果)。

$ cat > t.ml
1 + 2 ;;
$ ocamlopt -S t.ml
$ cat t.s
    .data
    .globl  _camlT__data_begin
_camlT__data_begin:
    .text
    .globl  _camlT__code_begin
_camlT__code_begin:
    nop
    .data
    .long   0
    .globl  _camlT
_camlT:
    .text
    .align  4
    .globl  _camlT__entry
_camlT__entry:
    subl    $12, %esp
L100:
    movl    $7, %eax
    movl    $1, %eax
    addl    $12, %esp
    ret
    .data
    .text
    nop
    .globl  _camlT__code_end
_camlT__code_end:
    .data
    .globl  _camlT__data_end
_camlT__data_end:
    .long   0
    .globl  _camlT__frametable
_camlT__frametable:
    .long   0
    .section __IMPORT,__pointers,non_lazy_symbol_pointers
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5

10-04 11:24