2. Инструкции пересылки данных
Четырнадцать инструкций этого типа обеспечивают пересылку одиночных байтов и слов между памятью и регистрами, а также между портами ввода/вывода и регистрами AL или AX. В эту группу включены также инструкции манипуляции со стеком и инструкции пересылки флагов процессора и загрузки регистров сегмента.
Все инструкции пересылки данных можно условно разделить на 4 группы:
Общего назначения:
MOV – пересылка байта или слова
PUSH – сохранение слова в стеке
POP – восстановление слова из стека
XCLHG – обмен байтами или словами
XLAT – трансляция байта
Ввода/вывода:
IN – ввод байта или слова из порта
OUT – вывод байта или слова в порт
Адресные операции:
LEA – загрузка исполнительного адреса
LDS – загрузка указателя с использованием DS
LES – загрузка указателя с использованием ES
Пересылка флагов:
LAHF – загрузка флагов в AH
SAHF – установка флагов из AH
PUSHF – сохранение флагов в стеке
POPF – восстановление флагов из стека
Все инструкции пересылки данных, кроме POPF и SAHF, значений флагов процессора не изменяют.
Подробнее эти инструкции описаны в разделах 2.1–2.4.
2.1. Инструкции общего назначения
MOV приёмник, источник ПЕРЕСЫЛКА БАЙТА ИЛИ СЛОВА
Байт или слово пересылается из источника в приёмник.
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 соответственно. Номер порта может задаваться либо непосредственно числом в пределах от 0 до 255, обеспечивающим доступ только к этим портам, либо указанием регистра DX, который предварительно должен быть загружен требуемым значением, что обеспечивает доступ к портам с номерами от 0 до 65535.
OUT порт, аккумулятор ВЫВОД БАЙТА ИЛИ СЛОВА В ПОРТ
Байт или слово, предварительно помещенные в регистр AL или AX соответственно, выводится в указанный порт. Номер порта может задаваться либо непосредственно числом в пределах от 0 до 255, обеспечивающим доступ только к этим портам, либо указанием регистра DX, который предварительно должен быть загружен требуемым значением, что обеспечивает доступ к портам с номерами от 0 до 65535.
2.3. Адресные операции
Адресные операции работают не с содержимым или значением переменных, а с их адресами. Они наиболее полезны при обработке списков, базированных переменных и в операциях со строками.
LEA приёмник, источник ЗАГРУЗКА ИСПОЛНИТЕЛЬНОГО АДРЕСА
Смещение операнда-источника помещается в операнд-приёмник. Источник должен быть операндом памяти, а приёмник – 16-битовым регистром. Эта инструкция может использоваться для установки регистров перед XLAT или перед операциями со строками, которые предполагают, что некоторые регистры загружены адресными значениями.
LDS приёмник, источник ЗАГРУЗКА УКАЗАТЕЛЯ С DS
Указатель представляет собой 32-битовую адресную переменную, первое слово которой содержит смещение, а второе – базовый адрес (сегмент). Адрес указателя в этой инструкции задается операндом-источником, который должен быть операндом памяти. Слово смещения из указателя помещается в операнд-приёмник, в качестве которого может быть указан 16-битовый регистр. Слово сегмента из указателя помещается в регистр 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 в формате слова согласно их расположению в регистре флагов. Сами флаги не изменяются.
POPF ВОССТАНОВЛЕНИЕ ФЛАГОВ ИЗ СТЕКА
Из вершины стека, адресуемой регистром SP, в регистр флагов процессора 8086/8088 помещаются специфичные биты, соответствующие расположению флагов в регистре флагов. После этого SP увеличивается на 2 и указывает на новую вершину стека. Комбинации инструкций PUSHF и POPF позволяют процедуре сохранять и восстанавливать флаги вызвавшей её программы. Кроме того, таким образом можно устанавливать значение флага TF (ловушка), т. к. специальной инструкции для этого нет. Для этого следует сохранить флаги в стеке, изменить значение бита 8 и затем восстановить флаги из стека.
|