我可以在 C 中使用 asm() 而不是 asm 吗?

Can I use asm() in C instead of asm?

提问人:yusuf 提问时间:9/17/2023 更新时间:9/17/2023 访问量:42

问:

我想编写一个简单的操作系统用于学习目的。 我可以用 C 语言而不是汇编语言使用 asm() 编写操作系统吗?

例:

int main()
{
asm("mov ax,70C0h"
    "add ax,520"
    "jmp $");
}
C 操作系统 程序集

评论

1赞 BoP 9/17/2023
您可以将 asm 编写为 C 程序的一部分,但不能将其作为创建操作系统的唯一方法。在“底部”可能必须有一些裸露的 asm 代码来加载第一个程序。例如,谁会打电话?main()
0赞 Craig Estey 9/17/2023
你可以,但我认为问题很明显。请注意,您还需要在每个字符串末尾使用显式:.因此,对于任何重要的序列(例如 10+ 行),使用 C 指令实际上比编写自己的文件麻烦。而且,您想要使用汇编代码的位置[通常]是引导程序,它对代码的放置位置有确切的要求(例如 指令)。同样,虽然你可以这样做,但没有人这样做,因为它更难写作、阅读和理解,而且没有好处。\n"mov ax,70C0h\n"asm.sorg

答:

2赞 RadoslavL 9/17/2023 #1

您不能使用内联程序集编写操作系统,因为 C 编译器将在现有操作系统上编译和链接代码。之后,它只能在您的操作系统上执行。我建议在汇编中编写操作系统,然后使用 NASM(一种常见的 x86 编译器)进行编译。我推荐本教程来创建自己的引导加载程序。之后,您可以坚持使用 16 位实模式或切换到 32 位保护模式