将Python程序转换为标准汇编语言?

14

能否将Python程序转换为微处理器标准汇编语言,如IEEE-694?该汇编语法接近此种或者另一种


我尝试了很多次。我发现了像LLVM这样的软件,但结果并非如预期。 - Academia
请查看Python on a chip项目。 - Thomas K
2
你实际上想要解决什么问题? - SingleNegationElimination
1
根据 此页面 的描述,IEEE-694 标准已经被撤销。 - Robert Harvey
3个回答

16

我不知道如何使用LLVM来获取类似于IEEE-694的非常标准和基本的汇编代码。 - Academia
我理解“标准汇编”的概念,但LLVM字节码本质上不就是这个吗? - Robert Harvey

7

与C、FORTRAN、COBOL等语言不同,支持λ演算或自动内存管理的语言无法直接编译为汇编语言。但是可以在微码或引导程序中提供解释器来弥补这一差距,以允许“编译”Python、LISP等语言。(一些操作,如垃圾回收,仍在编译后的二进制文件中内置的解释器中执行。)


谢谢提供信息。实际上,我正在考虑将Python编译为C,然后使用GDB进行反汇编。但仍在努力寻找更好的方法。 - Academia
实际上这是一个常见的误解,Common Lisp 一直都是一种编译语言,它甚至提供了反汇编函数。请查看 http://wiki.c2.com/?LispSucksInAssembly ,一些 Lisp,如 Corman Lisp,直接将汇编代码加载到内存中,而没有任何其他表示形式。 - SerialDev
@SerialDev 我的意思是,为了完全支持带有闭包的函数式编程,需要垃圾回收器。一个简单的不动点组合子没有垃圾回收器是行不通的。这不是LISP的问题,而是理论上的结果。如果LISP的一个子集不允许使用不动点函数,则可以在编译时不包含嵌入式GC,或者将嵌入式GC包含在编译后的二进制文件中以弥补差距。将编译后的库包含到LISP运行时中是完全合理的,并且在Python中也得到了支持。 - wberry

5
由于Python是一种动态类型语言,如果汇编程序使用Python的运行时环境/库来动态获取对象,则只有这种可能性。因此,这只能在某些开销下实现。但是,PyPy项目中有RPython。它是Python语言的受限子集(不再是动态类型,并且缺少大多数Python标准库模块)。RPython程序可以转换为机器代码(据我所知,它生成C代码作为中间代码)。Python本身会为其虚拟机生成中间代码。如果您想查看此代码,请使用Python标准库中的dis模块。这将生成类似汇编的表示形式来表示您的Python函数。请记住,“真正”的微处理器无法使用它,并且结果可能会随着您使用的Python版本而改变。

1
我想得到一个非常基本和低级的汇编语言代码(没有宏)。我不会在真正的微处理器上运行它。 - Academia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接