为什么操作系统的某些部分必须用汇编语言编写?

参见英文答案 > Is assembly strictly required to make the “lowest” part of an operating system?                                    3个
我的迷你操作系统的调度程序是用汇编编写的,我想知道为什么.我发现指令eret不能由C编译器生成,这个可以推广到除Nios以及x86和/或MIPS架构之外的其他平台的东西吗?因为我认为os的一部分总是用汇编语言编写而我正在寻找系统程序员为什么必须知道汇编才能编写操作系统.是否存在C编译器的内置限制,这些限制无法生成某些汇编指令,例如将程序返回到中断后正在执行的操作的eret?
通用答案有以下三个原因之一:

>因为特定类型的代码不能用C语言编写.我认为eret是一个“异常返回”指令,所以没有C等价于此(因为硬件异常,如页面错误,除以零或类似)不是C/C++风格例外).另一个例子可能是在任务切换时将寄存器保存到堆栈中,并将堆栈指针保存到任务控制块中. C代码不能这样做,因为没有直接访问堆栈指针.>因为编译器不会像巧妙编写汇编程序那样产生好的代码.一些专门的操作可能很难用C编写 – 编译器可能无法生成非常好的代码,或者代码变得非常复杂以实现汇编程序中的简单操作.> C代码的启动需要用汇编语言编写,因为在运行实际的C代码之前,C程序需要设置某些东西.例如,配置堆栈指针和其他一些寄存器.

相关文章
相关标签/搜索