2010-11-25 69 views
4

有没有办法让我的C或C++程序可以在没有操作系统的情况下运行,并且会在左上角绘制像红色像素的东西?我一直想知道如何制作这些类型的应用程序。由于Windows是用C编写的,我想有一种方法可以做到这一点。为X86创建本机应用程序?

感谢

回答

3

如果你正在编写一个裸处理器,没有库支持可言,你必须把所有的硬件手册,找出如何访问您的视频内存,并执行任何操作硬件要求得到一个画在显示器上的像素(或蜂鸣器上的声音,或从磁盘读取的一块存储器,或其他)。

当你使用的操作系统,你会依靠设备驱动程序知道这一切为您。对于没有操作系统的平台,程序仍然每天编写,但很少用于裸处理器。许多小型MPU带有一个支持库,通​​常是一组例程,可让您操作所支持的任何外围设备。

0

没有一个操作系统很难有装载机,这意味着没有动态的libc。你必须静态链接,并且有大量的汇编代码(尽管它可以作为目标文件提供,然后你可以链接)。另外,由于你会受制于任何系统,所以你会被VESA视频模式困住(除非你想编写你自己的图形驱动程序和子系统,你不这么做)。

1

也一定能做到。您通常使用C语言编写代码,而且您几乎必须自己完成所有任务,而无需使用标准库。要设置像素,通常会加载一个指向屏幕物理地址的指针,并将正确的值写入该指针。或者,在PC上,您可以考虑使用VESA BIOS。诚实地说,它与大多数MS-DOS代码编写方式非常相似(大多数使用MS-DOS在磁盘上读取和写入数据,但其他方面很少)。

0

有,但一般不从OS中。最初,它们是从驱动器上的MBR执行的asm存根。见MBR。对于x86处理器,这通常是16位处理代码,这通常从此处跳转到操作系统代码,并根据操作系统和芯片组升级到32位/ 64位模式。

1

核心引导程序和自举被写入装配在OS内核的一部分。有关操作系统启动方式的简要说明,请参阅http://en.wikipedia.org/wiki/Booting。我不知道如何在不使用汇编语言的情况下纯粹使用C或C++等更高级别的语言编写引导加载程序或内核。

+0

的Linux/x86平台显然有它的第一个C语句前7个装配instuctions,所以这是非常微不足道的。 GRUB也主要是C.所以,你可以相当接近。此外,这没有根本原因。编译器已经为`main`生成了特殊的代码;它可能包括必要的组装。 – MSalters 2010-11-25 09:01:06

相关问题