gpt4 book ai didi

java - 有什么方法可以将 JAVA 代码转换成汇编语言(机器语言)。这样它就可以在 IC 上烧录(如微 Controller 8051 或其他)

转载 作者:行者123 更新时间:2023-11-29 03:12:37 25 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

7年前关闭。




Improve this question




有没有办法将 JAVA 代码转换为汇编语言(机器语言)。这样它就可以在 IC 上烧录(如微 Controller 8051 或其他)。

最佳答案

构建编译器主要是一件汗水的事情。但是 8051 的地址空间非常小,通常 4K 字节的 ROM 和只有 128 字节的 RAM。
这意味着一个实用的编译器必须有许多限制才能使其在任何地方都可以使用,更不用说实用或有吸引力了。

首先,ROM 空间会极大地限制任何 Java 程序的大小; JDK 中的几乎所有内容都不适合。你买不起 List 或 String 甚至 Object 的大部分; toString 很可能是一种买不起的奢侈品。您的数据类型几乎肯定限于 8 位整数; 32 位和 64 位整数可能完全不切实际。 IEEE 浮点是不可能的,因为它需要支持它的代码空间;你可以实现一个更简单的浮点格式,但它会占用大量的 ROM(我已经在许多小型处理器上编写了浮点数)。
你不能有很多对象;没有足够的空间。更糟糕的是,您可能无法动态分配它们,因为访问它们所需的内存空间(基于指针+offet),因此"new"必须被取缔或以非常严格的方式处理。垃圾收集是完全不切实际的。因此,程序使用的对象很可能在程序启动时必须“神奇地”存在。如何指定? (也许 main 包含所有"new"调用,并且它们是静态编译的,但即使这样也可能会占用宝贵的代码空间,更好地花在其他东西上。

一个非常严重的问题是 Java 没有用户级 I/O。程序如何与硬件对话?一个笨拙的答案是制作一个涵盖所有特殊用途寄存器的巨型对象,以便可以将它们作为字段值进行访问。这相当违反Java语言设计,因为字段仅因程序读取或写入而改变,但特殊功能寄存器可因硬件条件而改变。因此,此解决方案会将语言更改为不完全是 Java。

8051 的最佳特性之一是位寻址。 Java 不做位寻址。充其量它处理字节。因此,您要么丢失它(并且您的程序在空间中爆炸),要么添加有趣的运算符来模拟位寻址。再一次,不完全是 Java。

动态错误对象的抛出和捕获可能是不可能的。如果您强制错误对象被静态分配,您可能会完成这项工作。

大多数微 Controller 最终会控制几个 I/O 点,这些点可以说是异步的。您不能为此使用 Java 任务。您可能会诉诸民意调查;这并不比通常在许多简单的微 Controller 程序上编码的方式差多少。 8051可以处理中断;没有标准的方法可以在 Java 程序中进行设置。您可以使用语言来添加中断关键字;回到不那么Java。

可能可以完成构建具有所有这些限制的编译器。剩下的语言将类似于 Java,但不允许编写任何传统的 Java 程序,因此不清楚实际好处是什么。传统的 Java 程序员必须重新学习如何使用这种语言进行编码。

它似乎没有任何积极的好处。

如果您坚持使用编译器,我认为您最好使用 C compiler .其中一些编译器可以处理更多的 ROM 空间。使用他们的技术,您可能会克服我上面讨论的空间限制的一些后果。但是8051和大内存有点不兼容; 8051 的全部意义在于便宜、便宜、便宜[因为它是单芯片形式],并且添加外部存储器可以消除一些便宜。

对于复杂的程序,您可能不得不回退到汇编程序,以使您能够编写足够聪明的代码来硬塞必要的代码和数据。有些机器最好在硬件附近进行编程。

关于java - 有什么方法可以将 JAVA 代码转换成汇编语言(机器语言)。这样它就可以在 IC 上烧录(如微 Controller 8051 或其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28477924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com