- •Содержание
- •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. Инструкции управления процессором
- •Литература
3.3.6. Виртуальная память
Выше было показано, что если мы имеем 16-разрядное слово, то объем прямо адресуемой памяти составляет 216 байт, или 64Кб. Однако со временем такой объем стал недостаточным для сложных программ. Реальный объем стал увеличиваться, и возникла задача организовать доступ к памяти, лежащей за пределом адресного пространства, доступного заданному размеру машинного слова. Для решения этой задачи используется ряд подходов.
Самый простой состоит в том, что память строится банками (конструктивные разделы памяти) или страницами (логические разделы) и с помощью некоторого аппаратного или программного переключателя выбирается нужный 64Кб. раздел (рис. 3.15). Физический адрес команды или операнда будет определяться по формуле:
Афиз.= Апрог.+Nстр.Z,
где Z размер страницы в байтах.
Для организации расширенной памяти используется дополнительная физическая память, дополнительные разряды в адресной шине и некоторая программная система, управляющая аппаратным переключателем. Общий объем памяти при 16-разрядном переключателе может достигать очень большого размера: 6464К Кб. Этот подход легко реализуется и на аппаратном и на программном уровнях, но он не позволяет отдельной программе выделить объем больше 64Кб без дополнительного аппаратно-программного механизма.
Под виртуальной памятью будем понимать память, построенную аппаратно-программными средствами.
Рис 3.15
В современных машинах вместо переключателя страниц, обеспечивающего переключение памяти фиксированными по объему разделами, используются специальные базовые или сегментные регистры. Содержимое регистра определяет начало сегмента или раздела, выделенного программе (рис. 3.16). Адрес сегмента фактически задает смещение адреса физического относительно заданного в программе. Размер сегмента выделяется задаче программно, обычно операционной системой. Физический адрес определяется:
Афиз.= Апрог.+ АсегмК,
где К — некоторый коэффициент, лежащий для различных семейств машин в пределах 4-64. Этот коэффициент определяет минимальное взаимное смещение сегментов. На рис. 3.13 в двух младших восьмеричных разрядах записаны 0, что эквивалентно умножению адреса сегмента на 100(8) или 64(10).
Рис. 3.16
Существование банков памяти по 64Кб каждый означает деление памяти на конструктивные разделы, в то время как логические разделы — сегменты —могут иметь произвольный размер и не совпадать с конструктивными.
При дефиците оперативной памяти виртуальная память может использовать дисковое пространство, динамически считывая с диска необходимый фрагмент выполняемой программы или, наоборот, удаляя не используемую в данный момент часть программы в специальную область на жестком диске, которая называется областью свопинга (swap space).
Этот процесс называется Свопинг (swapping) — временное хранение активной задачи на жестком диске.
Виртуальная организация памяти позволяет существенно увеличить объем доступной программам памяти (реально до десятков Гбайт).
Важно понимать, что идея виртуальной памяти — в том смысле, который используется сейчас — позволяет расширить адресное пространство или просто заменить оперативную память более медленной и дешевой дисковой, причем это будет происходить «прозрачно» от прикладной программы.
Часто при обсуждении вопросов, связанных с памятью ЭВМ, упоминается выражение «иерархия памяти». О чем при этом идет речь?
Требования, предъявляемые к памяти ЦВМ, весьма разнообразны и противоречивы — мы хотим иметь память:
большого объема хранящейся информации,
с высоким быстродействием,
низкой стоимости,
малого физического объема,
энергонезависимую.
Реально в настоящее время невозможно создать память, одновременно отвечающую всем этим требованиям. Поэтому память строится в виде некоторой иерархической системы, причем главным критерием служит простота и время обращения к ней. На самом верху иерархической лестницы расположена сверхоперативная память — регистры процессора. Обращение к ним самое быстрое, т.к. они входят в состав процессора (рис. 3.17). Но количество их невелико — от одного аккумулятора (в простейших процессорах) до 128 (например, в процессоре Terminator-6).
Объем, время обращения
1-128 слов, нсек.
32б - 2Мгб, нсек.
0-512Мгб, 10нсек.
8Кб - 4Гб, 40нсек.
120Кб- 180Гб
Если последнее —дисковые накопители, то скорость чтения max составляет десятки Мб/c. Объем каждый год увеличивается примерно в два раза.
Рис. 3.17
Следующий уровень — внутренний КЭШ. Это память без произвольного доступа, работа с ней происходит на аппаратной уровне. В ней хранятся наиболее часто используемые данные и команды. Время доступа к ней примерно в 5-10 раз меньше, чем к ОЗУ.
Конструктивно в корпусе процессора сложно разместить КЭШ большой емкости, поэтому используется внешний КЭШ. В современных процессорах Кэш-память делится на КЭШ данных и КЭШ команд, связана с процессором двумя отдельными шинами, что позволяет считывать одновременно команду и два операнда.