我一直认为printf()在最后一步中使用内联汇编定义函数.在stdio.h的内部深处埋藏了一些asm代码,它实际上告诉CPU要做什么.例如,在dos中,我记得它是通过首先mov将字符串的开头添加到某个内存位置或寄存器而不是调用intterupt来实现的.
但是,由于Visual Studio的x64版本根本不支持内联汇编程序,因此我想知道在C/C++中根本不会有汇编程序定义的函数.库函数如何printf()在不使用汇编代码的情况下在C/C++中实现?什么实际执行正确的软件中断?谢谢.
我想知道是否有任何可用的在线资源解释了什么事情,比如printf of C,它解释了在非常低级别发生的事情(BIOS /内核调用)
我很好奇printfLinux内部的工作原理.我不明白它是如何写入数据的STDOUT.
在对内部进行了一些搜索之后,我下载glibc并查看了源代码:
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
Run Code Online (Sandbox Code Playgroud)
在找到这个之后,我深入研究了这个vfprintf函数 - 但该文件大约有2500行不熟悉的C代码.我正在寻找10,000英尺的解释,如何printf与计算机的内存和输出一起工作,以在屏幕上显示字符.
如果我是汇编代码,我还需要做些什么才能完成相同的任务?它依赖于操作系统吗?