gpt4 book ai didi

c - 是否严格要求汇编才能使 "lowest"成为操作系统的一部分?

转载 作者:太空狗 更新时间:2023-10-29 15:27:08 25 4
gpt4 key购买 nike

我是一名中级(抽象)程序员,几个月前我开始考虑是应该减少还是增加抽象(我选择减少)。

现在,我想我已经完成了大部分关于我需要什么的“研究”,但仍然有一些问题需要解决。

现在我“实际上什么都不做”,我只是加强我的 C 技能(买了“K&R C Programing Lang”),我想(在感觉舒服之后)开始学习操作系统(比如 minix)只是为了学习目的,但我脑子里有个想法,我真的不知道我是否应该关心。

理论上(我认为,不确定),高级语言不能直接引用硬件(如寄存器、内存位置等...),因此基础语言的“完美语言”将是汇编。

我已经学习了汇编(前段时间)只是为了看看它是怎么回事(由于本书使用的过时的调试器(Assembly Language Step By Step,for Linux!),我在书的中间停了下来!)但是从我读到的内容来看,我不太喜欢这种语言。

所以问题很简单:操作系统(引导加载程序/内核)是否可以在不接触一行汇编的情况下进行编程,并且仍然有效?

即使可以,也不会是“跨架构”吧? (i386/arm/mips 等...)

感谢您的支持

最佳答案

您无需组装即可完成大量工作。 Linux 或 NetBSD 不必针对其运行的众多目标中的每一个完全重写或修补。大多数代码都是可移植的,然后有抽象层,在抽象层下面你可以找到一个目标特定层。即使在目标特定层中,大部分代码也不是 asm。我想消除这种错误的想法,例如,为了对设备驱动程序的寄存器或内存进行编程,您需要 asm,您不会将 asm 用于此类事情。您将 asm 用于 1) 处理器具有您无法使用高级语言生成的指令。或 2) 高级语言生成的代码太慢。例如,在 ARM 中启用或禁用中断有一个特定的指令来访问您必须使用的处理器状态寄存器,因此需要 asm。但是中断 Controller 的编程都是用高级语言完成的。第二点的一个例子是您经常在 C 库中发现 memcpy 和其他类似的大量使用的库函数是手工编码的 asm,因为它速度快得多。

虽然您当然可以在 ASM 中编写和执行任何您想要的操作,但您通常会发现高级语言用于直接访问“硬件(如寄存器、内存位置等...)”。你应该继续加强你的 C 技能,不仅仅是通过 K&R 书,还应该浏览各种 C 标准,你可能会发现它扰乱了有多少“实现定义”的项目,比如位域,如何提升变量大小等. 仅仅因为您 10 年前编写的程序一直使用一个/一个特定品牌的编译器(msvc、gcc 等)进行编译和工作,并不意味着该代码是干净的、可移植的并且将继续工作。不幸的是,gcc 已经教会了许多非常糟糕的编程习惯,当用户发现他们在十年左右的时间里不了解这种语言并且不得不重做他们如何使用该语言解决问题时,这些习惯会让用户感到震惊。

关于c - 是否严格要求汇编才能使 "lowest"成为操作系统的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com