Система команд процессора intel

На данный момент в ЭВМ типа IBM РС употребляются более 1000 разных команд. По числу адресов команды делятся на безадресные, одноадресные и двухадресные.

— в безадресных командах процессор не делает каких-либо операций с данными, т.е. с операндами. Команда содержит лишь код операции (КОП) и занимает все 16 разрядов, к примеру,

HLT- останов процессора;

WAIT- ожидание прерываний;

— одноадресные команды содержат КОП и один операнд источника либо приемника (КОП dd, КОП ss), к примеру,

INC AX- инкремент, расширить на единицу, АХ (АХ=: АХ+1);

DEC BX- декремент, уменьшить на единицу, ВХ (ВХ=: ВХ-1);

JMP m1 — переход к команде с меткой (адресом ) m1

— двухадресные команды содержат код операции, операнд источника и операнд приёмника (КОП dd, ss), к примеру,

MOV AX, BX- пересылка содержимого регистра ВХ в регистр АХ.

CMP AX,104 -сравнить содержимое регистра AX с значением 104

ROL BX, 3 — содержимое регистра BX переместить влево на 3 разряда

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

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

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

ADC(Addition with Carry) — Сложение с переносом

Метод работы:

  • сложить два операнда;
  • поместить итог в первоначальный операнд: приемник = приемник+источник;
  • в зависимости от результата установить знамёна.

ADD(ADDition) — Сложение

Метод работы:

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

AND(logical AND) — Логическое И

Метод работы:

  • выполнить операцию логического умножения над операндами приёмник и источник: любой бит результата равен 1, в случае если соответствующие биты операндов равны 1, в остальных случаях бит результата равен 0;
  • записать итог операции в приемник;
  • установить знамёна.

BT(Bit Test) — Проверка битов

Метод работы:

  • взять бит по указанному номеру позиции в операнде источник;
  • установить флаг в соответствии с значению этого бита.

CALL(CALL) — Вызов процедуры либо задачи

Метод работы:

  • в стек заносится содержимое указателя команд ip и в данный же регистр загружается новое значение адреса, соответствующее метке;
  • r16 либо m16 — определяют регистр либо ячейку памяти, которые содержат смещения в текущем сегменте команд, куда передается управление. При передаче управления в стек заносится содержимое указателя команд ip;

CMP(CoMPare operands) — Сравнение операндов

Метод работы:

  • выполнить вычитание (операнд1-операнд2);
  • в зависимости от результата установить знамёна, операнд1 и операнд2 не изменять (другими словами итог не запоминать).

DEC (DECrement operand by 1) — Уменьшение операнда на единицу

Метод работы: команда вычитает 1 из операнда.

DIV(DIVide unsigned) — Деление беззнаковое

Метод работы:

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

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

HLT(HaLT) — Остановка

Метод работы: перевод процессора в состояние остановки.

IN (INput operand from port) -Ввод операнда из порта

Метод работы:

Передает байт, слово из порта ввода-вывода в один из регистров al/ax.

INC(INCrement operand by 1) -Увеличить операнд на 1

Метод работы: команда увеличивает операнд на единицу.

INT(INTerrupt) — Вызов подпрограммы обслуживания прерывания

Метод работы:

  • записать в стек регистр знамён flags и адрес возврата. При записи адреса возврата сначала записывается содержимое сегментного регистра cs, после этого содержимое указателя команд ip;
  • скинуть в ноль знамёна i и t;
  • передать управление на программу обработки прерывания с указанным номером. Механизм передачи управления зависит от режима работы процессора.

JCC (Jump if condition) — Переход, в случае если выполнено условие

Метод работы:

Проверка состояния знамён в зависимости от кода операции (оно отражает контролируемое условие):

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

Команды условного перехода комфортно использовать для проверки разных условий, появляющихся на протяжении исполнения программы. Как мы знаем, многие команды формируют показатели результатов собственной работы в регистре flags. Это событие и употребляется командами условного перехода для работы. Ниже приведены список команд условного перехода, разбираемые ими знамёна и соответствующие им логические условия перехода.

Команда Условие перехода
JA в случае если выше
JAE в случае если выше либо равняется
JB в случае если ниже
JBE в случае если ниже либо равняется
JC в случае если перенос
JZ в случае если 0
JG в случае если больше
JGE в случае если больше либо равняется
JL в случае если меньше
JLE в случае если меньше либо равняется
JNA если не выше
JNAE если не выше либо равняется
JNB если не ниже
JNBE если не ниже либо равняется
JNC в случае если нет переноса
JNE если не равняется
JNG если не больше
JNGE если не больше либо равняется
JNL если не меньше
JNLE если не меньше либо равняется
JNO в случае если нет переполнения
JNP в случае если количество единичных битов результата нечетно (нечетный паритет)
JNS в случае если символ плюс (знаковый (старший) бит результата равен 0)
JNZ в случае если нет нуля
JO в случае если переполнение
JP в случае если количество единичных битов результата четно (четный паритет)
JPE то же, что и JP, то имеется четный паритет
JPO то же, что и JNP
JS в случае если символ минус (знаковый (старший) бит результата равен 1)
JZ в случае если ноль

Логические условия больше и меньше относятся к сравнениям целочисленных значений со знаком, а выше и ниже — к сравнениям целочисленных значений без символа. В случае если пристально взглянуть, то у большинства команд возможно подметить однообразные значения знамён для перехода. Это разъясняется наличием нескольких обстановок, каковые смогут привести к одинаковому состоянию знамён. В этом случае с целью удобства ассемблер допускает пара разных мнемонических обозначений одной и той же машинной команды условного перехода. Эти команды ассемблера по действию полностью равнозначны, поскольку это одинаковая машинная команда. Для реализации межсегментных переходов нужно комбинировать команды условного перехода и команду абсолютного перехода jmp. Наряду с этим возможно воспользоваться тем, что фактически все команды условного перехода парные, другими словами имеют команды, контролирующие обратные условия.

JMP(JuMP) — Переход абсолютный

Метод работы:

Команда jmp в зависимости от типа собственного операнда изменяет содержимое или лишь одного регистра ip, или обоих регистров не и ip:

  • в случае если операнд в команде jmp — метка в текущем сегменте команд (a8, 16), то ассемблер формирует машинную команду, операнд которой есть значением со знаком, являющимся смещением перехода довольно следующей за jmp команды. Наряду с этим виде перехода изменяется лишь регистр ip;
  • в случае если операнд в команде jmp — символический идентификатор ячейки памяти, то ассемблер предполагает, что в ней находится адрес, по которому нужно передать управление. Данный адрес возможно трех видов:

-значением безотносительного смещения метки перехода относительно начала сегмента кода;

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

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

Для понимания различий механизмов перехода в настоящем и защищенном режимах необходимо не забывать следующее. В настоящем режиме процессор cs и ip в соответствии с содержимым указателя в памяти. В защищенном режиме процессор предварительно разбирает байт прав доступа AR в дескрипторе, номер которого определяется по содержимому сегментной части указателя. В зависимости от состояния байта AR процессор делает или переход, или переключение задач.

LOOP (LOOP control by register cx) — Управление циклом по cx

Метод работы:

  • выполнить декремент содержимого регистра cx;
  • анализ регистра cx:
  • в случае если cx=0, передать управление следующей за loop команде;
  • в случае если cx=1, передать управление команде, метка которой указана в качестве операнда loop.

MOV(MOVe operand) — Пересылка операнда

Метод работы: копирование второго операнда в первоначальный операнд.

MUL(MULtiply) — Умножение целочисленное не учитывая символа

Метод работы:

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

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

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

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

NEG(NEGate operand) — Поменять символ операнда

Метод работы:

  • выполнить вычитание (0 – источник) и поместить итог на место источника;
  • в случае если источник=0, то его значение не изменяется.

NOP (No OPeration) — Нет операции

Метод работы: не создаёт никаких действий.

NOT(NOT operand) — Инвертирование операнда

Метод работы: инвертировать все биты операнда источника: из 1 в 0, из 0 в 1.

OR (logical OR) — Логическое включающее Либо

Метод работы:

  • выполнить операцию логического Либо над битами операнда назначения, применяя в качестве маски второй операнд — маска. Наряду с этим бит результата равен 0, в случае если соответствующие биты операндов назначения и маска равны 0, в другом случае бит равен 1;
  • записать итог операции в источник (операнд маска остается неизменным);
  • установить знамёна.

OUT(OUT operand to port) -Вывод операнда в порт

Метод работы:

Передать байт, слово, из регистра al/ax в порт, номер которого определяется первым операндом.

POP (POP operand from the stack) — Извлечение операнда из стека

Метод работы:

  • загрузить в приемник содержимое вершины стека (адресуется парой ss:sp);
  • расширить содержимое sp на 2 байта для use16.

PUSH (PUSH operand onto stack) — Размещение операнда в стеке

Метод работы:

  • уменьшить значение указателя стека sp на 2 ;
  • записать источник в вершину стека (адресуемую парой ss:sp).

RCL (Rotate operand through Carry flag Left) — Циклический сдвиг операнда влево через флаг переноса.

Метод работы:

  • сдвиг всех битов операнда влево на один разряд, наряду с этим старший бит операнда делается значением флага переноса c;
  • в один момент старое значение флага переноса c вдвигается в операнд справа и делается значением младшего бита операнда;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда команды rcl.

RCR (Rotate operand through Carry flag Right) — Циклический сдвиг операнда вправо через флаг переноса.

Метод работы:

  • сдвиг всех битов операнда вправо на один разряд; наряду с этим младший бит операнда делается значением флага переноса c;
  • в один момент старое значение флага переноса — в операнд слева и делается значением старшего бита операнда;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда команды rcr.

RET(RETurn from procedure)Возврат из процедуры

Метод работы: вернуть из стека содержимое ip;

ROL(Rotate operand Left) — Циклический сдвиг операнда влево

Метод работы:

  • сдвиг всех битов операнда влево на один разряд, наряду с этим старший бит операнда вдвигается в операнд справа и делается значением младшего бита операнда;
  • в один момент выдвигаемый бит делается значением флага переноса c;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

ROR- Циклический сдвиг операнда вправо. ASCII-коррекция по окончании сложения

Метод работы:

  • сдвиг всех битов операнда вправо на один разряд, наряду с этим младший бит операнда вдвигается в операнд слева и делается значением старшего бита операнда;
  • в один момент данный младший бит операнда делается значением флага переноса c;
  • старое значение флага переноса c вдвигается в операнд слева и делается значением старшего бита операнда;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

SAL (Shift Arithmetic operand Left) — Сдвиг арифметический операнда влево.

Метод работы:

  • сдвиг всех битов операнда влево на один разряд, наряду с этим выдвигаемый слева бит делается значением флага переноса c;
  • в один момент справа в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

SAR (Shift Arithmetic operand Right) — Сдвиг арифметический операнда вправо.

Метод работы:

  • сдвиг всех битов операнда вправо на один разряд, наряду с этим выдвигаемый справа бит делается значением флага переноса c;
  • в один момент слева в операнд вдвигается не нулевой бит, а значение старшего бита операнда, другими словами по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда. По данной причине данный тип сдвига и именуется арифметическим;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

SBB(SuBtract with Borrow) -Вычитание с заемом.

Метод работы:

  • выполнить сложение операнд_2=операнд_2+(c);
  • выполнить вычитание операнд_1=операнд_1-операнд_2;

SHL (SHift logical Left) — Сдвиг логический операнда влево.

Метод работы:

  • сдвиг всех битов операнда влево на один разряд, наряду с этим выдвигаемый слева бит делается значением флага переноса c;
  • в один момент слева в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

SHR — Сдвиг логический операнда вправо. ASCII-коррекция по окончании сложения

Метод работы:

  • сдвиг всех битов операнда вправо на один разряд; наряду с этим выдвигаемый справа бит делается значением флага переноса c;
  • в один момент слева в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

SUB(SUBtract) — Вычитание.

Метод работы:

  • выполнить вычитание операнд_1=операнд_2-операнд_1;
  • установить знамёна.

TEST(TEST operand) -Логическое И.

Метод работы:

  • выполнить операцию логического умножения над операндами источник и приёмник: бит результата равен 1, в случае если соответствующие биты операндов равны 1, в остальных случаях бит результата равен 0; Итог отражен во флаге ZF
  • установить знамёна.

XOR- Логическое исключающее Либо. ASCII-коррекция по окончании сложения

Метод работы:

  • выполнить операцию логического исключающего Либо над операндами: бит результата равен 1, в случае если значения соответствующих битов операндов разны, в остальных случаях бит результата равен 0;
  • записать итог сложения в приемник;
  • установить знамёна.

Литература

1.В.Юров Ассемблер, Питер, 2001.

2.Мартыничев А.К. ПО компьютерных совокупностей управления оборудованием, Чебоксары, 2010.

3.Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT, AT :пер. с англ. М.: статистика и Финансы,1992. 544 с.: ил.

Лекция 2: Совокупность команд


Также читать:

Понравилась статья? Поделиться с друзьями: