Вообще говоря, зависит от архитектуры. Например, для ISA и PCI - ответы могут различаться.
Проще всего ответ - для ISA:
Команды IN/OUT процессора *86 - передают на шину запрос, подобный запросу в память. Т.е. на шину выдаётся указание, что выполняется эта команда; ну и адрес (номер порта). Далее - все устройства на шине (дисковый контроллер, сетевая плата) слышат этот запрос; и то, которое настроено на работу с этим портом, реагирует. Если это команда IN - то устройство выдаёт на шину соответствующий ответ; если OUT - то принимает данные от процессора. А какому своему параметру это соответствует - устройство решает само.
Вы неверно понимаете смысл терминов. "IO potrs" - это не устройства, они не могут "выполнять функцию". А так - да, примерно правильно.