Порты ввода / вывода подобны подобным адресам памяти, но к ним обращаются по-разному, используя инструкции IN и OUT.Полная история современного оборудования очень сложна, но получить доступ к устаревшим устройствам в реальном режиме довольно просто.Вот пример того, как читать код сканирования с клавиатуры (технически, контроллера клавиатуры).
Wait:
IN AL, 64H ; read keyboard status port
AND AL, 1 ; a key is ready when bit 0 is set
JZ Wait
IN AL, 60H ; read scan code
Порты с номерами 60H и 64H были установлены IBM еще до вашего рождения, но каждый компьютер с тех порзатем имитировал это поведение во имя обратной совместимости.Другие устаревшие устройства также имеют фиксированные номера портов.Вот забавный пример, если у вас есть дисковод гибких дисков:
MOV DX, 3F2H ; 3F2 is the floppy controller's control port
MOV AL, 10H ; turn on bit 4
OUT DX, AL ; start the floppy motor!
Для номеров портов больше 8 бит (например, 3F2), вы должны сначала указать номер порта в DX (просто странность)набора инструкций).Опять же, назначение 3F2 было исправлено давным-давно с введением IBM PC.
Доступ к современным устройствам на современной шине намного, намного сложнее.