【发布时间】:2017-01-03 00:38:59
【问题描述】:
我想知道 OS API 是如何工作的,因为我决定编写一个编译器。如果您在 C/C++ 中做某事,您可能会调用 API。它们在 C/C++ 中看起来非常好,但我对它们在汇编中的编译方式感到非常困惑。他们是发出中断、写入内存地址、写入寄存器然后发出中断(这就是 BIOS API 的工作原理,我不确定 OS API 是否这样工作)还是其他什么?
【问题讨论】:
-
您的问题很遗憾地暗示了对低级编程的基本知识的严重缺乏。我建议您在考虑编写自己的编译器之前,先为自己准备一两本关于该主题的好书并了解这些主题。
-
这里的一个相关术语是“调用约定”(关于函数参数如何传递,返回值如何返回,哪些寄存器被破坏,哪些没有)。更一般地说,ABI(类似于 API 但二进制)描述了事物在汇编中如何相互交互。 x86 tag wiki 有一些关于 ABI 是什么的很好的链接,以及 x86 / x86-64 上常用的官方规范的链接(包括像 Linux 系统调用 ABI 之类的东西,它与 Windows 不同的是稳定并且可以直接使用,没有通常的 glibc 包装器)
-
这似乎是最相关的副本,尽管我知道您实际上对 Windows 感兴趣。另请参阅stackoverflow.com/questions/8335582/…,了解为什么调用约定是按原样设计的。另请参阅x86 Linux 32-bit assembly Hello World, with pure system calls (no libc) on SO docs。
-
错了,我对 Windows 不感兴趣。我有兴趣为我正在创建的操作系统提供 API
标签: assembly compiler-construction operating-system