Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АССЕМБЛЕР.doc
Скачиваний:
6
Добавлен:
21.09.2019
Размер:
388.1 Кб
Скачать

13. Адресация символьних данних.

Строковые команды, такие как MOVS (переслать строку), CMPS (сравнить строку), LODS (загрузить строку), STOS (записать строку) и SCAS (сканировать строку), не используют ни один из рассмотренных выше типов адресации для выборки своих операндов. Содержимое индексных регистров (SI и DI) используется для непосредственного указания требуемого участка памяти. Регистр SI всегда используется как указатель первого байта или слова строки-источника. Регистр DI используется как указатель первого байта или слова строки-приемника. Команда LODS предполагает использование регистра SI в качестве указателя источника. Команды STOS и SCAS используют регистр DI в качестве указателя-приемника. Команды MOVS и CMPS используют оба регистра SI и DI. Перемещаемый адрес, находящийся в регистре DI, всегда относится к текущему дополнительному сегменту. Для команд работ со строками данных могут быть определены и префиксные команды, которые позволяют переприсвоить сегмент данных (для команд LODS, MOVS и CMPS) или дополнительный сегмент (для SCAS) другому сегменту, расположенному в любой части памяти 8086. При исполнении строковой команды увеличение или уменьшение содержимого регистров SI или DI определяется состоянием (нулевое или единичное) флага направления. В зависимости от того, с чем работает команда - с байтом или словом, - содержимое индексных регистров увеличивается/уменьшается соответственно на 1 или 2.

14.Адресация портов ввода/вывода

Система на базе МП 8088 взаимодействует с периферийными устройствами через так называемые порты ввода/вывода. Через них процессор может передавать управляющую информацию и получать результаты выполнения операции периферийными устройствами. Процессору доступно 64К 8-битных портов ввода/вывода. Обращение к ним производится при помощи специальных команд ввода/вывода - IN и OUT. Каждому порту назначен уникальный адрес из диапазона от 0 до 65535. Любые два смежных 8-битных порта могут быть использованы как 16-битный порт

аналогично слову памяти.

2.2. Пространство ввода/вывода

"Процессоры семейства 8086 имеют раздельную адресацию памяти и портов ввода/вывода. ... Для обращения программы к пространству ввода/вывода предназначены всего четыре основные инструкции процессора: IN (ввод в регистр), OUT (вывод из регистра), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти). Последние две инструкции, появившиеся с процессором 80286, могут использоваться с префиксом повтора REP, что обеспечивает быструю пересылку блоков данных между портом и памятью. Обмен данными с портом, при котором используются строковые инструкции ввода/вывода, получил название PIO (Programmed Input/Output - программированный ввод/вывод). Скорость такого обмена превышает скорость стандартного канала прямого доступа (DMA), правда, DMA, в отличие от PIO почти не занимает процессорного времени....

При 16-битной адресации возможен доступ ко всему адресному пространству ввода/вывода, имеющему размер 64К (диапазон адресов 0 - 0FFFFh). Биты старшей части адреса (А16 и старше) при программном обращении к портам всегда имеют нулевое значение. ...

Для дешифрации адреса в оригинальном PC из 16 бит использовались только младшие 10 (А0 - А9), что обеспечивает обращение к портам в диапазоне адресов 0 - 3FFh. Старшие биты адреса хотя и поступают на шину, устройствами игнорируются. В результате обращения по адресам, к примеру, 378h, 778h, B78h и F78, будут восприниматься устройствами одинаково.Стремлением к экономии объясняется и выбор базовых адресов стандартных устройств расширения: 3F8h, 3F0h, 378h и т.п. Эти адреса выбирались так, чтобы в их дешифрации участвовало максимальное количество единиц и минимальное - нулей...

В реальном режиме процессора программно доступно все пространство адресов ввода/вывод. В защищенном режиме 32-разрядных процессоров (частным случаем которого является и виртуальный режим V86) имеется возможность программного ограничения доступного пространства ввода/вывода, ... а внутри разрешенной области доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов (IO Permission Bitmap) задается операционной системой... При обращении по неразрешенному адресу вырабатывается исключение процессора, а поведение его обработчика определяется операционной системой. Возможно снятие задачи-нарушителя (знаменитое сообщение "приложение ... выполнило недопустимую операцию и будет закрыто"). Возможен и другой вариант, когда по обращению к порту монитор операционной системы выполняет некоторые действия, создавая для программы иллюзию реальной операции ввода/вывода. Таким образом виртуальная машина по операциям ввода/вывода может общаться с виртуальными устройствами.

Несколько портов ввода/вывода могут иметь совпадающие адреса, и операции записи все они будут нормально отрабатывать одновременно. Для операций считывания ситуация выглядит иначе. Если два (или более) порта ввода имеют совпадающий адрес, то при операции считывания они оба будут передавать свои данные на шину. Если они находятся на одной физической шине, то возникает конфликт. В этом конфликте при прочих равных условиях для каждого бита шины данных"побеждает" порт, выводящий логический ноль. ... Если порты с совпадающими адресами находятся на разных физических шинах ..., то конфликта не будет, поскольку шины отделяются друг от друга буферами данных."