【问题标题】:Pure assembly - no linked C functions纯汇编 - 没有链接的 C 函数
【发布时间】:2012-07-10 19:58:01
【问题描述】:

我想尝试用汇编语言编写操作系统。请不要只说“白痴,你必须在 %s、%s、%s、%s 等方面做得更好才能考虑到这一点。”我知道这通常不是边做边学的事情,而且需要几个月的工作,但我想尝试,如果我在这里没有得到答案,我会在其他地方问。您能否将我链接到使用 nasm 的入门教程,或者在汇编中不使用 C 函数写入屏幕的方法?我几乎知道所有主要的组装说明,并且我已经编码了很长时间。 编辑:我想使用 nasm 和 win32

【问题讨论】:

标签: assembly operating-system


【解决方案1】:

除了上述其他出色的建议外,还有一个 Nasm 论坛(您可以在以下位置获取最新版本的 Nasm 和友好手册):

http://www.nasm.us

“Netwide”汇编器的主页上有国家代码可能看起来很奇怪。不要把它想象成“美国”,把它想象成“像,Nasm us,伙计!” :)

由于切换到 pmode 后 BIOS 中断将不可用,因此学习如何直接访问硬件是有意义的。写到屏幕上是一个简单的开始。您需要知道“屏幕”通常位于 0xB800000(B800:0000 为段:偏移形式 - 您可能需要)。您需要知道布局是字符的一个(偶数)字节和“属性”(主要是颜色)的一个(奇数)字节。即使您没有使用中断,RBIL 也包含“ports.lst”,您可能会发现它很有帮助。如上所述,osdev.org 是您最好的新朋友!

祝你快乐,

弗兰克

【讨论】:

    【解决方案2】:

    不使用 C 函数或系统调用的唯一方法是让您的汇编代码在没有任何其他操作系统的情况下运行,或者在 Bochs 或 QEMU 等模拟器中运行。

    Here 是一个简单的 nasm 教程,它写入屏幕并且不使用 C 函数,并且在该级别上不依赖于 Win32。如果你想写一些在windows中运行的东西,那么恐怕C函数是唯一的方法,除非你可以学习一些软件中断接口来做这件事。

    顺便说一句,osdev.org 包含许多优秀的文章和教程,包括许多关于如何在汇编中编写代码的文章和教程,适用于操作系统开发的许多不同方面。

    【讨论】:

      【解决方案3】:

      引用我同意的Nick Morgan

      嗯,我不认为学习 x86 有用。我认为你永远不必在日常工作中编写汇编语言——这个 [学习汇编程序] 纯粹是一种学术练习,可以扩展你的思维和思维。 6502 [一种汇编语言] 是在另一个时代编写的,当时大多数开发人员直接编写汇编,而不是使用这些新奇的高级编程语言。因此,它被设计为由人类编写。更现代的汇编语言是由编译器编写的,所以让我们把它留给他们。另外,6502 很有趣。从来没有人认为 x86 很有趣。

      我目前也在写一个“操作系统”来娱乐,在DCPU-16 assembly language(你可能听说过)。这很有趣,因为我可以使用许多可用的浏览器内“IDE”之一,例如 this one ,我想您需要了解的 x86 汇编的相同原则也适用。

      【讨论】:

      • 但是 x86 也是在人们手工编写汇编的时候设计的,仅仅比 6502 晚了 3 年。
      • 是的,我认为他想说的是,多年来,它已经演变成不再需要手写的东西了:)
      • 嗯,这是一个更有效的观点,我会说这是从 PPro 开始的,但是当 P3 引入 SSE 时,IMO 就不再正确了——十多年后,我还没有看到定期正确使用它的编译器,而不是偶尔偶然使用它。
      【解决方案4】:

      如果您正在使用 Win32,请参阅 Iczelion 的经典 Win32 组装教程:http://win32assembly.online.fr/tutorials.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        相关资源
        最近更新 更多