Формат и разновидность команд микропроцессора

Автор: Тлупов З.А.

Все выполняемые микропроцессором операции кодированы в виде двоичных чисел. В современных процессорах CISC (персональные компьютеры) число команд (инструкций) достигает несколько сотен. В общем случае команда имеет следующий формат:

Общий формат команды процессора IntelРисунок 1 – Общий формат команды процессора Intel

Префикс – уточняет или модифицирует действие команды.

Код операции – определяет действие данной команды.

Режим адресации – определяет используемую форму адреса операнда.

Масштаб-индекс-база – расширяет возможности адресации операндов.

Смещение – значение эффективного адреса операнда.

Операнды – указывают данные, над которыми нужно выполнить действие и место, куда надо поместить результат.

Из рисунка 1 видно, что размер команды может меняться от 1 байта до 16 байт.

Способ указания операндов называется способом адресации. От разнообразия способов адресации зависит скорость исполнения команд и эффективность программы. В современных процессорах ПК используется несколько десятков способов адресации. Самыми основными из них можно выделить следующие варианты адресации:

Для удобства программирования используется язык программирования ассемблер (язык низкого уровня). В этом языке командам сопоставляются некие сокращения слов, значащие действие команды. Программа на ассемблере представляет собой текстовый файл команд, оформленный по определенным правилам. Специальная программа транслятор-компилятор переводит текст с ассемблера в машинные коды, и готовить программу для процессора в виде исполняемого файла. Откомпилированные двоично-кодированные программы практически человеком не читаемы. Но используя программы отладчики можно сделать эти файлы читаемыми и просматривать действия этой программы по шагам.

Рассмотрим основные команды микропроцессоров, на примере некоторых базовых команд микропроцессоров ПК (Intel8086) используя язык ассемблер.

Команды пересылки данных:

MOV <приемник>,<источник> - пересылка данных.  Копирование содержимого источника в приемник;

PUSH  <источник>  - запись в стек.   Занесение слова в стек;

POP  <приемник>  - чтение из стека. Чтение слова из стека.

Стек – это область оперативной памяти организованная по принципу «первым вошел - последним вышел». В команде работы со стеком адрес источника или приемника не указывается, он выбирается автоматически и называется верхушкой стековой памяти. Стековые команды характеризуются быстрой записью и считыванием информации в область оперативной памяти.

Арифметические команды:

ADD  <приемник>,<источник> - сложение.   Сложение источника с приемником и запись результата в приемник;

SUB  <приемник>,<источник>  - вычитание.  Вычитает из приемника значение источника и помещает результат в приемник;

CMP <приемник>,<источник> - сравнение. Выполняется сравнение вычитанием источника из приемника. Признаки операции формируются, но значения источника и приемника остаются неизменными.

MUL   <источник> - умножение без знака. Если источник равен одному байту то источник умножается на содержимое регистра AL и результат помещается в AX.  Если же источник равен машинному слову (два байта), то значение источника умножается на содержимое регистра AX и результат помещается в регистровую пару DX:AX;

DIV <источник> - деление без знака. Если источник – байт, то делимое в AX, делитель  в <источник>, целая часть деления в AL, остаток в AH. В случае если источник равен двум байтам, в качестве делителя берется содержимое пары регистров   DX:AX, результат от деления помещается в AX, остаток в DX;

INC <приемник> - инкрементирование. К содержимому приемника прибавляется единица;

DEC <приемник> - декрементирование. Содержимое приемника уменьшается на единицу.

Логические команды:

OR <приемник>,<источник> - логическое сложение. Выполняет поразрядную дизъюнкцию источника и приемника. Результат помещается в приемник;

AND <приемник>,<источник> - логическое умножение. Выполняет поразрядную конъюнкцию источника и приемника. Результат помещается в приемник;

NOT <приемник> - логическое отрицание. Все биты приемника инвертируются.

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

JMP <адрес> - безусловный переход. Выполняет безусловный переход по указанному адресу. Адресом может быть определенная метка в программе или регистр, косвенно указывающий адрес;

J* <метка> - общий формат условной передачи управления. Имеется довольно много условий перехода. Наиболее часто используемые:

JG – переход, если больше;

JNG – переход, если не больше;

JL – переход, если меньше;

JNL – переход если не меньше;

JE – переход если равно;

JZ – переход если ноль.

Команды управления циклами:

LOOP <метка> - повторять до обнуления содержимого счетчика CX. Перед использованием команды LOOP необходимо в СХ занести число повторений. Команда LOOP уменьшает значение регистра CX на единицу и осуществляет переход на метку, если CX не равно нулю.

Команды работы с подпрограммами:

CALL  <адрес> - вызов подпрограммы. Безусловная передача управления подпрограмме. Адресом может быть определенная метка в программе или регистр, косвенно указывающий адрес;

RET – возврат из подпрограммы.

Кроме рассмотренных нами операций, имеются:

 В 32 разрядных процессорах к базовым командам добавляются 32 разрядные команды, а к 64 разрядным процессорам еще добавляются команды работы с 64 битными данными.