Иллюстрированный самоучитель по Assembler


Index7 - часть 4


Программное разделение устройств реализуется с помощью двух наборов команд процессора - для памяти и для устройств ввода-вывода. В первую группу команд входят практически все команды процессора, с помощью которых можно обратиться по тому или иному адресу - команды пересылки mov и movs, арифметических действий add, mul и div, сдвигов rol, ror, sal и sar, анализа содержимого байта или слова test и многие другие. Фактически в эту группу команды входит большинство команд процессора. Вторую группу команд образуют специфические команды ввода-вывода. В МП 86 их всего две - команда ввода in и команда вывода out. При выполнении команд первой группы процессор автоматически генерирует М / IO' = 1; при выполнении команд in и out процессор устанавливает сигнал М / IO' = 0.

Таким образом, при обращении к памяти и к видеобуферу программист может использовать все подходящие по смыслу команды процессора, при этом, работая, например, с видеобуфером, можно не только засылать в него (или получать из него) данные, но и выполнять прямо в видеобуфере любые арифметические, логические и прочие операции.

Обращаться же к контроллерам тех или иных устройств (и, между прочим, к видеоадаптеру), допустимо только с помощью двух команд - in и out. Арифметические операции или анализ данных в устройстве невозможен. Необходимо сначала прочитать в процессор данное из внешнего устройства, и лишь затем выполнять над ним требуемую операцию.

Наличие двух категорий адресов устройств дает основание говорить о существовании двух адресных пространств - пространства памяти, куда входит сама память, а также видеобуферы и ПЗУ, и пространства ввода-вывода (пространства портов), куда входят адреса остальной аппаратуры компьютера. При этом, если объем адресного пространства памяти составляет 1 Мбайт (а в защищенном режиме 4 Гбайт), то адресное пространство портов гораздо меньше - его размер составляет всего 64 Кбайт. Эта величина определяется форматом команд ввода-вывода. Адрес адресуемого порта должен быть записан в регистр DX (и ни в какой другой) и, таким образом, максимальное значение этого адреса составляет величину FFFFh. Реально из 64 Кбайт адресного пространства портов используется лишь очень малая часть. Практические вопросы программирования через общее с памятью адресное пространства и через пространство портов будут рассмотрены в следующих главах.

 




Начало  Назад  



Книжный магазин