C 和汇编中的打印函数是什么意思? (操作系统)

What's the meaning of this print function in C and Assembly? (DOS)

我想知道这个函数是什么意思:

void dos_print(char *str)
{
    asm("mov [=10=]x09, %%ah\n"
        "int [=10=]x21\n"
        :
        :"d"(str)
        :"ah");
}

asm is a GCC extension to C that lets you insert assembly language into the program.

mov [=11=]x09, %%ah\n 生成一条将 9 移入 AH 寄存器的指令。 int [=12=]x21 生成一条指令,该指令是对操作系统的请求,将值 0x21 传递给它。在 DOS 中,AH 中值为 0x21 和 9 的中断要求系统打印一个字符串。 : 行是告诉 GCC 汇编代码结果产生的地方。它是空的,因为这段代码不产生程序关心的任何值。 :"d"(str) 行告诉 GCC 在执行此汇编代码之前将 str 的值(指向字符串第一个字符的指针)放入 DX 寄存器。 :"ah" 行告诉 GCC 汇编代码可能会改变 AH 寄存器的内容。

This Wikipedia page 有一些关于 DOS 中断的信息。