- •Тема 4 Программная модель микропроцессоров архитектуры ia-32
- •1. Особенности архитектуры ia-32
- •2. Структура микропроцессоров ia-32
- •3. Регистры
- •4. Формат команды микропроцессора ia-32
- •5. Типы данных
- •6. Пространство памяти
- •7. Режимы адресации
- •8. Система команд
- •8.1. Инструкции пересылки данных
- •8.2. Инструкции двоичной арифметики
- •8.3. Инструкции десятичной арифметики
- •8.4. Инструкции логических операций
- •8.5. Инструкции сдвигов
- •8.6. Инструкции обработки бит и байт
- •8.7. Инструкции передачи управления
- •8.8. Инструкции строковых операций
- •8.9. Инструкции работы с флагами
- •8.10. Инструкции загрузки указателей
- •8.11. Разные инструкции
8. Система команд
Система команд 32–разрядных процессоров является существенно расширенной системой команд 8086/80286. Расширения касаются увеличения разрядности адресов и операндов, более гибкой системы адресации, появления принципиально новых типов данных и команд.
Команды содержат одно- или двухбайтный код инструкции, за которым могут следовать несколько байт, определяющих режим исполнения команды и операнды. Команды могут использовать до трех операндов или не использовать ни одного. Результат выполнения записывается в место, предопределенное инструкцией, или (и) в место, заданное операндом назначения. Операнды могут находиться в памяти, регистрах процессора или непосредственно в команде. Для 32–разрядных процессоров разрядность «слова» по умолчанию может составлять 32 бит, а не 16. Это распространяется на многие инструкции, включая и строковые. Перед любой инструкцией может быть использован префикс переключения разрядности адреса или слова. При адресации памяти использование сегментного регистра, предусмотренного командой, в ряде инструкций может подавляться префиксом изменения сегмента. Назначение префиксов приведено в таблице 8.1. Префиксы могут использоваться в любом сочетании (не более одного из каждой группы), их действие распространяется только на одну инструкцию.
Таблица 8.1
Префикс |
Назначение |
SIZ |
Изменение разрядности слова данных (386+) |
ADDRSIZ |
Изменение разрядности адреса (386+) |
CS: SS: DS: ES: FS: GS: |
Изменение используемого сегментного регистра (FS: и GS: только для 386+) |
LOCK |
Захват локальной шины на время выполнения инструкции |
REP REPE/REPZ REPNE/REPNZ |
Префиксы повтора строковых операций до обнуления CX (CX – декрементируется на каждом повторе) |
При рассмотрении системы команд, будут использованы следующие условные обозначения:
reg – 16/32–битный регистр;
Sreg – сегментный регистр;
mem – 16/32–битная ячейка памяти;
r8, r16, r32 – только 8–, 16– или 32–битный регистр;
m8, m16, m32, m64 – только 8–, 16–, 32– или 64–битная ячейка памяти, адресуемая регистрами;
r/m – 8/16/32–битный регистр или ячейка памяти, адресуемая регистрами процессора;
i – непосредственный операнд 8, 16, 32 или 64 бит;
i8, i16 – непосредственный операнд 8, 16 бит;
r/m/i – 8/16/32–битный регистр или ячейка памяти, адресуемая регистрами процессора, или непосредственный операнд;
moffs8, moffs16, moffs32 – 8–, 16– или 32–битная ячейка, адресуемая в команде (не через регистры процессора);
ptr16:16, ptr16:32 – операнд–указатель: 16–битный сегмент и 16/32–битное смещение;
m16:16, m16:32 – ячейка памяти, содержащая указатель;
rel8, rel16, rel32 – смещение короткое (127 байт) или ближнее внутри сегмента кода относительно адреса следующей инструкции;
st(i) – регистр стека FPU, смещенный от верхушки на i;
m80bcd – упакованное 10–байтное двоично–десятичное число в памяти, используемое FPU;
m16int, m32int, m64int – целочисленные значения в памяти, используемое FPU;
m32real, m64real, m80real – вещественные числа в памяти, используемые FPU;
m94/108byte – образ регистров FPU в памяти, включая стек;
m14/28byte – образ состояния FPU в памяти;
m16&32 – 6–байтная структура в памяти (GDT – Global Descriptor Table и IDT).
Операнд назначения в списке параметров команды всегда стоит первым, во многих случаях он может одновременно являться и одним из операндов–источников.