Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java和汇编语言构建一个运行在;裸金属“;_Java_Assembly - Fatal编程技术网

用Java和汇编语言构建一个运行在;裸金属“;

用Java和汇编语言构建一个运行在;裸金属“;,java,assembly,Java,Assembly,好了,各位, 假设我想制作一个只使用汇编和java的系统,我的问题是,只要我包含所有jvm文件夹、类、JAR等。。java应该仍然有效地运行吗? 我知道有些东西是专门在平台上编译的,但这就是为什么我要问,是否可以使用汇编来复制java包含在纯汇编/java系统中的所有.exe或其他可执行文件?如果我正确理解您的问题,您的意思是这样的。当然,可以在硬件上实现JVM raw,但不知道为什么要这样做。如果你这样做了,为什么你不在大部分工作中使用C而不是汇编。理论上可以用另一种语言实现jvm。我能想到的

好了,各位, 假设我想制作一个只使用汇编和java的系统,我的问题是,只要我包含所有jvm文件夹、类、JAR等。。java应该仍然有效地运行吗?
我知道有些东西是专门在平台上编译的,但这就是为什么我要问,是否可以使用汇编来复制java包含在纯汇编/java系统中的所有.exe或其他可执行文件?

如果我正确理解您的问题,您的意思是这样的。当然,可以在硬件上实现JVM raw,但不知道为什么要这样做。如果你这样做了,为什么你不在大部分工作中使用C而不是汇编。

理论上可以用另一种语言实现jvm。我能想到的最好的例子是Python/Jpython,其中有该语言的原始C实现和纯Java实现

反对这一点的主要论据是——这是一大堆工作,没有多少好处

官方的Sun jvm和支持的jni库主要是用C编写的,您至少需要为大多数C POSIX API提供本机汇编程序实现

另外,C最初的设计目标是“一种可移植的汇编语言”,并且在很大程度上它仍然满足这些目标。C生成高效的机器代码,大多数C编译器将让代码机器指令与C代码内联


C的另一个好处是可以使用大量的交叉编译器,您不需要在目标体系结构上运行开发环境,您可以在您喜欢的paltform/IDE上进行开发和单元测试,当您准备好后,您可以将可执行文件导出到目标平台

如果你问是否有可能用Java和汇编语言构建一个在“裸机”上运行的系统,答案是肯定的。目前有几个例子:

  • 主要针对嵌入式系统领域。(孙认为SunOS现在是一个“遗留”的产品线。)
  • 目标更广泛,包括嵌入式系统、桌面系统、服务器和云计算
请注意,构建此类系统是一个多年、多人的项目,需要深入了解虚拟机内部结构、编译器、垃圾收集器、硬件体系结构、设备驱动程序编写等

如果你问的是其他问题,请更明确一些

编辑:回答OP的后续问题:

  • 使用Java和其他“exe”文件本身是不实际的。他们需要一个成熟的操作系统;e、 Windows、Linux等等。如果您有权访问源代码,可以根据需要进行重写,使其在“裸机”上运行,但这将导致重大的体系结构更改,特别是如果您想用Java编写设备驱动程序等。(此外,Sun的JRE核心是用C++实现的)。
  • 您不能直接使用现有的Java类库JAR文件,因为它们包含大量特定于平台的代码。但是,您可以从Java类库的现有开源版本(例如OpenJDK 6.0 J2SE库)构建自己的Java类库JAR。您可以通过将自己的版本作为本机库或Java类(正如JNode所做的那样)来处理特定于平台的代码

  • jikesrvm和Sun的Maxine提供了一个JVM实现,其本机代码很少(约为1kloc)。然而,这两个虚拟机都需要一个操作系统,只是研究实现。创建形成机器代码的八位字节流的过程在Java中显然是可以实现的。

    看看JNode。他们已经在这方面工作多年了


    你想做什么?你的最终目标是什么?这可能有助于找到你想要的答案这就是我要问的,我知道这将是一个多人的工作,这只是一个想法。我问这个问题的唯一原因是因为我不确定如何使用汇编使jvm的可执行文件工作。。我想在这里回答的唯一一个问题是,如果可能的话,谢谢你,你回答得很完美。。没有告诉我最好使用c或类似的语言,为了便于移植,大多数非Java的部分可能都是c语言的。@starblue:对于Sun的JRE,我确信这是部分原因。另一方面,他们不想编写/维护成千上万行汇编程序。对于JNode,实际上没有C语言-纳米内核是在x86/x86_64汇编程序中编码的。(我个人认为这不是最好的主意,但这是另一个故事。至少JNoT不再有汇编程序中编码的字节码解释器!)Sun java是用C++编写的。