Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК_МашЗавЯП_А4.doc
Скачиваний:
157
Добавлен:
10.06.2015
Размер:
19.94 Mб
Скачать
    1. Целочисленный процессор

      1. Команды общего назначения

        Команда

        Описание

        MOV приемник, источник

        MOVe operand – пересылка операнда.

        Пересылка данных в приемник из источника.

        Адресаты - регистр, память или непосредственный операнд.

        MOVS приемник, источник

        MOVSB

        MOVSW

        MOVSD

        MOVe String Byte/Word/Double worf– пересылкастрок,содержащих:

        • Байты

        • Слова

        • Двойные слова

        MOVSХ приемник, источник

        MOVe and Sign eXtension – пересылка со знаковым расширением.

        Преобразование элемента со знаком меньшей размерности в эквивалентные элементы со знаком большей размерности.

        MOVZХ приемник, источник

        MOVe and Zero eXtension – пересылка с нулевым знаковым расширением.

        Преобразование элемента без знака меньшей размерности в эквивалентные элементы без знака большей размерности.

        XCHG операнд_1, операнд_2

        eXCHanGe – обмен.

        Обмен данными между операндами. Это регистры или память. Команда "память - память" в микропроцессоре Intel не предусмотрена.

        BSWAP reg32

        Byte SWAP - перестановка байтов.

        Перестановка байт из порядка "младший - старший" в порядок "старший - младший". Разряды 7-0 обмениваются с разрядами 31-24, а разряды 15-8 с разрядами 23-16.

        XLAT адрес_таблицы_байтов

        transLATe byte from table – загрузка из таблицы.

        Загрузить в регистр AL байт из таблицы в сегменте данных, на начало которой указывает EBX (ВХ), при этом начальное значение AL играет роль смещения.

        LEA приемник, источник

        Load Effective Address - загрузка эффективного адреса.

        Получить эффективный адрес (смещение) источника.

        LDS приемник, источник

        Load pointer into DS - загрузить указатель сегмента в регистр DS из памяти.

        Загрузить пару DS:reg из памяти (m). Вначале идет слово (или двойное слово) в регистр (reg), а в DS - последующее слово.

        LES приемник, источник

        Аналогично предыдущему, но для пары ES:reg.

        LFS приемник, источник

        Аналогично предыдущему, но для пары FS:reg.

        LGS приемник, источник

        Аналогично предыдущему, но для пары GS:reg.

        LSS приемник, источник

        Аналогично предыдущему, но для пары SS:reg.

        SETcc операнд

        byteSETonconditon– установка байта по условию.

        Проверяет условие, заданное модификатором "cc". Если оно выполняется, то первый бит байта устанавливается в 1, в противном случае в 0. Модификаторы – по флагам.

      2. Команды ввода-вывода

        Команда

        Описание

        IN аккумулятор, номер порта

        INput operand from port – ввести операнд из порта

        Ввод в аккумулятор из порта ввода-вывода. Порт адресуется непосредственно или через регистр DX.

        OUTномер порта,аккумулятор

        OUT operand to port – вывести операнд в порта

        Вывод из аккумулятор в порта ввода-вывода. Порт адресуется непосредственно или через регистр DX.

        INSB

        INSW

        INSD

        INput String Byte/Word/Double word operands – ввод изпортаэлементов:

        Байта

        Слова

        Двойного слова.

        Вводит данные из порта, адрес которого находится в регистре DX, в ячейку памяти, определяемой регистрами ES:[EDI/DI].

        OUTSB

        OUTSW

        [OUTSD

        OUT String Byte/Word/Double word operands – выводвпортэлементов:

        Байта

        Слова

        Двойного слова.

        Выводит данные из ячейки памяти, определяемой регистрами DS:[ESI/SI], в выходной порт, адрес которого находится в регистре DX.

      3. Инструкции работы со стеком

        Команда

        Описание

        PUSH источник

        PUSH operand onto stack – поместить в стек.

        Поместить в стек слово или двойное слово. Поскольку при включении в стек слова нарушается выравнивание стека по границам двойных слов, рекомендуется в любом случае помещать в стек двойное слово.

        PUSH const

        Поместить в стек непосредственный 32-битный операнд.

        PUSHA

        PUSH All general registers onto stack – поместить в стек все регистры общего назначения.

        Поместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

        POP пприемник

        POP operand from the stack – извлечь операнд из стека.

        Извлечь из стека слово или двойное слово.

        POPА

        POP All general registers onto stack – извлечь изстека все регистры общего назначения.

        Извлечье из стека данные в регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

        PUSHF

        PUSH Flags register onto stack

        Помещение в стек регистра флагов.

        POPF

        POP Flags register from the stack

        Извлечь из стека данные в регистр флагов.

      4. Арифметико-логические инструкции

Целочисленная арифметика

Команда

Описание

ADD приемник, источник

ADDition – сложение.

Сложение двух операндов. Один из операндов – приемник. Первый операнд может быть регистром или ячейкой памяти, второй - регистром, ячейкой памяти, константой. Невозможно только, когда оба операнда являются ячейками памяти.

XADD приемник, источник

eXchange and ADD –обмен двух значений и суммирование.

Данная операция производит в начале обмен операндами, а затем выполняет операцию ADD.

ADC приемник, источник

ADdition with Carry.

Сложение с учетом флага переноса - в младший бит добавляется бит (флаг) переноса.

INC операнд

INCrement operand by 1.

Увеличить операнд на 1.

SUB операнд1, операнд2

SUBtract.

Вычитание двух операндов. Остальное аналогично сложению (команда ADD).

SBB операнд1, операнд2

SuBtract with Borrow.

Вычитание с учетом предыдущего вычитания (бита заема). Из младшего бита вычитается бит (флаг) переноса.

DEC r/m

DECrement operand by 1.

Уменьшить операнд на 1.

CMP операнд1, операнд2

CoMPare operands – сравнение операндов.

Вычитание без изменения операндов (сравнение).

CMPXCHG приемник, источник

CoMPare and eXCHanGe – сравнение и обмен..

Сравнение с обменом. Источник – всегда аккумулятор. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор.

CMPXCHG8B приемник, источник

CoMPare and eXCHanGe 8 Byte – сравнение и обмен..

Сравнение с обменом 8 байтов. Источник – всегда аккумулятор. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор.

NEG источник

NEGate operand.

Изменение знака операнда.

ААА

Ascii Adjust after Addition - ASCII-коррекцияпослесложения. Алгоритм:

  • проверить значение младшего полубайта регистра AL и значение флага AF;

  • если (значение младшего полубайта регистра AL>9) или (AF=1), то выполнить следующие действия: увеличить значение al на 6, очистить старший полубайт регистра al, увеличить значение ah на 1, установить флаги: AF=1, CF=1;

  • иначе сбросить флаги AF= 0 и CF= 0.

AAS

Ascii Adjust after Substraction - ASCII-коррекция после вычитания. Алгоритм работы:

  • если (младший полубайт регистра AL меньше 9) или (флаг AF=1), то выполнить следующие действия: уменьшить значение младшего полубайта регистра al на 6, обнулить значение старшего полубайта регистра AL;

  • установить флаги AF=1 и CF=1;.

ААМ

Ascii Adjust after Multiply - ASCII-коррекция после умножения. Алгоритм работы:

  • разделить значение регистра AL на 10;

  • записать частное в регистр AH, остаток — в регистр AL.

AAD

Ascii Adjust before Division - ASCII-коррекция перед делением. Алгоритм работы:

  • умножить значение регистра AH на 10 и сложить полученное значение с содержимым регистра AL;

  • присвоить регистру AL это значениеl;

  • обнулить регистр AH.

DAA

Decimal Adjust for Addition - десятичная коррекция после сложения. Алгоритм работы. команда работает только с регистром AL и анализирует наличие следующих ситуаций:

  • Ситуация 1. В результате предыдущей команды сложения флаг AF=1 или значение младшей тетрады регистра AL>9. Напомним, что флаг AF устанавливается в 1 в случае переноса двоичной единицы из бита 3 младшей тетрады в старшую тетраду регистра AL (если значение превысило 0fh). Наличие одного из этих двух признаков говорит о том, что значение младшей тетрады превысило 9h.

  • Ситуация 2. В результате предыдущей команды сложения флаг CF=1 или значение регистра AL>9fh. Напомним, что флаг CF устанавливается в 1 в случае переноса двоичной единицы в старший бит операнда (если значение превысило 0ffh в случае регистра AL). Наличие одного из этих двух признаков говорит о том, что значение в регистре AL превысило 9fh.

Если имеет место одна из этих двух ситуаций, то регистр al корректируется следующим образом:

  • для ситуации 1 содержимое регистра AL увеличивается на 6;

  • для ситуации 2 содержимое регистра AL увеличивается на 60h;

  • если имеют место обе ситуации, то корректировка начинается с младшей тетрады.

DAS

Decimal Adjust for Subtraction - десятичная коррекция после вычитания. Команда работает только с регистром AL и анализирует наличие следующих ситуаций:

  • Ситуация 1. В результате предыдущей команды сложения флаг af =1 или значение младшей тетрады регистра al>9. Напомним, что для случая вычитания флаг af устанавливается в 1 в случае заема двоичной единицы из старшей тетрады в младшую тетраду регистра al. Наличие одного из этих двух признаков говорит о том, что значение младшей тетрады превысило 9h и его нужно корректировать.

  • Ситуация 2. В результате предыдущей команды сложения флаг сf =1 или значение регистра al>9fh. Напомним, что для случая вычитания флаг cf устанавливается в 1 в случае заема двоичной единицы. Наличие одного из этих двух признаков говорит о том, что значение в регистре al превысило 9fh.

Если имеет место одна из этих ситуаций, то регистр al корректируется следующим образом:

  • для ситуации 1 содержимое регистра al уменьшается на 6;

  • для ситуации 2 содержимое регистра al уменьшается на 60h;

  • если имеют место обе ситуации, то корректировка начинается с младшей тетрады.

MUL множитель

MULtiplay - умножение целых чисел без знака.

Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;

  • если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;

  • если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

IMUL множ

IMUL множ1, множ2

IMUL резул, множ1, множ2

Integer MULtiplay - умножение целых чисел со знаком.

Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде, — байт, то второй сомножитель располагается в al;

  • если операнд, указанный в команде, — слово, то второй сомножитель располагается в ax;

  • если операнд, указанный в команде, — двойное слово, то второй сомножитель располагается в eax.

Результат умножения для команды с одним операндом также помещается в строго определенное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

Команды с двумя и тремя операндами однозначно определяют расположение результата и сомножителей следующим образом:

  • в команде с двумя операндами первый операнд определяет местоположение первого сомножителя. На его место впоследствии будет записан результат. Второй операнд определяет местоположение второго сомножителя;

  • в команде с тремя операндами первый операнд определяет местоположение результата, второй операнд — местоположение первого сомножителя, третий операнд может быть непосредственно заданным значением размером в байт, слово или двойное слово.

DIV делитель

DIVide unsigned - деление целых чисел без знака.

Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде. Алгоритм работы:

  • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

  • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

  • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.

IDIV делитель

Integer DIVide - деление целых чисел со знаком.

Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, местонахождение которого указывается в команде. Алгоритм работы:

  • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

  • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

  • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx;

CBW

Convert Byte to Word - преобразование байта в слово

Команда использует только регистры al и ax: Алгоритм работы - анализ знакового бита регистра al:

  • если знаковый бит al=0, то ah=00h;

  • если знаковый бит al=1, то ah=0ffh.

CWD

Convert Word to Double word - преобразование слова в двойное слово. Команда использует только регистры al и ax. Алгоритм работы -анализ знакового бита регистра al:

  • если знаковый бит al=0, то ah=00h;

  • если знаковый бит al=1, то ah=0ffh.

CWDE

Convert Word to Double word Extended - преобразование слова в двойное слово с расширением. Ккоманда использует только регистры ax и eax. Алгоритм работы - анализ знакового бита регистра ax:

  • если знаковый бит ax=0, то установить старшее слово eax=0000h;

  • если знаковый бит ax=1, то установить старшее слово eax=0ffffh.

CDQ

Convert Double word to Quad word

Преобразование двойного слова (EAX) в учетверенное слово (EDX:EAX).

Алгоритм работы: копирование значения старшего бита регистра eax на все биты регистра edx.

Логические операции

Команда

Описание

ANDприемник, источник

logical AND – логическое И.

Побитовая логическая "И". В приемнике бит устанавливается в 1, если отличны от нуля одноименные биты и в источнике, и в приемнике..

TESTприемник, источник

TEST операнд.

Аналогична "AND", но не меняет биты приемника. Используется для проверки ненулевых бит.

OR приемник, источник

logical OR – логическое включающее ИЛИ.

Побитовая логическая "ИЛИ". В приемнике бит устанавливается в 1, если отличны от нуля одноименные биты или в источнике, или в приемнике..

XOR приемник,источник

logical eXclusive OR – логическое исключающее ИЛИ.

Побитовая логическая "иселючающее ИЛИ". В приемнике бит устанавливается в 1, если одноименные биты в источнике и приемнике различны..

NOTисточник

NOT operand – логическое НЕ.

Переключение всех бит (инверсия)..

Сдвиговые операции

Команда

Описание

RCL/RCR dest,src

Циклический сдвиг влево/вправо через бит переноса CF. Src может быть либо CL, либо непосредственный операнд.

ROL/ROR dest,src

Аналогично командам RCL/RCR, но по другому, работает с флагом CF. Флаг не участвует в цикле, но в него попадает бит, перешедший с начала на конец или наоборот.

SAL/SAR dest,src

Сдвиг влево/право. Называется еще арифметическим сдвигом. При сдвиге вправо дублируется старший бит. При сдвиге влево младший бит заполняется нулем. Ушедший бит помещается в CF.

SHL/SHR dest,src

Логический сдвиг влево/вправо. Сдвиг вправо отличается от SAR тем, что и старший бит заполняется нулем.

SHLD/SHRD dest,src,count

Трехоперандные команды сдвига влево/вправо. Первым операндом, как обычно, может быть либо регистр, либо ячейка памяти, вторым операндом должен быть регистр общего назначения, третьим - регистр CL или непосредственный операнд. Суть операции заключается в том, что dest и src в начале объединяются, а потом производится сдвиг на количество бит count. Результат снова помещается вdest.

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