
- •Замковец с.В. Левин н.А. Попкова е.Я. Архитетура микропроцессоров
- •Удк 681.3.06
- •Классификация микропроцессоров по архитектуре
- •Архитектура микропроцессоров 80х86
- •2.1. Используемые типы данных
- •2.2. Регистры микропроцессоров
- •2.3. Режимы адресации
- •2.4. Управление стеками
- •2.5. Сегментная организация памяти
- •Система команд микропроцессоров
- •3.2.Команды передачи данных
- •Команды двоичной арифметики
- •Команды десятичной арифметики
- •Логические команды
- •Команды сдвигов
- •Команды обработки бит и байт
- •Команды обработки цепочек
- •Команды передачи управления
- •3.9.1. Команды условных переходов
- •3.9.2 Команды безусловных переходов
- •3.9.3 Команды вызова подпрограмм
- •3.9.4 Команды возврата из подпрограмм
- •4. Прерывания
- •4.1. Прерывания в реальном режиме
- •Защита по привилегиям
- •5.1. Определение уровней привилегий
- •Вычисления с плавающей запятой
- •6.1. Форматы чисел с плавающей запятой
- •6.3. Регистры сопроцессора
- •Mmx архитектура
- •7.1. Форматы представления данных
- •7.2. Арифметика с насыщением
- •7.3. Mmx регистры
- •7.4. Система команд mmx
- •1. Классификация микропроцессоров по архитектуре ... 8
- •2. Архитектура микропроцессоров 80х86 ………………...10
Система команд микропроцессоров
СЕМЕЙСТВА INTEL
Поскольку микропроцессоры семейства Intel относятся к классу CISC, то рассматриваемая система команд является достаточно сложной и насчитывает большое количество инструкций. Необходимо отметить, что в целях обеспечения совместимости с ранее написанным программным обеспечением все последующие модели микропроцессоров включают в себя и первоначальную систему команд.
Формат команд
Все команды микропроцессора имеют общий формат, который состоит из префиксов, кода операций, спецификатора адреса (он содержит байт ModR/M и байт SIB), смещения и непосредственных данных. Конечно, не все команды имеют указанные атрибуты, поскольку эти команды отличаются большим разнообразием и некоторые из них могут состоять только из одного байта – кода операции, а другие могут содержать все указанные поля.
Префикс – это байт со специальным кодированием, который модифицирует выполнение одной, находящейся за ним команды. Всего имеется четыре префикса, которые используются для следующего:
префикс повторения REP (REPeate) используется в цепочечных командах для автоматической обработки всех элементов цепочки;
- префикс изменения размера операнда переключает 16- и 32-разрядные операнды;
префикс изменения размера адреса коммутирует формирование 16- и 32-разрядных адресов;
префикс замены сегмента определяет сегментный регистр для данной команды вместо сегментного регистра, принимаемого по умолчанию.
Префиксные байты могут располагаться в любом порядке перед кодом операции. Код операции состоит из одного или двух байт и он определяет то действие, выполнение которого инициирует команда.
За кодом операции располагаются байты ModR/M и SIB, которые определяют режим адресации, т.е. место расположения используемых в данной команде операндов. Наконец, за этими байтами располагаются 1, 2 или 4 байта, определяющие смещение при использовании прямой адресации, и затем располагаются 1, 2 или 4 байта, задаюшие непосредственный операнд.
При описании команд микропроцессора будут использованы следующие обозначения:
reg8, reg16, reg32 – 8-, 16- или 32-разрядный регистр общего назначения;
mem8, mem16 или mem32 - 8-, 16- или 32-разрядная ячейка памяти;
sreg - сегментный регистр;
imm8, imm16 или imm32 - 8-, 16- или 32-разрядный непосредственный операнд;
r/m - регистр или ячейка памяти;
src - источник;
dst - приемник.
Если не указана разрядность используемых регистров, ячеек памяти или непосредственных операндов, то может быть использована любая из представленных разрядностей.
3.2.Команды передачи данных
Команды этой самой обширной группы предназначены для пересылки байт, слов или двойных слов из памяти в регистр, из регистра в память или из регистра в регистр. Эти команды целесообразно разделить на следующие подгруппы:
общие передачи данных;
преобразования данных;
передачи данных с привлечением стека;
передачи адресных объектов;
передачи ввода-вывода;
флажковые передачи;
команды передачи данных, появившиеся в микропроцессорах, начиная с 80386.
Наиболее мощной среди команд общей передачи данных является команда MOV, которая имеет следующее общее представление:
mov dst, src dst (src)
В результате выполнения команды mov содержимое источника передается в приемник. Ниже представлены допустимые форматы этой команды:
mov reg, imm ; загрузка константы в регистр
mov reg/mem, imm ; загрузка константы в регистр или
память
mov reg/mem, reg ; передача из регистра в регистр или
память
mov reg, reg/mem ; передача из памяти или регистра в
регистр
mov sreg, reg/mem16 ; загрузка сегментного регистра из
регистра или памяти
mov reg/mem16, sreg ; сохранение сегментного регистра.
В эту же подгруппу входит команда обмена XCHG:
xchg dst, src (dst)(src)
и имеется два формата этой команды:
xchg reg, mem/reg
xchg mem/reg, reg.
Эта команда осуществляет обмен содержимого источника и приемника.
В подгруппу преобразования входит однобайтная команда XLAT, при помощи которой осуществляется преобразование данных. При выполнении этой команды содержимое регистра AL используется как индекс таблицы, адресуемой регистром EBX в сегменте данных. Выполнение команды XLAT состоит из двух действий:
прибавить содержимое регистра AL к содержимому регистра EBX;
использовать результат как смещение в сегменте данных и поместить адресуемый байт из памяти в регистр AL.
В подгруппу команд стековой передачи относятся следующие команды:
команда PUSH reg/mem16 - помещение в стек слова из регистра или памяти;
команда PUSH reg/mem32 - помещение в стек двойного слова из регистра или памяти;
команда PUSHA - помещение в стек всех 16-разрядных регистров;
команда PUSHAD - помещение в стек всех 32-разрядных регистров;
команда PUSH imm16/32 - помещение в стек непосредственного операнда слова или двойного слова;
команда POP reg/mem16 - извлечение из стека слова в регистр или память;
команда POP reg/mem32 - извлечение из стека двойного слова в регистр или память;
команда POPA - извлечение из стека данных и занесение их во все 16-разрядные регистры;
команда POPAD - извлечение из стека данных и занесение их во все 32-разрядные регистры;
команда POP sreg - извлечение из стека слова и помещение его в сегментный регистр (кроме сегментного регистра CS).
Команды передачи адресных объектов отличаются от других команд передачи тем, что при их выполнении в адресуемый регистр загружаются не данные, а адреса. Основное применение таких команд связано с инициализацией регистров-указателей при адресации структур данных в памяти.
Команда загрузки эффективного адреса LEA имеет следующие применяемые форматы:
lea reg16, mem16
lea reg32, mem16
lea reg16, mem32
lea reg32, mem32.
При выполнении этой команды вычисляется адрес памяти (т.е. смещение в сегменте) и этот адрес загружается в регистр.
Пять команд LDS, LES, LFS, LGS и LSS имеют одинаковый формат:
Lsreg reg16, mem32
Lsreg reg32, mem48
и предназначены для одновременной загрузки в любой регистр общего назначения и один из сегментных регистров полного указателя селектор:смещение.
Команды IN ввода и OUT вывода предназначены для обращения к портам, расположенным в адресном пространстве ввода-вывода. Эти команды имеют следующие форматы:
in acc, port ; ввод из фиксированного порта
in acc, dx ; ввод из переменного порта
out port, acc ; вывод в фиксированный порт
out dx, acc ; вывод в переменный порт.
В этих форматах acc обозначает аккумулятор, т.е. регистр EAX/AX/AL, а port – 8-разрядное непосредственное значение, которое считается адресом порта и при выполнении команды расширяется нулем до 16 бит. При использовании в команде регистра DX 16-разрядный адрес порта берется из этого регистра.
Подгруппа команд флажковых передач содержит несколько команд, которые обеспечивают доступ к флагам процессора.
Команда LAHF загрузки флагов в регистр AH копирует младший байт регистра EFLAGS в регистр AH, в котором флаги можно изменить или сохранить. Команда SAHF передает содержимое регистра AH в младший байт регистра EFLAGS.
Две команды PUSHF(D) и POPF(D) используются для включения в стек и извлечения из стека содержимого регистра EFLAGS/FLAGS.
В моделях микропроцессоров, начиная с 80386, появилось некоторое количество новых команд, относящихся к этой же группе. Команда MOVSX передает 8-разрядный источник в 16- или 32-разрядный приемник или 16-разрядный источник в 32-разрядный приемник с дублированием старшего знакового разряда в старшие разряды приемника. В качестве источника может быть указан операнд, находящийся в регистре или в памяти с любым режимом адресации, а приемником может быть только регистр общего назначения.
Команда MOVZX полностью аналогична команде MOVSX, но она дублирует в старшие разряды приемника нули. Команды CBW и CWDE похожи на команду MOVSX, однако они выполняются только на регистре EAX: команда CBW преобразует байт AL в слово AX, а команда CWDE преобразует слово AX в двойное слово EAX путем расширения знакового разряда.
Команда CWD осуществляет преобразование слова, находящегося в регистре AX в двойное слово, которое располагается в регистрах DX:AX, путем расширения знака, и таким же образом команда CDQ преобразует двойное слово, находящееся в регистре EAX, в учетверенное слово, которое располагается в регистрах EDX:EAX.
Команда SETcc предназначена для того, чтобы сохранить зафиксированное флагами условие для дальнейших вычислений. Эта команда имеет следующий общий формат:
SETcc reg/mem8.
Если проверяемое в команде условие выполняется, то в байт reg/mem8 записывается код 01H, а если условие не выполняется – код 00H. Условие, задаваемое в мнемонике команды (cc), полностью соответствует условиям, представленным в командах условного перехода.
В микропроцессорах шестого поколения появились команды условных передач, при которых передача осуществляется только при выполнении условий, заданных флагами. Общий формат этих команд выглядит следующим образом:
CMOVcc reg, reg/mem.
Выполнение этих команд заключается в том, что при выполнении указанных в команде условий осуществляется пересылка содержимого регистра или памяти в регистр.
При выполнении команды BSWAP r32 осуществляется перестановка байт: в указанном регистре меняются местами первый байт с четвертым, а второй с третьим.
Команда CMPXCHG r/m,r сравнения и обмена использует три операнда: операнд-источник в регистре, операнд-приемник в памяти и аккумулятор (т.е. регистр AL, AX или EAX в зависимости от размера операнда). Если значения в операнде-приемнике и аккумуляторе равны, то операнд-приемник заменяется операндом-источником. В противном случае исходное значение операнда-приемника загружается в аккумулятор.
Необходимо отметить, что команды передачи данных не изменяют значения арифметических флагов (за некоторым исключением).