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 |