- •Содержание
- •1. Введение
- •2. Представление информации в эвм
- •2.1. Системы счисления
- •2.1.1. Основные понятия
- •2.1.2. Системы счисления, используемые в вычислительной технике
- •2.1.3. Перевод чисел из одной системы счисления в другую
- •2.2. Типы данных
- •2.2.1. Типы данных, используемых в эвм
- •2.2.2. Константы
- •2.2.3. Логические величины
- •2.2.4. Символьные величины
- •2.2.5. Целые числа
- •2.2.6. Вещественные числа
- •2.3. Форматы команд
- •3. Основы построения эвм
- •3.1. Немного истории
- •3.2. Особенности архитектуры современной вычислительной машины
- •3.2.1. Основные понятия
- •3.2.2. Структурная организация машины
- •3.3. Вариант структуры микроЭвм
- •3.3.1. Общая структура машины
- •3.3.2. Процессор
- •3.3.3. Оперативная память
- •3.3.4. Системная память
- •3.3.5. Система адресации
- •3.3.6. Виртуальная память
- •3.3.7. Таймер
- •3.3.8. Внешние устройства
- •3.3.9. Принципы обмена информацией с внешними устройствами
- •Некоторые вопросы программного обеспечения
- •4.1. О программном обеспечении
- •4.2. Процесс компиляции
- •4.3. Компиляция с языка Ассемблера
- •5. Особенности архитектуры эвм типа ibm-рс
- •5.1. Введение
- •5.2. Исторический обзор процессоров клона 80х86
- •5.3. Классификация процессоров Intel 80х86
- •5.4. Особенности периферийных устройств ibm-pc
- •5.5. Характеристики компьютера
- •5.6. Сегментная адресация
- •5.7. Особенности распределения адресного пространства в компьютерах ibm-pc
- •5.7.1. Стандартная оперативная память (Conventional memory)
- •5.7.2. Область верхней памяти (Upper Memory Area ‑ uma)
- •5.7.3. Область высшей памяти (High Memory Area ‑ hma)
- •5.7.4. Расширенная память (eXtended Memory Specification — xms)
- •5.7.5. Дополнительная память (Expanded Memory Specification — ems)
- •5.8. Обмен информацией с периферийными устройствами
- •5.8.1. Порты ввода/вывода
- •5.8.2. Использование адресного пространства памяти
- •5.8.3. Прямой доступ к памяти
- •5.9. Прерывания
- •5.10. Начальный запуск эвм
- •5.11. Регистры процессора
- •5.11.1. Регистры общего назначения
- •5.11.2. Указатель инструкций
- •5.11.3. Регистр флагов и управляющие регистры
- •5.11.4. Регистры сегментов и селекторов
- •5.11.5. Системные адресные регистры
- •5.11.6. Регистры отладки
- •5.11.7. Регистры тестирования и модельно-специфические регистры
- •6. Debug — средство непосредственной коррекции и отладки загрузочного кода программ
- •6.1. Введение
- •6.1.1. Команды без аргумента
- •Input I порт
- •6.1.2. Команды обращения к ячейкам
- •15D0:010c bfffff mov di,ffff
- •15D0:010f 57 push di
- •6.1.3. Команды запуска программы
- •6.1.4. Команды просмотра и модификации регистров
- •7. Методы адресации
- •7.1. Введение
- •7.2. Регистровый метод адресации
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •7.3. Непосредственный метод адресации
- •7.4. Прямая адресация
- •7.5. Косвенная регистровая адресация
- •159B:0100 not word ptr [bx]
- •159B:0102 e000 loopnz 0104
- •7.6. Адресация по базе
- •7.7. Косвенная регистровая адресация с индексированием
- •159B:0102 0e push cs
- •7.8. Адресация по базе с индексированием
- •7.9. Относительная адресация
- •7.10. Косвенная регистровая адресация с масштабированием
- •7.11. Адресация по базе с индексированием и масштабированием
- •8. Синтаксис ассемблера
- •8.1. Директивы определения данных
- •8.1.1. Определение переменных
- •Cимвольные строки
- •Числовые данные
- •Примеры:
- •8.2. Выражения
- •8.3. Непосредственные операнды
- •8.4. Структуры
- •8.5. Сегменты
- •8.6. Модели памяти и упрощенные директивы определения сегментов
- •8.7. Упрощенные директивы описания сегментов
- •8.8. Создание программы на ассемблере
- •8.9. Получение выполняемого файла
- •9. Система команд
- •9.1. Классификация команд по операндам
- •9.2. Классификация команд по действию
- •9.2.1. Команды пересылки данных
- •9.2.2. Арифметические команды
- •8.2.3. Команды манипуляции битами
- •9.2.4. Управление центральным процессором
- •9.2.4. Команды передачи управления
- •Iret, iretd
- •9.3. Краткий список команд с используемыми операндами
- •9.3.1. Условные обозначения:
- •9.3.2. Инструкции пересылки данных
- •9.3.3. Арифметические, логические и инструкции сдвига
- •9.3.4. Инструкции обработки строк
- •9.3.5. Инструкции передачи управления
- •9.3.6. Инструкции управления процессором
- •Литература
5.3. Классификация процессоров Intel 80х86
Как известно из предыдущего раздела, фирмой Intel было выпущено много различных версий процессоров, программно-совместимых с процессорами Intel 8086 и Intel 80883. Для упорядочивания их множества введем три понятия.
Семейство (family). К различным семействам относятся версии процессоров, которые имеют существенные отличия в программировании. В маркировке этих процессоров между цифрами 80 и 86 обычно вставляется еще одна цифра, соответствующая номеру семейства. Так, к различным семействам относятся 8086, 80186, 80286 и т.д.
Кратко рассмотрим программные особенности семейств:
К этому семейству относились только процессоры 8086 и 8088. Они еще не имели цифры семейства в названии и представляли собой 16-разрядный процессор с рабочей частотой около 5 МГц и адресным пространством 1 Мб. Именно на этих процессорах строились первые машины IBM-PC (PC-XT).
Процессор 80186 выпускался недолго и практически не отличался от 8086 и 8088. Зачастую его даже не упоминают в литературе.
В процессоре 80286 появился защищенный режим, позволявший одним программам (например, ОС) получить полный контроль над исполнением других программ. Обычный режим, позволявший исполняться старым программ, теперь стал называться реальным. Также была поднята тактовая частота и расширено адресное пространство: 16 Мб физической памяти и 1 Гб виртуальной.
Процессор 80386 был первым 32-разрядным в среди перечисленных. Это значит, что большинство операций могли воспринимать 32-разрядные аргументы. Соответственно, изменились и особенности функционирования в защищенном режиме, а так же лимиты адресного пространства: 4 Гб физической памяти. Появился новый режим: виртуального 8086. Этот режим представляет собой комбинацию защищенного и реального режимов. Он позволяет исполняться программам реального режима в защищенном режиме процессора — эта возможность используется многозадачными ОС для параллельного исполнения как программ реального, так и защищенного режима. В этом процессоре также появилось страничное управление памятью (страничное преобразование адреса): возможность сопоставлять одним и тем же адресам, используемым программой, различные ячейки памяти. Это позволило оптимизировать работу с виртуальной памятью, а так же алгоритмы выделения/освобождения памяти.
Программно процессоры 80486 практически идентичны 80386, однако аппаратно они имеют ряд существенных отличий: на кристалл процессора перенесен кэш памяти и математический сопроцессор. Кроме того, ядро CISC постепенно стало становится RISC (все команды стали выполняться процессором не «сразу», а делиться на отдельные — простые, но очень быстрые).
Процессоры 80586, получившие так же названия Pentium, имели два конвейера команд, что позволило выполнять до двух команд за такт. Однако использование этой возможности требует определенным образом оптимизированного кода программы. Другими особенностями стали средства для работы нескольких процессоров параллельно.
С этого поколения нумерация процессоров стала теряться, они стали получать буквенные названия. Но, тем не менее, понятие «семейство» осталось, его номер можно получить, выполнив команду CPUID. Процессоры шестого и более поздних поколений представляют собой весьма сложные устройства и отличаются, как правило, аппаратными конфигурациями: размерами первичных КЭШей, оптимизацией выполнения команд, расширением системы команд (MMX, MMX2 и другие), аппаратными возможностями отладки программ и т.д.
Авторам неизвестно, какой номер семейства имеет процессор Merced. В отличие от предыдущих поколений, этот процессор является 64-битным.
Модель (model). В пределах одного семейства процессоры могут различаться номером модели. Вероятно, понятие модели присутствовало еще в 8086/8088, но тогда это еще не было существенным. В основном, разница между моделями появилась в 80386 — модели еще не были пронумерованы и отличались буквами после номера: так 80386SX и 80386DX отличаются только внешней шиной данных и адреса. В более поздних процессорах разница между моделями становилась более существенной, но, в основном, эти отличия более интересны многозадачным ОС, чем прикладным программам. Так 80686 6-й модели 5-й степпинг (см ниже) имеет встроенный программно доступный контроллер прерываний4, а 80686 8-й модели 3-й степпинг его не имеет.
Степпинг (step). Это еще одно различие, вероятно, отражающее лишь особенности реализации, нежели программные или интерфейсные отличия.
Несмотря на сходство целых трех параметров, процессоры совпадающего семейства, модели и степпинга могут, тем не менее, отличаться. Автору приходилось сталкиваться с процессорами семейства 6, модель 6, степпинг 5 как с контроллером APIC, так и без него.
Процессоры других производителей, так или иначе, соответствуют особенностям Intel-процессоров. Для точной идентификации в некоторых моделях процессоров 80486 и всех более поздних появилась команда CPUID, позволяющая определить как семейство, модель и степпинг, так и возможности, присущие конкретному процессору. По результатам этой команды так же возможно узнать производителя процессора.