所以我前几天在思考语言,让我感到震惊的是,用互联网交互的编译语言编写的任何程序都会被翻译成必须与互联网交互的程序集。我刚刚开始学习一些x86程序集,以帮助我更好地理解C ++,而且我对这样低级别的东西如何能够访问互联网感到困惑。
我确信这个问题的完整答案远远超过SO答案,但是有人可能会给我一个基本的总结吗?
答案 0 :(得分:12)
在所有现代系统中,“与互联网交互”的用户空间程序通过向底层操作系统发出system calls来实现,该操作系统为TCP / IP堆栈提供API。
有问题的系统调用(例如socket
,listen
,accept
等等)通常记录在C级别,但在每个特定的操作系统实现中,它们将翻译当然是机器代码。但是,值是否在特定寄存器中,或者特定寄存器指向的内存中的位置等,是非常小的,完全是系统特定的。
如果你想知道内核和设备驱动程序中的机器代码(可能也是从C编译)“与互联网交互”(响应系统调用),它通过在内存中构建和维护来实现这一点数据结构,用于跟踪各种事物的状态,并通过与底层硬件交互(例如,通过中断,I / O端口,内存映射设备区域或特定架构使用的任何内容) - 就像它与(例如)a交互一样视频显示器或磁盘设备。
答案 1 :(得分:2)
这取决于。当您阅读用C编写的Web脚本时,它实际上是一个CGI程序。 CGI是一种协议,而不是一种语言。 CGI指定将“GET”,“POST”等放入REQUEST_METHOD,将“foo = bar?baz = 42”放入QUERY_STRING,将数据发布到stdin等。要访问这些,CGI程序使用系统调用。 Web服务器使用CGI与Web脚本进行通信。通过Internet自身通信的程序可以使用系统套接字API。
总之,操作系统进行所有通信。该程序只是进行正确的系统调用。
如果您想知道操作系统如何通过Internet进行通信,答案是操作系统内核使用驱动程序通过IO端口,内存映射IO等与网卡连接。操作系统和网卡实现互联网协议标准,以便一起工作。
答案 2 :(得分:0)
您需要做的是查找其中一些PIC Web服务器项目。其中一些是使用汇编编写并在8位硬件上运行的Web服务器。它将让您清楚地了解如何通过互联网与世界其他地方进行低级别的汇编。
基本上涉及
希望这可以解决一些疑问。
答案 3 :(得分:0)
有理由说,无论程序如何,在某些时候,代码会被转换(缺乏正确的术语)成某种形式的“汇编”语言(我认为不止一种)然后会有“一对一“与机器代码的关系?不确定.NET和ILASM / Java及其相应的字节码是如何适应这一点的,但我认为它在某些时候变成了汇编,然后是机器码。