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