Jos*_*ega 20 c c++ operating-system bootloader
是否可以在不使用某种类型的Assembler的情况下使用C或C++创建引导加载程序(最好不使用__asm)?我正在编写一个操作系统,并希望它完全用C和C++编写.
Car*_*rum 21
这是相当依赖系统的.在大多数情况下,答案是否定的 - 在开始运行C代码之前,您需要编写一些自定义程序集来设置C运行时.但是,有一些例外.所述的ARM Cortex-M0,例如,可以直接退出复位运行C代码.
但是,据推测,你没有使用M0,所以你需要编写一些程序集.同样,它依赖于系统/芯片,但您可以通过以下简单的方式逃脱:
reset_vector:
mov sp, SOME_KNOWN_GOOD_STACK_ADDRESS
call c_entry_point
Run Code Online (Sandbox Code Playgroud)
它只是初始化堆栈指针并调用C程序的入口点.当然,这个简单的设置取决于你的芯片有一个支持它的复位向量/向量表,RAM(或类似RAM)在复位向量被调用之前被初始化,依此类推.早期的系统初始化往往会有很多"问题".
准备好对编译器,汇编器和链接器文档非常友好 - 生成一个平面二进制文件,你可以作为第一阶段引导程序闪存,这本身就是一个很大的痛苦.
祝好运!
我相信答案是否定的,因为您需要执行以下操作才能切换到保护模式:
lgdt[GDTR]
jmp CODESEL:FLUSH
FLUSH:
...
Run Code Online (Sandbox Code Playgroud)
我认为没有办法用jmp纯 C/C++ 来执行指令,尽管我可能是错的。(我绝不是这里的专家;我只是参考我不久前制作的引导加载程序。)
| 归档时间: |
|
| 查看次数: |
2368 次 |
| 最近记录: |