是否可以使用不使用汇编语言的引导加载程序?

时间:2015-06-22 11:25:16

标签: assembly operating-system bootloader bootstrapping

我正在研究操作系统的概念。操作系统的基本起点是它的Boot loader。引导加载程序通常用汇编语言编写。是否有可能在没有一行汇编语言的情况下创建引导加载程序

6 个答案:

答案 0 :(得分:3)

有可能:

  • 设计一个内置支持的编译器,支持引导加载程序可能需要的任何内容,以便您可以使用该编译器的语言执行所有操作而无需进行汇编
  • 使用较低级别的语言(机器代码)
  • 设计一台固件直接支持更高级语言的计算机(例如现代UEFI可直接使用C / C ++)

然而,这些都与实用性无关。对于很多情况(例如80x86 BIOS),使用某些组件比避免它更容易。请注意,“某些程序集”可能只是指固件功能和初始化代码的包装;大部分引导装载程序都使用其他语言。

答案 1 :(得分:1)

从技术上讲,这是可能的。您需要一个可以生成特定指令的编译器。您可以使用具有内联汇编的C编译器来完成此操作。在某些实现中,旧的BLISS编程语言可能会这样做。

答案 2 :(得分:0)

从技术上讲,不一定要装配。当然可以通过其他方式创建引导加载程序

答案 3 :(得分:0)

嗯,操作系统的起点不是引导加载程序。在某些系统上(我在ARM7上完成此操作),您可以在没有任何引导程序的情况下运行您的操作系统。如果您不需要任何引导加载程序,则在引导加载程序中不需要任何汇编指令。

操作系统本身怎么样?操作系统的主要作用是安排多个任务,每个任务都有自己的上下文。大多数处理器体系结构依赖堆栈为局部变量分配内存。语言通常在堆栈上抽象概念,并且只保留“局部变量”概念,因此无法切换任务上下文。所以,基本上,不可能只用C语言编写OS。然而,一些语言允许访问每个处理器资源(主要是内部寄存器)。例如,PL/M51允许在没有任何程序集的情况下为intel 8051处理器编写操作系统。

总而言之,答案是:汇编不是强制性的,您只需要一个足够expressive power的语言来描述您应该执行的任务。

答案 4 :(得分:0)

如果您有英特尔BITS,您可以用Python编写加载程序 否则,您可以使用UEFI库在C或C ++中编写加载程序 相反,您可以编写一个编译器,将C ++代码转换为X86机器代码,并创建特殊的程序集来启动内核。那么你可能不会写一个bootloader 而且,如果您没有BITS或UEFI并且您不想这样做,那么您就无法做到这一点。

答案 5 :(得分:-1)

当然可以创建一个没有汇编语言的启动加载器,我怀疑你的断言是启动加载器是:

  

"通常用汇编语言编写。"

然而,标题中的问题与正文中的问题不同;引导加载程序不是操作系统的一部分,包含先发制人调度的操作系统几乎肯定需要一些汇编语言代码来至少执行上下文切换。