5

在学校里,我们被教导编译器将计算机程序编译成机器语言。我们还被告知机器语言由对硬件的直接指令组成。那么同一个编译好的程序如何在不同硬件的多台电脑上运行呢?

4

3 回答 3

13

取决于您所说的“不同硬件”的含义,如果它是相同的处理器(或相同的系列,例如 Intel x86),那么机器代码指令是相同的。

如果额外的硬件是不同的外围设备(屏幕、磁盘打印机等),那么操作系统会通过为您提供一组一致的指令来驱动它们来隐藏这些细节

如果您的意思是,您如何在 Intel x86 上为 ARM cpu 运行程序,那么您不能 - 除非通过某种虚拟机仿真器读取每个 ARM 指令并将它们转换为 x86 或运行相同功能作为一组 x86 函数,然后返回与 ARM 函数相同的答案。

编辑:我假设您的意思是具有不同硬件的 PC - 即不同的外围设备但相同的处理器系列?

与硬件交谈并不涉及特定的指令——这主要是将内存移动到操作系统和/或设备驱动程序专门为传输到该设备的数据保留的特定位置的问题。在过去的 DOS 和 BIOS 中,您将触发中断以调用 BIOS 中的特定代码位来处理该数据并将其发送到硬件。

于 2012-05-09T17:49:23.117 回答
4

使用模拟器或虚拟机,其中任何一个都可以有效地即时翻译机器语言。

于 2012-05-09T17:48:18.017 回答
1

我认为说本机编译器编译为处理器的特定指令集更准确。由于有保持向后兼容性的处理器系列:8086 - 80386 - 80486 - 80586 - 双核 - 四核...;然后每个处理器运行其祖先的指令。如果你想跨处理器架构移植你的代码,那么你肯定需要一个虚拟机或模拟器,就像前面提到的那样。

于 2012-05-09T17:52:24.757 回答