Вы можете сравнить концепцию регистра ввода-вывода с общим аппаратным регистром, поскольку регистр - это произвольный термин, используемый для обозначения области цифрового хранения. Регистр может действовать как аккумулятор, хранить информацию об исполнении, обеспечивать буфер ввода-вывода между устройствами и т. Д. Это также означает, что регистр процессора - это просто тип аппаратного регистра.
Таким образом, регистр ввода / вывода также является абстракцией регистра - он содержит промежуточные данные, перемещающиеся между компонентами. Процессоры не имеют определенных регистров ввода-вывода, а, скорее, различных общих регистров, которые могут выполнять одну и ту же задачу (которые используются, например, когда система использует ввод-вывод с отображением в памяти ). Они используются для обеспечения общей интерфейсной шины между процессором и памятью системы, но в случае MMIO разрешают доступ к памяти внешних устройств вне реальной адресной шины.
Как бы на самом деле программист сделал это? Им нужно будет определить, как внешнее устройство отображается на адресную шину системы, а затем использовать один из различных регистров x86 для сохранения адреса (в регистре указателя / указателя). Этот регистр может затем использоваться (с машинными инструкциями ) для передачи данных в / из другого регистра в процессоре в регистр на устройстве.
Если процессор не поддерживает MMIO (или программист решает не использовать его), то в случае x86 также могут существовать специальные инструкции для ввода / вывода из порта (который по сути является другой шиной). Эти инструкции ( IN
и OUT
) работают аналогично MOV
инструкции - они даже используют одни и те же регистры процессора. Единственное отличие состоит в том, что означает адрес в регистрах индекса / указателя (поскольку эти регистры используют другую карту адресов ввода / вывода ).
Вот почему я говорю, что регистры ввода / вывода являются абстракцией любого другого регистра ЦП - это одно и то же. Данные по-прежнему поступают и выходят из процессора в одни и те же регистры, независимо от того, используются ли они для промежуточных результатов, передачи данных в / из ОЗУ или для доступа к внешнему оборудованию.
В зависимости от конфигурации материнской платы ЦП может обращаться к памяти внешних устройств через саму фактическую адресную шину или другую шину, подключенную к порту на ЦП. Однако все это обычно регулируется северным мостом материнской платы для доступа к памяти и южным мостом для периферийного доступа (например, видеокарты, мышь / клавиатура).
Наконец, если вы знакомы с концепцией DMA, сами внешние периферийные устройства могут иметь регистры, специально предназначенные для целей ввода / вывода из оперативной памяти компьютера. Обратите внимание, что DMA в основном обходит любое вмешательство процессора, поэтому концепция регистра процессора здесь не применима.
Заключительное слово: каждое устройство на вашем компьютере имеет какой-либо регистр, так как ни одно устройство не подключено напрямую к ЦП - и если бы это было так, то вы бы тратили впустую такты ЦП, сохраняя данные на шине, пока у устройства не было достаточно времени использовать его (процессор обычно имеет самые быстрые часы в любой системе). Это только одна из причин, почему устройствам нужно место для хранения данных, прежде чем они смогут работать с ним - и это, по сути, все регистры.