Память x86 и карта ввода / вывода - PullRequest
2 голосов
/ 07 июля 2010

семестр закончился, поэтому я снова погрузился в сборку.Я прочитал несколько статей и частей руководства пользователя семейства x86, касающихся карты памяти и операций ввода-вывода, и до сих пор не выяснил, как она работает. Насколько я понимаю, я могу получить доступ к операциям ввода-вывода с помощью IN иOUT инструкции, в этом случае это как номер порта, который я использую в качестве аргумента, на самом деле является относительным адресом к некоторой предопределенной области?или что делают эти две инструкции при исполнении?или адреса ввода-вывода полностью отличаются от оперативной памяти?

Ответы [ 3 ]

4 голосов
/ 08 июля 2010

Порты ввода / вывода подобны подобным адресам памяти, но к ним обращаются по-разному, используя инструкции 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.

Доступ к современным устройствам на современной шине намного, намного сложнее.

0 голосов
/ 09 июля 2010

Невозможно адресовать ввод / вывод так же, как память.

Ввод-вывод и память имеют общую адресную шину. Но доступ к памяти или вводу-выводу зависит от используемых вами инструкций. Есть вывод M / IO, который определяет один или другой. Тем не менее, весь механизм намного сложнее и несколько зависит от дизайна вашей системы. Для моего любимого дизайна - ПК, если вы хотите программировать устройства с помощью инструкции mov, вам необходимо запрограммировать декодер адреса этих устройств, чтобы устройство начало реагировать на эти диапазоны адресов.

0 голосов
/ 07 июля 2010

Hardwareports - это интерфейсы к оборудованию.Каждый номер порта привязан к определенному устройству.В защищенном режиме вы не можете получить доступ к портам, это должно быть сделано в режиме ядра.

В режиме DOS вам разрешено это делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...