为什么我们需要进出装配说明? [关闭]

问题描述 投票:-5回答:1

对于网络I / O,为什么我们需要进出汇编指令才能直接从nic寄存器中获取数据?似乎in和out用在中断代码中。

网络我的图片

enter image description here

assembly networking x86 operating-system cpu
1个回答
2
投票

您似乎没有理解CPU和总线是如何工作的:

如您所知,网络i / o基于nic中断。

中断是一种机制,只要硬件(例如网卡)请求CPU这样做,它就会启动一个短程序。

中断只启动这个短程序;它没有别的。它也不会传输任何类型的数据。

您图像上显示的另一种机制是DMA。使用DMA,硬件组件(例如网卡)可以直接从RAM读取数据或将数据写入RAM。网卡显然使用这种机制将网络数据复制到RAM并发送存储在RAM中的数据。

但是,如果我们想要将数据发送到网络,我们首先必须告诉网卡,在网卡可以使用DMA访问RAM之前,根本没有数据要发送。当我们想要初始化网卡时也是如此。

因此,仅使用DMA,我们无法告诉网卡有数据要发送。启动计算机时也无法初始化网卡。中断也无济于事,因为中断是由网卡而不是软件启动的。我们需要第三种机制来访问网卡。

那么为什么我们需要汇编指令进出才能直接从nic寄存器中获取数据呢?

使用x86 CPU时,inout指令用于直接读取和写入某些硬件组件的数据。

实际上,硬件可以以与访问RAM相同的方式访问CPU:例如,使用mov指令。以这种方式访问​​图形卡的内存。还有CPU(如手机中常见的ARM CPU)以访问RAM的方式访问所有硬件。 (此类CPU没有inout指令。)

然而,在PC兼容的计算机中,硬件通常以必须使用inout指令访问的方式连接。

© www.soinside.com 2019 - 2024. All rights reserved.