如果我们考虑C语言。它直接编译处理器指令中的代码。因此,程序在哪个处理器上执行并不重要。但是如果我们考虑汇编语言,它特定于它正在执行的处理器。因此,如果我们用 C 语言制作一个程序,并使其成为可引导的,那么根据这个。使用的处理器应该没有问题,程序应该立即运行,并且它也可以正常运行。那为什么会这样,Microsoft Windows 需要驱动程序才能使用 CPU(您可以查看设备管理器,其中安装了正在使用的 CPU 的驱动程序)。如果是一个简单的可引导程序,可以编写、编译和执行,无需驱动程序。那为什么windows要安装CPU驱动呢?
3 回答
您可能可以这样做,但前提是您的程序不执行任何 I/O,即不写入屏幕、不访问磁盘等。
要制作一个实际执行某些操作的 C 程序,它需要执行一些 I/O(至少将“Hello world”发送到屏幕、LED 矩阵或串行端口)。I/O 管理可以包含在您的程序中,因为它在嵌入式设备中很常见,或者以您的程序加载和调用的共享库的形式提供给它,由操作系统管理。
也就是说,您确实可以在许多环境中制作、编译和运行一个简单的程序作为引导程序,前提是它需要的所有 I/O 例程都包含在可执行文件中,并且有一个工具链可以使用您的 C 程序并为您提供所需平台的启动映像可执行文件。
另一方面,Windows 没有设备驱动程序供您使用 CPU。您所看到的名为“CPU”的设备驱动程序用于管理诸如 IO APIC 之类的东西,以路由中断;本地 APIC,用于启用多核处理,虚拟化、NX 位等几个特性。你看……CPU 内部有一些 I/O 设备,所以这个设备驱动程序用于管理它们。
代码执行不需要 CPU 的驱动程序,它只是 Cpu 充当设备的一种占位符。例如支持电源管理或读出核心温度。操作系统需要一个设备与之通信。驱动程序为此保留资源并提供相应的接口到更高级别。
由于历史原因,您需要为汇编程序指定 Cpu 类型。对于 C 编译器,这是由运行它的平台隐式给出的。对于不同的 Cpu 系列,您通常需要不同的编译器。
如果我正确地阅读了您的问题,那么您误解了 C 语言的编译过程及其目的。
C编译为汇编语言,然后将其转换为机器指令。在您了解编译的 C 程序实际上是特定于处理器的(参考处理器类型,例如 x86 或 ARM)之前,您需要阅读有关ISA和汇编语言的更多信息。
如果您为 ARM 处理器编译了 C 程序,它将无法在 x86 处理器上运行。这与该特定处理器的ISA有关。虚拟机(例如 Java)和解释器(例如 Python)是提高代码可移植性的流行方法。