我的见解:
>我猜我可能不是.我知道有一个英特尔C编译器,所以它会制作特定于处理器的汇编代码吗? EXE在windows上运行,因此它们已经建立了很多东西,从图形包到大规模的.NET框架.特定于处理器的可执行文件将从头开始,仅使用处理器的指令集.
>这个可执行文件是文件类型吗?我们可以运行windows并打开它,但之后只能控制切换到处理器?我假设这个可执行文件类似于 *** 作系统,因为它必须在启动任何其他 *** 作之前运行,并且只有处理器指令设置为“use”.
有些东西必须将二进制代码加载到内存中.这是一个 *** 作系统功能. .EXE或二进制可执行文件或包或其他任何内容都以特定于 *** 作系统的方式格式化,以便 *** 作系统可以将其加载到内存中.
必须将控制权交给那些二进制代码.还有 *** 作系统.
I / O例程(在C中,但在大多数地方都是如此)只是一个封装OS API的库. drat那OS,它无处不在.
回忆.
在过去(是的,我已经老了)我在没有 *** 作系统的机器上工作.我们也没有C.
我们使用“汇编程序”和“链接器”等工具编写机器代码,以创建可以加载到机器中的大型二进制映像.我们不得不通过痛苦的引导过程加载这些二进制图像.
我们使用前面板键将足够的代码加载到内存中,以读取像打孔纸带读取器这样的便携式设备.这将加载一小块相当标准的引导链接加载器软件. (我们使用聚酯薄膜胶带,因此不会磨损.)
然后,当我们在内存中有这个链接加载器时,我们可以用汇编程序提供我们之前准备的磁带.
我们编写了自己的设备驱动程序或者我们使用源代码形式的库例程,在纸带上打孔.
一个“补丁”实际上修补了纸带.此外,由于还存在很少的错误,我们必须根据手写指令调整内存映像 – 未放入磁带的补丁.
后来,我们有简单的 *** 作系统,它有简单的API,简单的设备驱动程序,以及一些实用程序,如“文件系统”,“编辑器”和“编译器”.这是一种叫做Jovial的语言,但我们有时也使用过Fortran.
我们必须焊接串行接口板,以便我们可以插入设备.我们不得不编写设备驱动程序.
底线.
您可以轻松编写不需要 *** 作系统的C程序.
>了解处理器芯片组中的硬件BIOS(或类似BIOS)设施.大多数现代硬件都有一个连接到ROM的简单 *** 作系统,可以进行开机自检(POST),加载一些简单的驱动程序,并找到启动块.
>了解如何编写自己的引导块.这是在POST之后加载的第一个正确的“软件”事物.这并不是那么难.您可以使用各种分区工具将引导块程序强制到磁盘上,并且您可以完全控制硬件.没有OS.
>了解GRUB,liLO或BootCamp如何启动 *** 作系统.这并不复杂.一旦它们被启动,它们就可以加载你的程序,然后你就可以运行了.这稍微简单一些,因为您创建了引导加载程序要加载的分区类型.以Linux为核心,你会更开心.不要试图弄清楚windows的启动方式 – 它太复杂了.
>阅读ELF. http://en.wikipedia.org/wiki/Executable_and_Linkable_Format>了解如何编写设备驱动程序.如果您不使用 *** 作系统,则需要编写设备驱动程序.
以上是内存溢出为你收集整理的c – 如何创建可在特定处理器体系结构(而不是某些 *** 作系统)上运行的可执行文件?全部内容,希望文章能够帮你解决c – 如何创建可在特定处理器体系结构(而不是某些 *** 作系统)上运行的可执行文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)