- •3 Методическое пособие для лабораторных работ по курсу «Организация эвм и периферийные устройства» Оглавление
- •1.Введение в архитектуру эвм.
- •1.1.Структура персонального компьютера.
- •2.Архитектура реального режима работы м/п семейства 8086
- •2.1.Форматы данных микропроцессора
- •2.1.1.Числа
- •2.1.2.Символы
- •2.1.3.Указатели
- •2.1.4.Цепочки
- •2.2.Адресация памяти
- •2.3.Внутренние регистры процессора
- •2.3.1.Регистры общего назначения
- •2.3.2.Сегментные регистры
- •2.3.3.Регистры смещения
- •2.3.4.Регистр флагов
- •2.4.Режимы адресации
- •2.4.5.Базовая адресация
- •2.5.1.1. Общие команды.
- •2.5.1.2. Команды push и pop .
- •2.5.1.3. Команды ввода-вывода.
- •2.5.1.4. Адресные команды (пересылки адреса)
- •2.5.1.5. Флажковые команды (команды пересылки флагов).
- •2.5.2.Арифметические команды.
- •2.5.2.1. Команды сложения.
- •2.5.2.2.Команды вычитания.
- •2.5.2.3.Команды умножения и деления.
- •2.5.2.4.Команды расширения знака.
- •2.5.2.5.Десятичная арифметика.
- •2.5.3.Логические команды.
- •2.5.3.1.Булевы команды.
- •2.5.3.2.Команды сдвигов.
- •2.5.3.3.Команды циклических сдвигов.
- •2.5.3.4.Команды двойного сдвига
- •2.5.3.5.Команды работы с двоичными цепочками
- •2.5.4.Команды передачи управления.
- •2.5.4.1.Команды безусловной передачи управления.
- •2.5.4.2. Команды условных переходов.
- •2.5.4.3.Команды SetCondition
- •2.5.4.4 Команды управления циклами.
- •2.5.5.Цепочечные (строковые) команды.
- •2.5.5.1.Команды пересылки цепочки.
- •2.5.5.2.Команды сравнения цепочек.
- •2.5.5.3.Команды сканирования цепочек.
- •2.5.5.4.Команды загрузки.
- •2.5.5.5.Команды сохранения цепочек.
- •2.5.5.6.Команды ввода и вывода цепочек.
- •2.5.5.7.Замена сегмента.
- •2.5.6.Команды управления микропроцессором.
- •2.5.6.1.Команды управления флагами.
- •2.5.6.2.Команды синхронизации.
- •2.5.6.3.Команда холостого хода.
- •2.5.6.4.Команды прерываний.
- •2.5.7.Новые команды микропроцессора 80486
- •3.Директивы и операторы ассемблера
- •3.1.Структура программы
- •3.2.Организация программы.
- •3.2.1. Модели памяти
- •3.2.2. Процедуры
- •3.2.3. Директивы задания набора допустимых команд
- •3.3.Примеры использования директив в программах типа .Exe и .Com.
- •4.Архитектура и система команд арифметического сопроцессора
- •4.1.Форматы чисел сопроцессора
- •4.1.1.`Целые числа
- •4.1.2. Вещественные числа
- •4.1.3.Диапазоны вещественных чисел в х87.
- •4.2.Особые случаи вещественной арифметики
- •4.3.Формирование специальных значений в особых случаях
- •4.3.1. Случай неточного результата.
- •4.3.2.Численное антипереполнение.
- •4.3.3. Денормализованный операнд.
- •4.3.4. Деление на ноль.
- •4.3.5.Численное переполнение.
- •4.3.6.Недействительная операция.
- •4.4.Регистры математического сопроцессора.
- •4.4.1.Численные регистры (регистровый стек).
- •4.4.2.Регистр управления (cw)
- •4.4.3.Регистр состояния.
- •4.4.4. Регистр тэгов (признаков).
- •4.4.5.Указатели особого случая.
- •4.5.Система команд арифметического сопроцессора.
- •4.5.1.Команды передачи данных.
- •4.5.2.Арифметические команды
- •4.5.3.Дополнительные арифметические команды
- •4.5.4.Команды сравнений
- •4.5.5.Трансцендентные команды
- •4.5.6.Административные команды
- •4.6.Совместная работа двух процессоров в системе.
- •4.6.1.Синхронизация по командам.
- •4.6.2.Синхронизация по данным.
- •5.Примеры программ
- •Список рекомендуемой литературы
3.2.Организация программы.
3.2.1. Модели памяти
Модели памяти задаются директивой .MODEL.
model модель, язык, модификатор, где модель – одно из следующих слов:
TINY – код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. Эта модель памяти используется для написания программ на языке ассемблера в формате COM файла;
SMALL – код размещается в одном сегменте, а данные и стек – в другом (для их описания могут применяться разные сегменты, но объединенные в одну группу). Эта модель памяти используется для написания программ на языке ассемблера в формате EXE файла;
COMPACT – код размещается в одном сегменте, а для хранения данных могут использоваться несколько сегментов;
MEDIUM – код размещается в нескольких сегментах, а все данные – в одном;
LARGE, HUGE – и код, и данные могут занимать несколько сегментов;
FLAT – то же, что и TINY, но используются 32 – битные сегменты, так что максимальный размер сегмента, содержащего и данные, и код, и стек, - 4 Мб.
Язык – необязательный операнд, принимающий значения различных языков программирования, при указании которого подразумевается, что процедуры рассчитаны на вызов из программ на соответствующем языке программирования.
Модификатор – это необязательный операнд, принимающий значения NEARSTACK (по умолчанию) или FARSTACK. Во втором случае сегмент стека не будет объединяться в одну группу с сегментами данных.
Упрощенные директивы определения сегментов
Каждая программа, написанная на любом языке программирования, состоит из одного или нескольких сегментов. Область памяти, в которой находятся команды, называется сегментом кода, область памяти с данными – сегментом данных и область памяти, отведенная под стек – сегментом стека. Ассемблер позволяет помещать данные в сегмент кода, разносить код по нескольким сегментам, помещать стек в один сегмент с данными или вообще использовать один сегмент для всего. Для описания сегментов программы используются директивы SEGMENT и ENDS. Однако, чаще всего используются упрощенные директивы определения сегментов, которые вступают в силу после установления модели памяти.
Директива .CODE описывает сегмент кода:
.code.
Директива .STACK описывает сегмент стека:
.stack размер.
Директива .DATA описывает основной сегмент данных:
.data.
3.2.2. Процедуры
Процедурой в ассемблере является всё то, что в других языках называют подпрограммами, функциями, процедурами и т.д. Ассемблер не накладывает на процедуры никаких ограничений- на любой адрес программы можно передать управление командой CALL, и оно вернётся к вызвавшей процедуре, как только встретится команда RET. Такая свобода выражения легко может приводить к трудночитаемым программам, и в язык ассемблера были включены директивы логического оформления процедур.
Метка proc язык тип USES регистры
…
ret
метка endp
Все операнды PROC необязательны.
Тип может принимать значения NEAR и FAR, и если он указан, все команды RET в теле процедуры будут заменены соответственно на RETN и RETF. По умолчанию подразумевается, что процедура имеет тип NEAR в моделях памяти TINY, SMALL и COMPACT.
Конец программы
End start_label
Этой директивой завершается любая программа на ассемблере. В роли необязательного операнда здесь выступает метка (или выражение), определяющая адрес, с которого начинается выполнение программы. Если программа состоит из нескольких модулей, только один файл может содержать начальный адрес, так же как в С только один файл может содержать функцию main().