Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
21
Добавлен:
25.08.2019
Размер:
526.34 Кб
Скачать

4.1.2. Команда замены

Команда замены XCHG просто меняет местами содержимое двух ячеек. Эта команда может поменять местами содержимое двух регистров, или регистра и памяти. При этом в качестве операндов не могут использоваться сегментные регистры.

Команда XCHG заменяет три команды пересылки и не требует промежуточной ячейки памяти. Если бы команда замены не существовола, программе потребовалось бы три пересылки, чтобы обменять значения в регистре AX и в регистре BX. Сначала она должна была бы переслать содержимое регистра AX в рабочую ячейку, затем переслать содержимое регистра BX в регистр AX, и наконец, переслать содержимое рабочей ячейки в регистр BX. Команда XCHG одна выполняет эту операцию.

4.1.3. Команды ввода и вывода

Для выполнения операций ввода и вывода микропроцессор 8088 имеет команды IN и OUT соответственно. Каждое устройство ввода-вывода IBM PC имеет один или больше встроенных регистров, с которыми могут работать эти команды. Каждое устройство ввода-вывода имеет адрес для каждого регистра в устройстве. Это адресное пространство отличается от адресного пространтва памяти; всего существует 256, или 65536 адресов ввода-вывода, доступных микропроцессору 8088. В IBM PC - 512 из этих адресов назначены системному каналу ввода-вывода и могут использоваться различными адаптерами. Другие 256 адресов используются на системной плате для управления подключенными туда устройствами ввода-вывода.

Команда IN пересылает данные из устройства ввода-вывода в регистр AL. Эта команда может указать адрес устройства ввода-вывода двумя различными способами. Если адрес устройства находится в пределах 0 - 255, он может содержаться в команде как непосредственное значение. Если адрес больше 255, команда сообщает это косвенно. В случае косвенной команды адрес устройства ввода-вывода содержится в регистре DX. Регистр DX может содержать адреса всех устройств ввода-вывода, включая те, номера которых меньше 256.

Аналогично работает команда OUT, за исключением того, что она записывает регистр AL в регистр устройства ввода-вывода. Адреса в команде OUT указываются так же, как и в команде IN.

Команды IN и OUT также могут пересылать слова в устройства ввода-вывода и из них. В случае работы со словами источником и приемником является регистр AX. Так как у микропроцессора 8088однобайтовая внешняя шина, устройства ввода-вывода IBM PC работают только с байтами при любых операциях ввода-вывода. Это означает, что операции ввода-вывода слов не используются в персональной ЭВМ. Однако пословные операции ввода-вывода имеют смысл в системе с микропроцессором 8086, который имеет тот же набор команд.

4.1.4. Загрузка исполнительного адреса

Команда загрузки действительного адреса LEA очень похожа на команду MOV. Но вместо пересылки данных из ячейки памяти в регистр команда LEA загружает в регистр адрес двнных. Так как набор команд микропроцессора 8088 разрешает иметь в команде только один адрес памяти, в качестве приемника результата всегда указывается регистр. Команда LEA может ссылаться на операнд источника с помощью любого типа адресации, который можно указать байтом mod=r/m.

Во многих случаях команда LEA идентична команде MOV с непосредственным операндом. Команды

MOV BX, OFFSET EXWORD LEA BX, EXWORD

делают одно и то же. Первая команда - это непосредственнаяпересылка, которая использует смещение переменной EXWORD. Оператор OFFSET говорит ассемблеру о том, что в регистр BX надо загрузить смещение адресного значения (все адресные значения имеют две части - сегмент и смещение) переменной EXWORD. Команда LEA вычисляет действительный адрес переменной EXWORD и помещает его в регистр BX. В этом случае команды выполняют одинаковые действия.

Но если бы программа загружала в регистр BX адрес десятого байта массива, на который указывает регистр DI, команда LEA выглядела бы следующим образом

LEA BX, 10[DI]

Микропроцессор выполнил бы вычисление адреса, используя информацию из байта mod=r/m в точности, как в случае команды MOV. Затем он поместил бы вычисленное смещение, а не данные, по этому адресу в регистр BX. Аналогичной команде с непосредственнымоперандом MOV, которая могла бы выполнять ту же функцию, нет. У ассемблера здесь нет способа определения непосредственного значения, так как адрес неизвестен во время ассемблирования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]