|  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 и затем восстановить флаги из стека.
 
 |