C 和汇编中这个打印函数的含义是什么? (DOS)

问题描述

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

void dos_print(char *str)
{
    asm("mov $0x09,%%ah\n"
        "int $0x21\n"
        :
        :"d"(str)
        :"ah");
}

解决方法

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

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

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