【问题标题】:Tools to convert lisp code to assembly language将 lisp 代码转换为汇编语言的工具
【发布时间】:2021-10-08 16:15:09
【问题描述】:

我有一个 lisp 函数。可以转成汇编语言吗?

(defun isprime (num &optional (d (- num 1))) 
  (if (/= num 1) (or (= d 1)
      (and (/= (rem num d) 0)
           (is-prime  num (- d 1)))) ()))

上面的代码我想把它转换成汇编语言。我不确定linux或windows是否有任何工具可以做到这一点?

【问题讨论】:

标签: assembly compiler-construction lisp common-lisp native-code


【解决方案1】:

你为什么要这么做?

如果您想研究Lisp compilation 的工作原理,只需使用 disassemble:

(disassemble 'isprime)

如果您想编译代码以供将来使用,请使用compile-file

【讨论】:

    【解决方案2】:

    “可以转成汇编语言吗?”

    不像现在这样。它同时具有isprimeis-prime。把第二个改成isprime,就可以编译运行isprime函数了。我还添加了一个“主要”功能,它可以做到这一点:

    (defun main ()
       (format t "Prime test on 23 is ~A" (isprime 23)))
    

    我将整个内容保存在 TestCompile.lisp 中

    我正在使用 Portacle / Windows 来运行 SBCL / SLIME。我可以通过左键将光标放在函数中,然后使用 C-c C-c 来编译函数。我可以使用 C-c C-k 编译整个文件,创建一个 FASL 文件。

    从 REPL,我现在可以运行 (main)

    CL-USER> (main)
    Prime test on 23 is T
    NIL
    

    最后,我决定要创建一个可执行文件。从包含 LISP 源代码的文件夹中的 PowerShell:

    sbcl
    (load "TestCompile.lisp")
    (sb-ext:save-lisp-and-die "prime.exe" :toplevel #'main :executable t)
    
    ./prime.exe
    

    可执行文件在 Windows 上未压缩,包括编译器。它可以使用 zip 或类似的方式手动压缩。

    【讨论】:

      最近更新 更多