问题描述
我想知道这个函数是什么意思:
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 中断的信息。