Microsoft Windows 中的 CPU 设备驱动程序

标签 c assembly driver cpu bootable

<分区>

如果我们考虑C语言,它直接编译处理器指令中的代码。因此,程序在哪个处理器上执行并不重要。但是如果我们考虑汇编语言,它特定于它正在执行的处理器。所以,根据这个,如果我们用 C 编写程序,并使其成为可 Bootstrap 。使用的处理器应该没有问题,&程序应该立即运行,而且它也确实运行没有任何问题。那为什么会这样,Microsoft Windows 需要驱动程序才能使用 CPU(您可以查看设备管理器,其中安装了正在使用的 CPU 的驱动程序)。如果是一个简单的可 Bootstrap ,则无需驱动程序即可编写、编译和执行。那为什么windows要安装CPU驱动呢?

最佳答案

您也许可以这样做,但前提是您的程序不执行任何 I/O,即不写入屏幕、不访问磁盘等。

要制作一个实际执行某些操作的 C 程序,它需要执行一些 I/O(至少将“Hello world”发送到屏幕、LED 矩阵或串行端口)。 I/O 管理既可以包含在您的程序中,因为它在嵌入式设备中很常见,也可以以您的程序加载和调用的共享库的形式提供给它,由操作系统管理。

也就是说,您确实可以在许多环境中制作、编译和运行一个简单的程序作为 Bootstrap ,前提是它需要的所有 I/O 例程都包含在可执行文件中,并且有一个工具链可以使用您的 C 程序,并为您提供适用于所需平台的可执行启动镜像。

另一方面,Windows 没有让您使用 CPU 的设备驱动程序。您看到的名为“CPU”的设备驱动程序用于管理诸如 IO APIC 之类的东西,以路由中断;本地 APIC,以启用多核处理、虚拟化、NX 位等多种功能。你看...碰巧 CPU 内部有一些 I/O 设备,因此该设备驱动程序用于管理它们。

关于Microsoft Windows 中的 CPU 设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848093/

相关文章:

c - 程序在 scanf() 中的格式字符串和字符转换之前没有空格退出

assembly - 为什么 "03 c8"和 "01 c1"= add ecx, eax

linux - x86-64 asm 中的函数参数

android - 从哪里开始使用 I2C 的 Android 驱动程序

为 OS X : where to start? 创建触摸屏驱动程序

c - 为什么我必须使用 gnu99 而不是 c99 来编译内核模块?

c - 在 C 中实现链表时,谁负责释放值?

c - 对于每个整数,它映射到什么字符?

performance - movzbl 后接 teSTL 是否比 testb 快?

linux - 使用 netif_rx() 时出现内核错误