Начните с чего-то вроде этого:
http://www.cpu -world.com / Информация / Распиновка / 8088.html
Вы изучаете инструкции для очень старого технологического чипа / архитектуры. Назад, когда все, кроме ядра процессора было вне чипа. Видите адресные строки и строки данных, и есть строка чтения RD и строка записи WR и строка ввода / вывода?
Существовали два типа команд на основе памяти и ввода-вывода, поскольку имелись адресуемые пространства, которые легко декодировались с помощью ввода-вывода или памяти.
Помните, что у вас была клейкая логика 74LSxx, много проводов и много микросхем для подключения памяти к процессору. И память была только той памятью, большими дорогими чипами. Если у вас было периферийное устройство, которое должно было сделать что-то полезное, у вас также были управляющие регистры, память могла бы быть пиксельными данными, но где-то вам нужно было установить пределы тактового сканирования по горизонтали и вертикали, это могли бы быть отдельные защелки 74LSxx, а НЕ памяти, имеющие I Отображение ввода / вывода, сохраненное в связующей логике и имеющее большой смысл с точки зрения программиста, также позволило избежать изменения ваших сегментных регистров для ориентации окна памяти размером 64 КБ и т. Д. Адресное пространство памяти было священным ресурсом, особенно когда вы хотел ограничить декодирование вашего адреса несколькими битами, потому что каждые несколько битов стоили вам несколько микросхем и проводов.
Подобно вводу-выводу с большим и меньшим порядком байтов памяти против ввода-вывода, I / O был религиозной войной. И некоторые ответы, которые вы увидите на свой вопрос, будут отражать сильные мнения, которые все еще существуют сегодня у людей, которые жили этим. Реальность такова, что у каждого чипа на рынке сегодня есть множество возможностей для разных вещей, вы не вешаете свои часы реального времени на шину памяти ddr с помощью декодера адресов. У некоторых все еще даже есть совершенно отдельные инструкции и шины данных. В некотором смысле Intel выиграла войну за концепцию отдельных адресных пространств для разных классов вещей, хотя термин порт ввода / вывода является злым и плохим, и его не следует произносить, скажем, еще 20-30 лет. Вам нужны люди моего возраста, которые жили, чтобы уйти в отставку или уйти до того, как война действительно закончится. Даже термин «ввод-вывод с отображением в память» остался в прошлом.
Это действительно все, что когда-либо было: один бит декодирования адреса на внешней стороне чипа Intel, который контролировался с помощью специальных инструкций. Используйте один набор инструкций, которые были включены в бит, используйте один набор инструкций, которые были отключены. Хотите увидеть что-то интересное, посмотрите на набор инструкций для процессоров xmos xcore, у них есть множество вещей, которые являются инструкциями вместо регистров с отображением в памяти, это выводит этот ввод-вывод на совершенно новый уровень.
Где это было использовано, как я описал выше, вы бы поместили вещи, которые имели смысл, и вы могли бы позволить себе сжечь адресное пространство памяти, например, пиксели видео, память сетевых пакетов (возможно), память звуковой карты (ну, не то, что тоже, но вы могли бы иметь) и т. д. И управляющие регистры, адресное пространство относительно данных было очень маленьким, может быть, только несколько регистров, были декодированы и использованы в пространстве ввода / вывода. очевидными являются / были последовательные порты и параллельные порты, у которых было мало, если вообще было хранилища, у вас могло бы быть небольшое пятно на последовательном порту, если что-нибудь.
Поскольку адресное пространство было недостаточным, оно нередко встречалось и сегодня все еще считается, что память скрыта за двумя регистрами - регистром адресов и регистром данных, эта память доступна только через эти два регистра, она не отображается на память. таким образом, вы записываете смещение в эту скрытую память в регистре адресов и читаете или записываете регистр данных, чтобы получить доступ к содержимому памяти. Теперь, потому что у intel была инструкция rep, и вы могли бы объединить ее с insb / w outsb / w, аппаратный декодер (если бы у вас с вами работали приятные / дружелюбные специалисты по аппаратному обеспечению) автоматически вводил адрес всякий раз, когда вы выполняли цикл ввода-вывода. Таким образом, вы можете записать начальный адрес в регистр адресов и выполнить повторную передачу и без записи тактов выборки и декодирования в процессоре и на шине памяти, вы можете довольно быстро перемещать данные в периферийное устройство или из него. Подобные вещи теперь считаются недостатком дизайна благодаря современным суперскалярным процессорам с выборками, основанными на предсказании ветвлений, ваше оборудование может в любое время выполнять чтение, не имеющее ничего общего с выполнением кода, в результате вы НИКОГДА не должны автоматически увеличивать адрес или очистить биты в регистре состояния или изменить что-либо в результате чтения по адресу.
Механизмы защиты, встроенные в 386 и до настоящего времени, фактически упрощают доступ к входам / выходам из пространства пользователя. В зависимости от того, что вы зарабатываете на жизнь, что производит ваша компания и т. Д. Вы можете наиболее определенно использовать семейство инструкций in и out из пользовательского пространства (прикладные программы в Windows и Linux и т. Д.) Или из пространства ядра / драйвера, это ваше выбор. Вы также можете делать забавные вещи, такие как использование виртуальной машины и использование инструкций ввода / вывода для общения с драйверами, но это, вероятно, разозлит людей, как в Windows, так и в мире Linux, что драйвер / приложение не сделают это очень далеко. Другие постеры верны в том, что вам, вероятно, никогда не понадобится использовать эти инструкции, если вы не пишете драйверы, и вы, вероятно, никогда не собираетесь писать драйверы для устройств, использующих I / O, сопоставленные с I / O, потому что вы знаете ... драйверы для этих устаревших устройств уже написаны. Современные конструкции, безусловно, имеют ввод / вывод, но все они отображены в памяти (с точки зрения программистов) и используют инструкции памяти, а не инструкции ввода / вывода. Теперь другая сторона, если это DOS, определенно не мертва, в зависимости от того, где вы, возможно, строите машины для голосования, газовые насосы или кассовые аппараты или длинный список оборудования на основе DOS. На самом деле, если вы работаете где-то, производя ПК или периферийные устройства или материнские платы для ПК, инструменты на основе DOS по-прежнему широко используются для тестирования и распространения обновлений BIOS и других подобных вещей. Я все еще сталкиваюсь с ситуациями, когда мне приходится брать код из текущей программы тестирования DOS, чтобы написать драйвер для Linux. Точно так же, как не все, кто может бросать или ловить футбол, играют в НФЛ, очень немногие занимаются программным обеспечением, которое включает подобные вещи. Поэтому все еще можно с уверенностью сказать, что эти инструкции, которые вы нашли, скорее всего, не будут для вас чем-то большим, чем урок истории.