- •Содержание
- •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.11.4. Регистры сегментов и селекторов
Ранее уже отмечалось, что в ЭВМ, сконструированных на базе МП 8086 и более поздних, программы и данные хранятся в отдельных блоках памяти, или сегментах. В реальном режиме начальные адреса сегментов хранятся в регистрах сегментов. Для защищенного режима ОС создает специальные таблицы, адреса которых находятся в системных адресных регистрах, а номера элементов (селекторов) хранятся в сегментных регистрах, которые в этом случае правильнее назвать селекторными.
В 8086 и 8088 существовало четыре 16-битных сегментных регистра: SS, CS, DS, ES:
SS (Stack Segment) указывает на сегмент стека;
CS (Code Segment) указывает на сегмент кода, содержащий команду, исполняющуюся в данный момент;
DS (Data Segment) указывает на сегмент данных, обрабатываемых программой. В строковых командах этот сегмент является источником;
ES — дополнительный сегмент данных. В строковых операциях является сегментом приемника.
В процессорах 80386 и выше введено еще два дополнительных регистра: GS и FS.
В большинстве команд регистры DS, ES, GS, FS взаимозаменяемы. Но многие из этих команд ориентированы на использование определенного регистра (как правило, DS) и при использовании другого сегмента размер команды и время выполнения возрастают. Регистры CS и SS так же могут быть использованы в ряде команд, ориентированных на другие сегментные регистры, но обратное невозможно.
В процессорах от 80386 и выше разрядность сегментных регистров увеличена, но программно доступны все те же 16 бит. Остальные биты отвечают за размер сегмента, его права, т.е. фактически содержат дескриптор сегмента. Косвенно изменить его может только программа защищенного режима, выполнив операцию загрузки в сегментный регистр, при этом дескриптор будет загружен из специальных таблиц, подготовленных ОС.
5.11.5. Системные адресные регистры
Системные адресные регистры появились только в процессорах 80386 и предназначены для указания на структуры данных, ответственных за сегментацию в защищенном режиме:
GDTR (Global Descriptor Table Register) хранит размер и адрес Глобальной Таблицы Дескрипторов. Размер регистра — 48 бит;
IDTR (Interrupt Descriptor Table Register) хранит размер и адрес Таблицы Дескрипторов Прерываний. Размер регистра — 48 бит;
LDTR (Local Descriptor Table Register) хранит дескриптор Локальной Таблицы Дескрипторов. Программно доступный размер регистра — 16 бит;
TR (Task Register) хранит дескриптор Сегмента Состояния Задачи. Программно доступный размер регистра — 16 бит.
5.11.6. Регистры отладки
Восемь 32-битных регистра DR0-DR7 были введены в процессорах от 80386 и расширены в 80586. Эти регистры позволяют генерировать исключение #DB при обработке определенных адресов или обращении к определенным портам ввода/вывода.
Регистр DR7 (Debug Control Register) управляет процессом отладки и содержит следующие битовые поля:
31..30 |
29 |
28 |
27..26 |
25 |
24 |
LEN3 |
R |
W |
LEN2 |
R |
W |
23..22 |
21 |
20 |
19..18 |
17 |
16 |
LEN1 |
R |
W |
LEN1 |
R |
W |
15..14 |
13 |
12..11 |
10 |
9 |
8 |
0 |
GD |
0 |
1 |
GE |
LE |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
G3 |
L3 |
G2 |
L2 |
G1 |
L1 |
G0 |
L0 |
Поля LENi определяют размер области, адресуемой регистрами DR0..DR3.
Поля Ri Wi задают тип перехватываемого события: выборка инструкции, запись данных, обращение к порту ввода/вывода, чтение или запись данных.
По типу исключения перехват выборки инструкции классифицируется как отказ, а обращение данным – как ловушка.
Бит GD (Global Debug register access direct) позволяет отслеживать любые попытки обращения к отладочным регистрам.
GE и LE (Global и Local Exact data breakpoint match) определяют, будет ли исключение генерироваться сразу или с задержкой в несколько команд. Ни в [2] ни в [3] не описан смысл использования этих задержек.
Gi и Li разрешают срабатывание по контрольным точкам. Но Li сбрасываются при переключении задачи, в то время как на Gi переключение задачи не действует.
Регистр DR6 (Debug Status Register) позволяет обработчику узнать причину остановки (используется только часть из младших 16 бит):
15 |
14 |
13 |
12 |
11..4 |
3 |
2 |
1 |
0 |
BT |
BS |
BD |
0 |
1 |
B3 |
B2 |
B1 |
B0 |
BT = 1 — ловушка переключения задач (по биту T в таблице состояния задачи).
BS = 1 — ловушка пошагового режима.
BD = 1 — отказ при попытке доступа к регистрам отладки.
Bi = 1 — остановка по контрольной точке в регистре DRi. Достоверны только для Gi или/и Li = 1.
Одновременно могут быть установлены несколько флагов. Возможно также несколько вызовов обработчика, если одна команда имеет несколько причин остановки. Для предотвращения многократного вызова используется флаг RS регистра флагов.
Регистры DR4 и DR5 пока не используются.