Nik*_*ntz 6 c assembly operating-system interrupt nios
我的迷你操作系统的调度程序是用汇编编写的,我想知道为什么.我发现eret
C编译器无法生成指令,这可以推广到除Nios以及x86和/或MIPS架构之外的其他平台吗?因为我认为os的一部分总是用汇编语言编写而我正在寻找系统程序员为什么必须知道汇编才能编写操作系统.是否存在C编译器的内置限制,无法生成某些汇编指令,例如eret
将程序返回到中断后正在执行的操作?
一般答案是出于以下三个原因之一:
因为那种特定类型的代码不能用C编写。我认为eret
是“从异常返回”指令,所以没有与此等效的C(因为页面错误、除以零或类似的硬件异常不是C /C++ 风格的异常)。另一个例子可以是在任务切换时将寄存器保存到堆栈中,并将堆栈指针保存到任务控制块中。C 代码无法做到这一点,因为无法直接访问堆栈指针。
因为编译器不会产生像聪明编写汇编器的人那样好的代码。一些专门的操作可能很难用 C 语言编写 - 编译器可能不会生成非常好的代码,或者代码变得非常复杂以实现在汇编程序中简单的东西。
C 代码的启动需要用汇编语言编写,因为 C 程序需要进行某些设置才能运行实际的 C 代码。例如配置堆栈指针和其他一些寄存器。