有谁知道如何访问主板或 pci 卡上的以太网端口等设备?
有专门的寄存器吗?操作码?我必须打电话给操作系统吗?如果是这样,怎么做?
提前致谢。
这取决于您尝试与之通信的特定以太网 MAC 芯片。即使是同一家族的芯片,它们的运行方式也往往会有细微的差别。这就是为什么现代操作系统有“驱动程序”概念的原因:硬件制造商通常会编写驱动程序,因为他们知道硬件,而驱动程序提供了硬件和操作系统想要看到的内容之间的转换。
您通常可以从 MAC 芯片的制造商处获取文档来编写自己的驱动程序。同样,您必须确切地知道要与哪个芯片交谈才能获得正确的规格。有些芯片没有公开文档,但这通常不是以太网芯片的问题。
最简单的答案,虽然可能不是您要找的,但可能是编写 C 代码来访问卡,对其进行编译,然后查看编译器生成的代码。
C 代码很可能直接通过 NIC 驱动程序,或者使用诸如winpcap之类的库。例如,出于安全原因,Windows 上对原始套接字的内置支持被禁用。
但这不是了解 NIC 如何工作的最佳方式。为此,请选择一个流行的嵌入式 NIC(如LAN91C111 )的数据表并阅读如何访问它。这将教你很多关于以原始方式连接 Eterthet 的知识。
恕我直言,这仍然不是一个足够好的沙箱来学习汇编语言。为此,只需在汇编中实现一些小的算法程序——比如二叉树搜索。
您可以使用对卡本身的调用,使用输入和输出指令或类似的东西。每个以太网卡都不同,因此您需要制造商提供的文档。
下一级是 DOS 函数调用,假设您使用的是 Windows。这些将允许您使用标准 MSDOS 调用访问以太网卡的有限功能。您可以在旧的 MSDOS 文档中找到这些内容。如果我没记错的话,它们中的大多数仍然可以在更高版本的 Windows 上工作。
您将需要写入特定的端口地址。此 Wiki 页面可能会帮助您入门。
内存映射IO