Система команд процессора 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, либо обоих регистров cs и 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 с.: ил.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: