- •Содержание
- •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.4. Системная память
Системная память в рассматриваемой машине предназначена для хранения системных команд, т.е. минимального набора инструкций, необходимых для того, чтобы процессор мог произвести минимальное тестирование оборудования на предмет проверки его исправности и комплектации, выйти на связь с оператором или ввести Абсолютный загрузчик. Абсолютный загрузчик это программа, предназначенная для загрузки в машину исполняемых программ (загрузочных модулей), в том числе и операционной системы. Адресное пространство системной памяти не входит в область абсолютных адресов, и программисту эта память недоступна.
3.3.5. Система адресации
Для обращения к операнду в адресной части команды должна быть ссылка на место расположения операнда. В машине, построенной по принципу «Unibus», обращение к оперативной памяти и ко внешним устройствам производится одинаково, по адресу.
Машина имеет адресное пространство 64Кб, и следовательно, для указания абсолютного адреса требуется 16 разрядов или полное слово. Команда тоже записывается полным словом. Если предположить, что всего имеется 70 команд, то на адресную часть остается в формате команды всего 8 разрядов. Но в эту адресную часть можно записать число не более 511. А это значит, что доступное адресное пространство составит лишь 512 байт, что недопустимо мало. Следовательно, непосредственно в одно машинное слово невозможно записать код команды и адрес операнда. Нельзя записать и операнд, т.к. диапазон представляемых чисел также мал (0, 511).
Для обращения к операнду или к его адресу необходимо использовать еще одно 16-разрядное слово, но оно не может находиться в области абсолютных адресов. Для этого используются регистры общего назначения, в которые можно записать либо адрес, либо сам операнд. Но тогда в команде необходимо указать, как используется РОН, возникает потребность в различных методах адресации. Рассмотрим несколько возможных методов адресации.
Прямой регистровый метод характерен тем, что операнд находится в выбранном РОНе. Обращение к нему будет наиболее простым и быстрым, но регистров мало, и этот метод используется для хранения промежуточных или специально выделенных данных. Схема метода представлена на рис. 3.9.
Рис. 3.9
Косвенный регистровый метод адресации определяет содержимое выбранного РОНа как адрес операнда. Такой метод позволяет обратиться по абсолютному адресу к любой ячейке оперативной памяти или к любому регистру внешнего устройства. Обращение к операнду производится через канал, что требует дополнительного времени. Схема метода представлена на рис. 3.10.
Рис. 3.10
Индексный метод адресации предполагает суммирование адреса, записанного в РОНе, с некоторым индексом или смещением, записанным либо в следующем слове после команды либо в специальном регистре. Этот регистр может иметь название регистр базы, сегментный регистр и т.п. Использование индекса позволяет обратиться к другой ячейке памяти или к другому регистру ВУ, не изменяя исходный адрес.
Индексный метод широко используется при работе с массивами данных: обращение к нужному элементу массива производится по постоянному адресу (имя массива) с учетом номера элемента (индекс). Схема метода представлена на рис. 3.11.
Рис. 3.11
Вариант индексного метода — базовый метод адресации — представлен на рис. 3.12. Принципиальное отличие его от предыдущего состоит в том, что смещение записано не в команде, а в специальном аппаратно назначенном регистре базы. Обеспечивается возможность не только сдвинуть на фиксированную величину адрес одного или группы операндов при постоянных программных адресах, но и сместить в оперативной памяти программу или обратиться к другому блоку данных. Другими словами, имеется возможность записывать уже готовую программу или блок данных в нужное место памяти. Этот метод используется в многозадачных операционных системах для распределения памяти между задачами, страницами, разделами или сегментами.
Рис. 3.12
Непосредственный метод адресации предполагает запись операнда непосредственно в программе после команды (рис. 3.13).
Рис. 3.13
Метод удобен при работе с константами величинами не изменяемыми при работе программы, которые можно записывать прямо в команде на языке ассемблера. Но непосредственный метод нельзя использовать при работе с именами (переменными), т.к. адрес операнда связан с местом нахождения команды, но явно не определен.
Для работы с именами используется относительный метод адресации. Суть его состоит в том, что в команде, содержащей два слова, указан адрес операнда в виде смещения относительно этой команды. В ассемблере адрес операнда указывается прямо в команде, но при сдвиге команды по программе адрес операнда будет изменяться. А это означает, что если мы в программе расположим последовательно несколько одинаково записанных команд, то каждая из них будет обращаться к своему операнду. Рис. 3.14 представляет суть относительного метода адресации.
Рис. 3.14
В языках высокого уровня данный метод используется для работы с переменными. Поскольку адреса данных определяются по отношению к соответствующим командам, появляется возможность легко строить перемещаемые по оперативной памяти программы. Это свойство используется, если необходимо загрузить в память одновременно несколько задач, а начальные адреса загрузки для каждой программы не определены.