На следующем рисунке схематически показана эволюция системы команд процессоров фирмы Intel.
Ее основу образует базовая система команд первого процессора 8086, которая не изменилась при смене поколений процессоров. В следующем процессоре 80186 было добавлено несколько новых команд. Система команд процессора 80286 расширена путем введения новых команд для аппаратной поддержки функций операционной системы по управлению памятью, средствам защиты и переключению задач. Эти команды предназначены для системных программистов и редко применяются в прикладных программах. В процессорах 80386 и i486 система команд усовершенствована по следующим направлениям:
Рассмотрим лишь некоторые команды. Выделяют следующие группы команд:
1. команды передачи данных;
2. преобразования данных;
3. арифметические;
4. логические и сдвиги;
5. команды передачи управления;
6. команды управления МП;
7. цепочечные команды.
Отличительной особенностью команд передач данных заключается в том, что они не модифицируют состояния флажков.
Подгруппы:
§ команды общих передач;
§ стековые команды;
§ команды ввода/вывода.
а) Пересылают данные из одного места в другое.
Отличительная особенность: не влияют на состояние флажков.
MOV dst, src ; dst ¬ (src)
Может передавать что угодно и куда угодно.
В МП 8086 есть исключения:
1) нельзя передавать const в сегмент регистр;
2) нельзя передавать из ячейки памяти в ячейку памяти.
Допускают любой режим адресации.
б) Команды обмена
XCHG dst, src; (dst) « (src)
Стек – это область оперативной памяти, которая находится в текущем сегменте стека и предназначена для временного хранения любых данных. Запись и чтение данных в стеке основаны на принципе LIFO «первый пришел – последний ушел». Для этих целей обычно отводится участок памяти с наибольшими адресами, а стек расширяется в сторону уменьшения адресов. Поскольку обычно программа загружается, начиная с меньших адресов, такой прием во многих случаях позволяет избежать перекрытия областей программы и стека. Начало сегмента стека определяет сегментный регистр SS, а регистр SP адресует вершину стека. В указатель вершины стека (SP) предварительно помещается наибольший адрес области основной памяти, отведенной под стек. Далее указатель вершины стека SP используется для хранения адреса последнего члена последовательности (вершины стека), записанного в стек.
а) включение (загрузка) в стек: PUSHsrc ; SS:SP ¬ (src)
§ модификация SP: SP ¬ SP - 2;
§ включение в новую вершину стека.
При операциях загрузки стек растет по направлению младших адресов сегмента стека. Другими словами, стек растет по направлению к базовому адресу сегмента стека.
б) извлечение (считывание) из стека: POPdst ; dst¬ (SS:SP)
§ извлечение из вершины стека
§ модификация SP: SP ¬ SP + 2
Эти операции поясняются следующим рисунком:
а) Ввод из порта : IN acc, port;
acc – аккумулятор (AX или AL);
port – адрес порта (0-255).Осуществляется передача байта или слова из порта ввода-вывода в аккумулятор.
INacc, DX;
Передача байта или слова в аккумулятор из порта ввода-вывода, адрес которого находится в DX. Этот режим позволяет адресовать до 65536 портов.
б) Вывод в порт : OUT port, acc;
Байт или слово передается в порт ввода-вывода из аккумулятора (AX, AL).
OUT DX, acc;
Байт или слово из аккумулятора (AX, AL) передается в порт ввода-вывода, адрес которого указан в DX.
При выполнении арифметических команд по результату модифицируются все арифметические флажки:
CF |
– перенос; |
AF |
– межтетрадный перенос; |
ZF |
– нулевой результат; |
SF |
– знак результата; |
OF |
– переполнение; |
PF |
– четное число единиц младшего байта результата. |
а) Сложение
ADD dst, src ; dst ¬ (dst) + (src)
б) Сложение с переносом
ADC dst, src ; dst ¬ (dst) + (src) + (CF)
в) Инкремент
INC src ; src ¬ (src) + 1
Эта команда не изменяет флажка ZF.
г) Вычитание
SUB dst, src ; dst ¬ (dst) - (src)
д) Вычитание с заёмом
SBB dst, src ; dst ¬ (dst) - (src) – (CF)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.