如果我们考虑C语言,它直接编译处理器指令中的代码。因此,在哪个处理器上执行程序并不重要。但如果我们考虑汇编语言,它是特定于执行它的处理器的;使其成为可引导的。应该不存在处理器被使用的问题,&程序应该立即运行,而且运行时不会出现任何问题。那么为什么是这样呢,Microsoft Windows要求驱动程序使用CPU(你可以检查它的设备管理器,那里安装了正在使用的CPU的驱动程序)。如果一个简单的可引导程序,可以编写、编译、&在不需要驱动程序的情况下执行。那么为什么CPU驱动程序安装在windows中呢?
您可能能够做到这一点,但前提是您的程序不进行任何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编译成汇编语言,然后将汇编语言转换成机器指令。您需要阅读更多关于ISA和汇编语言的信息,然后才能理解编译的C程序实际上是特定于处理器的(参考处理器类型,例如x86或ARM)。
如果你已经为ARM处理器编译了一个C程序,它将无法在x86处理器上运行。这与特定处理器的ISA有关。虚拟机(例如Java)和解释器(例如Python)是提高代码可移植性的常用方法。