- •Содержание
- •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.10. Начальный запуск эвм
Рассматриваемые ЭВМ производятся разными изготовителями, поэтому процесс начального запуска у них различен, однако в нем можно увидеть ряд обязательных шагов.
Первым при включении питания активизируется его источник, который при наличии всех питающих напряжений выдает на системную плату сигнал готовности (этот сигнал прерывается на время удержания клавиши RESET). По нему процессор 8086 передает управление на адрес 0FFF0h:00F0h (более поздние процессоры используют другие адреса, но всегда в конце доступного адресного пространства). Описанный выше процесс называется «холодным стартом». По этому адресу располагается программа начального запуска системы, которая начинает свою работу тестированием компонент ЭВМ (ОЗУ, различные контроллеры и т.д.). Во время тестирования и настройки компонент системы BIOS выставляет в порт 80h уникальные для каждого этапа константы. Если будет обнаружен сбой до запуска видеосистемы и загрузка прервется, то используя специальную диагностическую плату, можно узнать код последнего успешного этапа.
После успешного тестирования и настройки устройств ЭВМ производится загрузка ОС, для чего сначала опрашиваются флоппи дисководы, затем жесткий диск (или сетевая плата или CD-ROM). Порядок опроса устройств загрузки у поздних моделей может быть изменен. В случаях, когда все попытки загрузки оказываются неудачными, более старые ЭВМ передают управление встроенному интерпретатору языка BASIC, более поздние просто выводят диагностическое сообщение и затем могут либо прервать работу, а могут попытаться загрузить ОС еще раз.
Используемое иногда в литературе понятие «теплый старт» подразумевает программную передачу управления на адрес 0FFF0h:00F0h, но при этом предварительно в определенную ячейку памяти заносится значение 1234h, указывающее на то, что этот старт не первый. В зависимости от BIOS это может сократить количество начальных шагов (например, будет пропущен тест ОЗУ).
5.11. Регистры процессора
При описании регистров мы будем пользоваться обозначениями и мнемоникой команд, известными как Intel-стиль. Этот стиль, как правило, используется в MS-DOS и совместимых системах.
Здесь мы опустим описание регистров сопроцессора, которые используются не только для операций с вещественными числами (а так же целыми числами, обрабатываемыми сопроцессором), но так же и в операциях MMX и других расширениях.
5.11.1. Регистры общего назначения
При программировании на языке Ассемблер регистры общего назначения являются «рабочими лошадками». Особенность этих регистров состоит в том, что возможна адресация их как одного целого 32-битного слова (только для процессоров от 80386) EAX, EBX, ECX, EDX, или его младшей 16-битной части (AX, BX, CX, DX), или даже одной из 8-битных частей младшей 16-битной части (AL, AH, BL, BH, CL, CH, DL, DH) разрядного слова.
EAX | ||
|
AX | |
AH |
AL | |
d31..d16 |
d15..d8 |
d7..d0 |
ECX | ||
|
CX | |
CH |
CL | |
d31..d16 |
d15..d8 |
d7..d0 |
EBX | ||
|
BX | |
BH |
BL | |
d31..d16 |
d15..d8 |
d7..d0 |
EDX | ||
|
DX | |
DH |
DL | |
d31..d16 |
d15..d8 |
d7..d0 |
Следующие три ассемблерные команды засылают нули в регистры СХ, СН и CL соответственно:
MOV CX, 0
MOV CH, 0
MOV CL, 0
В основном, все четыре регистра универсальны. Однако есть несколько отличий.
Регистр EАХ является основным аккумулятором (Accomulator) и применяется для всех операций ввода/вывода, некоторых операций над строками и некоторых арифметических операций. Например, команды умножения, деления и сдвига предполагают использование регистра АХ. Некоторые команды генерируют более эффективный код, если они имеют ссылки на регистр АХ.
Регистр EВХ является базовым (Base). Это единственный регистр общего назначения, который может использоваться в качестве «индекса» для расширенной адресации.
Регистр EСХ является счетчиком (Counter). Он необходим для управления числом повторений циклов и для операций сдвига влево или вправо.
Регистр ЕDX является регистром данных (Data). Он применяется для некоторых операций ввода/вывода и тех операций умножения и деления над большими числами, которые используют регистровую пару DX:AX.
Эти же особенности присущи 16- и 8-битным частям этих регистров.
Помимо описанных выше регистров, есть еще четыре, менее универсальных, регистра: ESI, EDI, EBP, ESP. Их младшие 16-разрядные части программно доступны и имеют названия SI, DI, BP, SP соответственно. Разумеется, 32-битные регистры доступны лишь на процессорах от 80386. Назначения регистров следующее:
регистр ESI (Source Index) — индекс источника. Используется как индекс источника в строковых операциях либо как индексный регистр в других операциях. К этому регистру также применимо большинство других операций;
регистр EDI (Destination Index) — индекс приемника. Используется в качестве индекса приемника в строковых операциях, в остальном аналогичен ESI;
регистр ESP (Stack Pointer) — указатель стека. Этот регистр может использоваться явно как универсальный регистр, однако его основное назначение – указывать вершину стека, так как все стековые операции адресуются к памяти через ESP;
регистр EBP (Base Pointer) — также предназначен для операций со стеком, например, для хранения в стеке переменных. В большинстве команд используется только явно.