如何制作可启动程序?

所以,这个问题可能看起来很奇怪,但是让我说我​​编译:

int main(void) { int x = 3; int y = 4; int z = x + y; } 

有可能让CPU运行吗? 怎么样? 例如,这会让我写信给监视器吗? (如果我没记错的话,你可以在内存中写下要显示的内容。)

对于您的程序,除了启动它之外,它不依赖于任何操作系统服务。 如果它是另外做输入或输出,它几乎肯定依赖于操作系统来执行i / o。

如果您想用自己的代码替换操作系统,那么您可以这样做。 存在简约的操作系统和程序加载器。 但是,是的,你需要学习很多东西。

是的,有办法运行,没问题。 http://github.com/dwelch67我有很多例子。 您可以使用pcemu或我分叉的pcemu_samples并制作基于x86的x86,如果您不关心处理器,我有许多模拟器以及嵌入式处理器/微控制器的示例更容易看到发生了什么。

printf是关于使用它的最糟糕的C库调用,它在很多方向,浮点,字符串,分区等等,以避免它为这种事情。 我看到你还没看过评论。

要查看正在运行的程序,您要在并行端口上使LED或引脚闪烁,或者将字符从串行端口发送出去,这比编程显卡中的寄存器和调试该代码要容易得多,无需查看是否正在制作进展。

现在使用x86,你有一个图层,不是真正的操作系统,而是一个背后有这种代码的图层,你可以简单地调用在文本模式下在屏幕上打印字符并查看程序运行。 我已经剥离了pcemu_samples,但是完整的pcemu和dosbox以及其他x86仿真环境以及实际的计算机都可以使用这些东西。 其中一个sim环境(dosbox,pcemu,etC)是一个更好的起点(如果你觉得你必须从x86开始,注意这里的主题,我实际上是不鼓励从x86开始)。 如果你做了x86,你可以从dosbox或类似的东西,然后以你的方式工作可能是一个可引导的USB棒,并从那里开始工作。

嵌入式处理器,其中有很多很多的评估板,价格低于50美元,有些是20美元或者低于20美元的好处。 但是许多免费的模拟器可供您学习。 我有一些你可以尝试,thumbulator,amber_samples,pcemu_samples可能是最稳定的(不太可能调试我的东西,主要调试你的东西),然后其他不太稳定,meecoate,msp430sim等等。$ 5将获得你是msp430主板,10美元将为你获得一个ARM cortex-m3主板,20美元会让你太强大而不能称为微控制器,微控制器主板(基于cortex-m4)。 更多的钱并没有让你更快或更好,但更多的选择。 可以运行Linux的主板可以/会让你想要学习的东西更加痛苦,保持在这个水平之下。

您的简单示例需要很少,在编译器为该函数创建的代码之外,您只需要一条指令就可以从复位向量分支到主函数的入口点。 理想情况下,您希望设置堆栈,最终可能为零.bss或copy .data等。只是学习使用工具(编译器,汇编器,链接器)构建嵌入式二进制文件(即使您没有运行的硬件/模拟器) )会告诉你(反汇编)如何连接reset和main之间的点(你不必称之为main,你可以将它命名为你想要的任何东西,一些编译器你不想把它称为主要的,它们会抛出额外的垃圾进入你的二进制)。

这只是一个很长的故事,你需要熟悉汇编,你必须知道什么刮刮板适合你的CPU类型,x86系列的assembly非常有名,你可以通过学习它。

你会看到类似的东西:

 Start: mov AX ,0xff ;example 1 mov BX ,[CX] ;example 2 myString db 'Hi This is my First scratch',0 ;Print Example call printFunc ;example 3 jmp $ printFunc: mov ah, 0Eh ;This how you print on screen in Assembly loop lodsb cmp AX,BX je loop 

等等…….