Вопрос задан бессмысленно. Все современные сетевые контроллеры имеют PCI interface и следовательно разговаривать с ними надо через PCI I/O space. Данные качаются обычно через DMA прямо из RAM. Ессно если это что-то старое и оочень дешёвое, то пакет идёт по машинному слову через один регистр (programmed io) Поэтому, для каждого конкретного чипа смотришь спецификацию (data sheet) от производителя. Ну а за примером бегом в linux kernel - там есть драйвера для всего стандартного. Ещё есть пример Intel E1000 в DDK.
возьми лучше Колибри или Минует - там копать меньше, но и драйвер менее функционален, зато прост как пробка (разберешься и без бутылки)
Могу посоветовать Кулакова "Программирование на аппаратном уровне" там есть пример программирования NE2000, на асме. Начни с него.