2.3.5 Команды с регистровыми операндами
В командах, в которых используются только регистровые операнды, значение байта Mod R/M определяет имена регистров, как показано в таблице 2.8. Значение нулевого бита байта кода операции определяет, какие регистры (8- или 16-разрядные) используются в команде. Если бит равен 1, используются 16-разрядные регистры, а если 0, то 8-разрядные.
Таблица 2.8. Кодирование регистров в поле Mod R/M
R/M | Регистр | R/M | Регистр |
000 | AX или AL | 100 | SP или AH |
001 | CX или CL | 101 | BP или CH |
010 | DX или DL | 110 | SI или DH |
011 | BX или BL | 111 | DI или BH |
В качестве примера давайте выполним ассемблирование команды PUSH CX. Машинный код команды, помещающей в стек 16-разрядный регистр, выглядит так: 50h + rw, где rw обозначает код регистра (число 0—7), который добавляется к базовому коду операции 50h. Поскольку код регистра СХ равен 1, машинный код команды PUSH СХ равен 51h.
Ассемблирование других регистровых команд, особенно тех, у которых 2 операнда, выполняется чуть сложнее. Например, машинный код команды MOV АХ, ВХ равен 89D8. В системе команд процессоров Intel команда MOV, пересылающая 16-разрядный операнд из регистра в другой регистр или память, кодируется как 89h /r, где /r означает, что за байтом кода операции следует байт Mod R/M. Он состоит из трех полей: mod, reg и r/m. Например, в таблице 2.9 показана расшифровка полей байта Mod R/M, равного D8.
Табл. 2.9. Расшифровка полей байта mod r/m
mod | reg | r/m |
11 | 011 | 000 |
В битах 6-7 байта Mod R/M хранится значение поля mod, которое определяет режим адресации, используемый в команде. Значение 11 говорит о том, что оба операнда являются регистрами.
В битах 3-5 находится поле reg, значение которого определяет исходный операнд команды. В нашем случае значение 011 говорит о том, что в качестве исходного операнда используется регистр BX.
В битах 0-2 находится поле r/m, значение которого определяет второй операнд команды - приёмника данных. В нашем примере там находится код 000, что соответствует регистру АХ.
В таблице 2.10 показано несколько примеров команд, в которых используются 8- и 16-разрядные регистровые операнды.
Табл. 2.10. Примеры кодирования команд mov с регистровыми операндами
Команда | opcode | mod | reg | r/m |
mov ax, dx | 8B | 11 | 000 | 010 |
mov al, dl | 8A | 11 | 000 | 010 |
mov cx, dx | 8B | 11 | 001 | 010 |
mov cl, dl | 8A | 11 | 001 | 010 |
2.3.6 Префикс изменения размера операнда в процессорах IA-32
В машинном коде, сгенерированном для процессоров семейства IA‑32, приходится часто использовать префикс размера операнда (66h), который изменяет принятые по умолчанию размеры операндов текущей команды. Чтобы изучить как он работает, давайте попытаемся выполнить ассемблирование приведенной в таблице 2.10 последовательности команд с помощью компилятора MASM. В начале фрагмента поместим директиву выбора типа процессора .286, чтобы компилятор гарантированно не использовал в командах 32-разрядные регистры. Рядом с каждой командой MOV приведен ее машинный код:
.model small
.286
.stack 100h
.code
main PROC
mov ax, dx ; 8В С2
mov al, dl ; 8A C2
mov cx, dx ; 8B CA
mov cl, dl ; 8A CA
А теперь выполним ассемблирование той же последовательности команд MOV, для случая 32‑битных операндов. В первой команде mov eax, edx префикс изменения размера операнда не требуется, тогда как во второй mov ax, dx – он просто необходим:
.model small
.386
.stack 100h
.code
main PROC
mov eax, edx ; 8В С2
mov ax, dx ; 66 8В С2
mov al, dl ; 8A C2
mov ecx, edx ; 8B CA
mov cx, dx ; 66 8B CA
mov cl, dl ; 8A CA
Обратите внимание, что при использовании 8-разрядных операндов префикс изменения размера не требуется. И, наконец, хочется отметить, что машинный код нашего примера, генерируемый компилятором, одинаков как для реального режима адресации, так и для защищенного.
- Предисловие
- Глава 1. Общие сведения о микропроцессорах
- 1.1 Классификация микропроцессоров
- 1.2 Характеристики микропроцессоров
- 1.2.1 Тактовая частота
- 1.2.2 Архитектура процессора
- 1.2.3 Технологический процесс производства
- 1.2.4 Частота системной шины
- 1.2.5 Размер кэша
- 1.3 Типы архитектур микропроцессоров
- 1.4 Структурная схема микропроцессоров
- 1.4.1 Микропроцессор Фон-Неймана
- 1.4.2 Конвейер
- 1.4.3 Зависимость между частотой и количеством ступеней конвейера
- 1.5 Представление информации в эвм
- 1.5.1 Двоичное представление целых чисел
- 1.5.2 Представление символьной информации
- Глава 2. Архитектура микропроцессоров ia-32
- 2.1 Состав и функции регистров
- 2.1.1 Основные регистры
- 2.1.2 Регистры дополнительных функциональных модулей
- 2.2 Типы адресации
- 2.3 Система команд
- 2.3.1 Классификация команд
- 2.3.2 Формат команды
- 2.3.3 Однобайтовые команды
- 2.3.4 Непосредственно заданные операнды
- 2.3.5 Команды с регистровыми операндами
- 2.3.7 Команды с операндами, расположенными в памяти
- Глава 3. Организация многоуровневой памяти
- 3.1 Принцип построения многоуровневой памяти
- 3.2 Организация кэш-памяти
- 3.3 Протоколы когерентности памяти микропроцессоров
- 3.4 Страничная организация памяти
- Глава 4. Режимы работы процессоров ia-32
- 4.1 Обзор режимов работы
- 4.2 Реальный режим адресации
- 4.3 Защищённый режим
- 4.3.1 Дескрипторные таблицы
- 4.3.2 Дескрипторные регистры
- 4.3.3 Дескриптор
- 4.3.4 Односегментная модель памяти
- 4.3.5 Многосегментная модель памяти
- Глава 5. Страничная организация памяти в процессорах ia‑32
- 5.1 Каталог страниц
- 5.2 Таблица страниц
- 5.3 Страничная переадресация
- 5.4 Диспетчер виртуальных машин системы Microsoft Windows
- Глава 6. Архитектура процессоров с параллелизмом уровня команд
- 6.1 Подходы к использованию ресурса транзисторов в микропроцессорах
- 6.2 Суперскалярные процессоры и процессоры с длинным командным словом
- 6.3 Зависимости между командами, препятствующие их параллельному исполнению
- 6.4 Предварительная выборка команд и предсказание переходов
- 6.5 Условное выполнение команд в vliw-процессорах
- 6.6 Декодирование команд, переименование ресурсов и диспетчеризация
- 6.7 Исполнение команд
- 6.8 Завершение выполнения команды
- 6.9 Направления развития архитектуры процессоров с параллелизмом уровня команд
- Глава 7. Мультитредовые микропроцессоры
- 7.1 Основы мультитредовой архитектуры
- 7.2 Выявление тредов
- 7.3 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков управления программы
- 7.3.1 Мультитредовая модель выполнения программы
- 7.3.2 Мультитредовые программы
- 7.3.3 Аппаратные средства мультитредовой архитектуры
- 7.3.4 Преимущества мультитредовой архитектуры
- 7.4 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков данных программы
- 7.5 Специфика мультитредовых моделей распараллеливания
- Глава 8. Модуль обработки вещественных чисел
- 8.1 Представление чисел с плавающей запятой
- 8.2 Состав модуля fpu
- Глава 9. Основы 64-разрядной архитектуры
- 9.1 Состав и назначение регистров микропроцессора ia-64
- 9.2 Особенности архитектуры epic
- 9.3 Архитектура x86-64
- 9.4 Структура одноядерного процессора
- 9.5 Многоядерные процессоры
- 9.6 Зачем нужны “лишние” разряды?
- Глава 10. Современные 64-разрядные микропроцессоры корпораций Intel и amd
- 10.1 Архитектура Intel Core 2
- 10.1.1 Intel Wide Dynamic Execution
- 10.1.2 Intel Intelligent Power Capability
- 10.1.3 Intel Advanced Smart Cache
- 10.1.4 Intel Smart Memory Access
- 10.1.5 Intel Advanced Digital Media Boost
- 10.1.6 Логическая схема процессора
- 10.2 Архитектура Intel Core i7
- 10.2.1 Технология Hyper-Threading в архитектуре Nehalem
- 10.2.2 Иерархия кэш-памяти в архитектуре Nehalem
- 10.3 Хронология развития семейств микропроцессоров с архитектурой Nehalem
- 10.4 Архитектура amd Athlon 64
- 10.4.1 Ядро процессора
- 10.4.3 Контроллер памяти
- 10.4.4 Контроллер HyperTransport
- 10.5 Архитектура amd k10
- 10.4.1 Технология amd Memory Optimizer Technology
- 10.5.2 Ядро процессора
- 10.5.3 Предвыборка данных и инструкций
- 10.5.4 Выборка из кэша
- 10.5.5 Предсказание переходов и ветвлений
- 10.5.6 Процесс декодирования
- 10.5.7 Диспетчеризация и переупорядочение микроопераций
- 10.5.8 Выполнение микроопераций
- 10.5.9 Технологии энергосбережения
- 10.5.10 Шина HyperTransport 3.0
- 10.5.11 Семейство процессоров Barcelona
- 10.5.12 Семейство процессоров Phenom
- Глава 11. Технологии, поддерживаемые современными микропроцессорами
- 11.1 Технологии тепловой защиты
- 11.1.1 Технология Thermal Monitor
- 11.1.2 Технология Thermal Monitor 2
- 11.1.3 Режим аварийного отключения
- 11.2 Технологии энергосбережения
- 11.2.1 Технология Enhanced Intel SpeedStep
- 11.2.2 Технология Cool'n'Quiet
- 11.3 Технология расширенной памяти
- 11.4 Технология антивирусной защиты
- 11.5 Технология виртуализации
- 11.6 Реализация технологий в современных микроархитектурах
- 11.6.2 Em64t – NetBurst
- 11.6.3 Intel Core
- 11.6.4 Intel Atom
- 11.6.5 Nehalem
- 11.6.6 Xeon
- Глава 12. Графические микропроцессоры
- 12.1 Основные термины и определения
- 12.2 Технологии построения трёхмерного изображения
- 12.2.1 Технологии повышения реалистичности трехмерного изображения
- 12.3 Шейдерный процессор
- 12.4 Особенности современных графических процессоров
- Глава 13. Однокристальные микроконтроллеры
- 13.1 Общая характеристика микроконтроллеров
- 13.2 Микроконтроллеры семейства avr
- Почему именно avr?
- 13.3 Общие сведения об омк avr
- 13.4 Характеристики avr-микроконтроллеров
- Глава 14. Технология производства микропроцессоров
- 14.1 Особенности производства процессоров
- 14.2 Новые технологические решения
- 14.3 Технология производства сверхбольших интегральных схем
- I. Выращивание кристалла кремния
- II. Создание проводящих областей
- III. Тестирование
- IV. Изготовление корпуса
- V. Доставка
- 14.4 Перспективы производства сбис
- Англо-русский словарь терминов и аббревиатур
- Библиографический список
- Интернет-ссылки
- 350072. Краснодар, ул. Московская, 2, кор. А.