|
2.
Инструкции пересылки данных
14 инструкций этого типа обеспечивают пересылку
одиночных байтов и слов между памятью и регистрами, а также
между портами ввода/вывода и регистрами AL или AX. В эту
группу включены также инструкции манипуляции со стеком и
инструкции пересылки флагов процессора и загрузки регистров
сегмента.
Все инструкции пересылки данных можно условно
разделить на 4 группы:
1. Общего назначения:
MOV - пересылка байта или слова
PUSH - сохранение слова в стеке
POP - восстановление слова из стека
XCLHG - обмен байтами или словами
XLAT - трансляция байта
2. Ввода/вывода:
IN - ввод байта или слова из порта
OUT - вывод байта или слова в порт
3. Адресные операции:
LEA - загрузка исполнительного адреса
LDS - загрузка указателя с использованием DS
LES - загрузка указателя с использованием ES
4. Пересылка флагов:
LAHF - загрузка флагов в AH
SAHF - установка флагов из AH
PUSHF - сохранение флагов в стеке
POPF - восстановление флагов из стека
Все инструкции пересылки данных, кроме POPF и SAHF,
значений флагов процессора не изменяют.
Подробнее эти инструкции описаны в разделах 2.1-2.4.
2.1. Инструкции общего назначения.
MOV приемник,источник ПЕРЕСЫЛКА БАЙТА ИЛИ СЛОВА
---------------------
Байт или слово пересылается из источника в приемник.
- 8 -
PUSH источник СОХРАНЕНИЕ СЛОВА В СТЕКЕ
-------------
Указатель стека (регистр SP) уменьшается на 2, и в
вершину стека помещается слово из источника. Часто PUSH
используется для занесения в стек параметров процедуры перед
ее вызовом. В общем случае это основное средство для
сохранения временных данных.
POP приемник ВОССТАНОВЛЕНИЕ СЛОВА ИЗ СТЕКА
------------
Слово данных из текущей вершины стека, адресуемой
регистром SP, пересылается в операнд приемник. Регистр SP
затем увеличивается на 2 и указывает на новую вершину стека.
POP может использоваться для восстановления из стека
временных данных.
XCLHG приемник,источник ОБМЕН БАЙТАМИ ИЛИ СЛОВАМИ
-----------------------
Эта инструкция осуществляет обмен содержимым (байт или
слово) между операндами источник и приемник. При
использовании в сочетании с префиксом LOCK XCLHG может
проверять и устанавливать семафор, управляющий доступом к
разделяемому несколькими процессорами ресурсу.
XLAT таблица-трансляции ТРАНСЛЯЦИЯ БАЙТА
-----------------------
Байт в регистре AL замещается байтом из созданной
пользователем 256-байтной таблицы трансляции.
Предполагается, что регистр BX содержит адрес начала этой
таблицы. Содержимое AL используется как индекс в таблице и
замещается байтом, выбираемом из таблицы со смещением,
соответствующим двоичному содержимому регистра AL (первый
байт таблицы имеет смещение 0). Инструкция XLAT может
использоваться для трансляции символов из одного кода в
другой.
2.2. Ввод/вывод.
IN аккумулятор,порт ВВОД БАЙТА ИЛИ СЛОВА ИЗ ПОРТА
-------------------
Байт или слово, полученные из указанного порта,
помещается в регистр AL или AX соответственно. Номер порта
- 9 -
может задаваться либо непосредственно числом в пределах от 0
до 255, обеспечивающим доступ только к этим портам, либо
указанием регистра DX, который предварительно должен быть
загружен требуемым значением, что обеспечивает доступ к
портам с номерами от 0 до 65535.
OUT порт,аккумулятор ВЫВОД БАЙТА ИЛИ СЛОВА В ПОРТ
--------------------
Байт или слово, предварительно помещенные в регистр AL
или AX соответственно, выводится в указанный порт. Номер
порта может задаваться либо непосредственно числом в
пределах от 0 до 255, обеспечивающим доступ только к этим
портам, либо указанием регистра DX, который предварительно
должен быть загружен требуемым значением, что обеспечивает
доступ к портам с номерами от 0 до 65535.
2.3. Адресные операции.
Адресные операции работают не с содержимым или
значением переменных, а с их адресами. Они наиболее полезны
при обработке списков, базированных переменных и в операциях
со строками.
LEA приемник,источник ЗАГРУЗКА ИСПОЛНИТЕЛЬНОГО АДРЕСА
---------------------
Смещение операнда источник помещается в операнд
приемник. Источник должен быть операндом памяти, а приемник
- 16-битовым регистром. Эта инструкция может использоваться
для установки регистров перед XLAT или операциями со
строками, которые предполагают, что некоторые регистры
загружены адресными значениями.
LDS приемник,источник ЗАГРУЗКА УКАЗАТЕЛЯ С DS
---------------------
Указатель представляет собой 32-битовую адресную
переменную, первое слово которой содержит смещение, а второе
- базовый адрес (сегмент). Адрес указателя в этой инструкции
задается операндом источник, который должен быть операндом
памяти. Слово смещения из указателя помещается в операнд
приемник, в качестве которого может быть указан 16-битовый
регистр. Слово сегмента из указателя помещается в регистр
- 10 -
DS. Указание SI в качестве приемника является обычным
способом подготовки для строковой операции строки-источника,
расположенной вне текущего сегмента данных.
LES приемник,источник ЗАГРУЗКА УКАЗАТЕЛЯ С ES
---------------------
Указатель представляет собой 32-битовую адресную
переменную, первое слово которой содержит смещение, а второе
- базовый адрес (сегмент). Адрес указателя в этой инструкции
задается операндом источник, который должен быть операндом
памяти. Слово смещения из указателя помещается в операнд
приемник, в качестве которого может быть указан 16-битовый
регистр. Слово сегмента из указателя помещается в регистр
ES. Указание DI в качестве приемника является обычным
способом подготовки для строковой операции строки-приемника,
расположенной вне текущего экстра сегмента.
2.4. Операции с флагами.
LAHF ЗАГРУЗКА ФЛАГОВ В AH
----
Флаги SF, ZF, AF, PF и CF, являющиеся аналогами флагов
процессоров 8080/8085, копируются в биты 7, 6, 4, 2 и 0
соответственно регистра AH. Биты 5, 3 и 1 неопределены. Сами
флаги не изменяются. Эта инструкция обеспечивает возможность
выполнения на 8086 или 8088 программ, написанных для
процессоров 8080/8085.
SAHF УСТАНОВКА ФЛАГОВ ИЗ AH
----
Биты 7, 6, 4, 2 и 0 регистра AH замещают значения
флагов SF, ZF, AF, PF и CF соответственно. Значения флагов
OF, DF, IF и TF не изменяются. Эта инструкция введена для
совместимости с процессорами 8080/8085.
PUSHF СОХРАНЕНИЕ ФЛАГОВ В СТЕКЕ
-----
По этой инструкции указатель стека SP уменьшается на
2, и в вершину стека помещаются все флаги процессора
8086/8088 в формате слова согласно их расположению в
- 11 -
регистре флагов. Сами флаги не изменяются.
POPF ВОССТАНОВЛЕНИЕ ФЛАГОВ ИЗ СТЕКА
----
Из вершины стека, адресуемой регистром SP, в регистр
флагов процессора 8086/8088 помещаются специфичные биты,
соответствующие расположению флагов в регистре флагов. После
этого SP увеличивается на 2 и указывает на новую вершину
стека. Комбинации инструкций PUSHF и POPF позволяют
процедуре сохранять и восстанавливать флаги вызвавшей ее
программы. Кроме того, таким образом можно устанавливать
значение флага TF (ловушка), т.к. специальной инструкции для
этого нет. Для этого следует сохранить флаги в стеке,
изменить значение бита 8 и затем восстановить флаги из
стека.
© KOAP
Open Portal 2000
|