- •Содержание
- •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.7.5. Дополнительная память (Expanded Memory Specification — ems)
Хотя адресная шина процессоров XT была только 20 бит, допускалась установка дополнительной памяти теоретически неограниченного объема. Однако дополнительная память в этом случае была «видна» в одном или нескольких свободных окнах UMA фрагментами по 64 кБ, а необходимый фрагмент выбирался специальными программными переключателями (регистром управления памятью). Физически такая память представляла собой обычную карту с микросхемами памяти и управления.
В дальнейшем, при расширении адресного пространства последующих процессоров, от дополнительной памяти в виде карт отказались, а вышеописанный метод доступа теперь эмулируется драйвером EMM386.EXE для устаревших программ, не «умеющих» использовать современный вариант адресации.
EMM386.EXE требует для своей работы драйвера HIMEM.SYS и фактически является для последнего не более, чем одним из «клиентов», т.е. в машинах на процессорах 80386 и выше EMS память — не более, чем фикция, это лишь способ обращения к XMS памяти.
5.8. Обмен информацией с периферийными устройствами
5.8.1. Порты ввода/вывода
Для связи с внешними устройствами процессоры 80x86 используют шину данных и 16 бит шины адреса. Команды обращения к внешним устройствам out и in позволяют записать в порт устройства или прочитать из него 8, 16 или 32 (в зависимости от процессора) бита информации. При обращении ко внешним устройствам процессор вместо сигналов «обращения к памяти» формирует сигналы «обращения к портам».
С учетом используемой разрядности шины адреса нетрудно рассчитать, что всего может поддерживаться 65536 портов ввода/вывода. Однако в устройствах AT зачастую используется несколько модифицированный способ обращения к регистрам. Этот способ подразумевает наличие двух портов, один из которых адресный, а другой порт данных. Для обращения к некоторым данным требуется сначала занести в порт адреса номер регистра в пределах устройства, а затем прочитать(записать) значение из(в) порта данных.
Прямой способ (один адрес — один регистр) использует, например, порт принтера, последовательные порты; модифицированный (регистр адреса и данных) — звуковую карту AdLib и совместимые с ней; смешанный способ (несколько адресных регистров и несколько регистров данных) — видеокарты VGA и EGA. В них различные блоки (система разверток, блок ЦАП, блок управления адресом, выборки и т. д.) используют собственные пары регистров адреса/данных.
Не все регистры, доступные для чтения, допускают запись (устройство может просто проигнорировать ее), а также не все регистры, доступные для записи, возвращают записанные значения при чтении. Многие устройства при записи любят подставлять регистры, которые по логике работают «на запись», а при чтении по этому же адресу Вы прочитаете значение совершенно другого регистра, который предназначен в данном устройстве для чтения.
Другая особенность некоторых устройств перекрывающиеся регистры. Например, контроллер IDE по адресу 1F0h имеет 16-битный (в более поздних контроллерах — 32-битный) регистр данных, а по адресу 1F1h — 8-битный регистр ошибок (при чтении) и регистр свойств (при записи). Таким образом, старшая часть регистра данных читается, как бы, из порта по адресу 1F1h, фактически же контроллер различает 16-битный запрос к 1F0h и 8-битный запрос на 1F1h и подставляет различные регистры.
С появлением шины PCI адреса портов устройств не обязаны быть фиксированными. Для старых устройств фиксация сохраняется из соображений совместимости, однако все новые устройства имеют неопределенные адреса. Программа, использующая их, должна обратиться к специальным процедурам BIOS и запросить информацию о текущей настройке устройства.
В приведенной ниже таблице описан ряд портов, наследуемых современными компьютерами еще со времен IBM PC/XT, AT и PS/2.
AT/PS-2 |
PC/XT |
Описание |
000-01F |
000-00F |
Первый DMA-контроллер |
020-03F |
020-021 |
Первый контроллер прерываний |
040-05F |
040-043 |
Таймер |
|
060-063 |
Набор различных устройств |
060-06F |
|
Контроллер клавиатуры |
070-07F |
|
Память CMOS и маска NMI |
080 |
|
Диагностический регистр |
080-08F |
080-083 |
DMA-контроллер |
0A0-0BF |
|
Второй контроллер прерываний |
0C0-0DF |
|
Второй DMA-контроллер |
0F0-0FF |
|
Сопроцессор |
170-177 |
|
Жесткий диск № 2 |
1F0-1F7 |
|
Жесткий диск № 1 |
200-207 |
200-20F |
Игровой адаптер |
238-23F |
|
Стык RS-232 № 4 (в PS/2) |
278-27F |
278-27F |
Параллельный принтер № 2 |
2C0-2DF |
2C0-2DF |
Видеоадаптер |
2F8-2FF |
2F8-2FF |
Стык RS-232 № 2 |
|
320-32F |
Жесткий диск XT |
338-33F |
|
Стык RS-232 № 3 (в RS/2) |
370-377 |
|
Контроллер НГМД № 2 |
378-37F |
378-37F |
Параллельный принтер |
3B0-3BF |
3B0-3BF |
Видеоадаптер и принтер |
3C0-3CF |
3C0-3CF |
Видеоадаптер |
3D0-3DF |
3D0-3DF |
Видеоадаптер |
3F0-3F7 |
3F0-3F7 |
Контроллер НГМД № 1 |
3F8-3FF |
3F8-3FF |
Стык RS-232 № 1 |
Разумеется, в современных ЭВМ используется гораздо большее количество портов.