Assembly 构建我的asm x86操作系统,从哪里开始

Assembly 构建我的asm x86操作系统,从哪里开始,assembly,x86,operating-system,Assembly,X86,Operating System,我知道MIPS asm,我正在学习一点x86 asm(我使用masm),最近我读到了关于mikeos的文章,特别是关于这个: 我有一些问题: 1) windows上有没有IDE可以帮助我编译和执行这些低级代码?如果此ide不存在,如何调试它 2) 有了这些教程,我将进入引导加载程序部分,如果我需要访问文件,该怎么办?我想在我的引导加载程序中制作一个简单的文本编辑器,如何访问位于硬盘上的文件 3) 这是引导程序,对吗?假设我在这里实现了一些函数,并创建了一个很好的引导加载程序,下一步是什么 提前谢

我知道MIPS asm,我正在学习一点x86 asm(我使用masm),最近我读到了关于mikeos的文章,特别是关于这个: 我有一些问题:

1) windows上有没有IDE可以帮助我编译和执行这些低级代码?如果此ide不存在,如何调试它

2) 有了这些教程,我将进入引导加载程序部分,如果我需要访问文件,该怎么办?我想在我的引导加载程序中制作一个简单的文本编辑器,如何访问位于硬盘上的文件

3) 这是引导程序,对吗?假设我在这里实现了一些函数,并创建了一个很好的引导加载程序,下一步是什么

提前谢谢,还有,我在哪里可以找到其他材料

学习Linux。使用它(或者以某种方式研究它,例如…),因为它对开发人员友好。不要花费数月时间在自己的引导加载程序上,使用现有的引导加载程序(例如)

查看wiki(我认为最好是你的MikeOS链接)&绝对阅读。花几个星期阅读和学习一些东西(甚至在编码之前)

windows上有没有IDE可以帮助我编译和执行这些低级代码

您应该更喜欢使用Linux,而且您当然不需要IDE,而是一个好的(您不应该使用IDE,因为它隐藏了您需要了解的细节;您需要使用命令并了解每个命令的作用)。我的偏好是,但您可以使用其他编辑器(例如,等等)

您将使用C编译器(以某种方式作为交叉编译器;您可能希望选择类似于现有s的调用约定,所以请仔细研究)。我的建议是(也有)。您需要详细了解如何使用。您当然需要所有警告(因此
-Wall-Wextra
)。您可能需要格式的调试信息和一些标志(例如
-O1
-O2
)。您需要使用一些工具(例如,…)和一些系统(选择并发布代码为、on或其他;快速这样做以获得反馈)

您将使用链接器(您可以阅读Levine的书)。所以它的
ld
(当然你会有一些汇编代码)。您需要了解并可能了解有关格式的详细信息

如果此ide不存在,如何调试它

痛苦地。也许你会使用一些模拟器或虚拟机,然后这样做(这并不简单;所以一开始你不会有那种奢侈)。实际上,您首先要对一些屏幕输出进行编码(可能是您自己的
控制台\u printf
,但不使用
)并使用它

如果我需要访问文件怎么办

您真的很困惑(如果不编写或借用大量代码,您将无法访问任何文件)。一个操作系统(甚至你的玩具操作系统)正在实现,没有它就没有任何操作系统。因此,您的操作系统(稍后)将提供一些文件抽象(对于它能够运行的任何软件)。您一开始不会访问任何文件(但可以,但只能在引导加载时),甚至从原始磁盘(或某些分区)读取块也很困难(、等)。顺便说一句,你可以不用文件来设计你的操作系统,但也可以用其他方法来设计。如果你想要文件,你需要实现一个文件系统

请注意,操作系统是复杂的,因为它必须实现硬件之上的所有功能(包括屏幕显示、磁盘访问、键盘处理、鼠标处理、进程及其调度、内存管理和虚拟内存)。PC硬件比25年前复杂得多(USB、SATA、以太网等等)

下一步是什么

想想操作系统设计(&,持久性,)。所以要多读书。查看现有项目(,-不活动但有趣-…)您将无法实现许多功能,因此请逐步进行。您可能首先希望能够在屏幕上显示一些文本(研究其他现有的自由软件操作系统是如何做到这一点的!)。如果你从一个自由软件项目中获取一些代码,一定要尊重它的许可证

玩得开心,要有耐心。也许和一个好朋友一起工作是值得的(因为对于一个人来说,即使是一个小小的操作系统也是一个巨大的项目)。答案和你的动机有关。

学习Linux。使用它(或者以某种方式研究它,例如…),因为它对开发人员友好。不要花费数月时间在自己的引导加载程序上,使用现有的引导加载程序(例如)

查看wiki(我认为最好是你的MikeOS链接)&绝对阅读。花几个星期阅读和学习一些东西(甚至在编码之前)

windows上有没有IDE可以帮助我编译和执行这些低级代码

您应该更喜欢使用Linux,而且您当然不需要IDE,而是一个好的(您不应该使用IDE,因为它隐藏了您需要了解的细节;您需要使用命令并了解每个命令的作用)。我的偏好是,但您可以使用其他编辑器(例如,等等)

您将使用C编译器(以某种方式作为交叉编译器;您可能希望选择类似于现有s的调用约定,所以请仔细研究)。我的建议是(也有)。您需要详细了解如何使用。您当然需要所有警告(因此
-Wall-Wextra
)。您可能需要格式的调试信息和一些标志(例如
-O1
-O2
)。您需要使用一些工具(例如,…)和一些系统(选择并发布代码为、on或其他;快速这样做以获得反馈)

您将使用链接器(您可以阅读Levine的书)。所以它的
ld
(当然你会有一些汇编代码)。您需要了解并可能了解有关格式的详细信息

如果此ide不存在,如何调试它

痛苦地。也许你会使用一些模拟器或虚拟机,然后这样做(这并不简单;所以一开始你不会有那种奢侈)。实际上,您首先要对一些屏幕输出进行编码(可能是您自己的
console\u printf
,但不使用