- •02H/03h - Чтение/запись секторов.
- •Язык Ассемблер
- •Сегментация памяти
- •Структура программы на языке Ассемблер
- •В более общем случае операнды могут входить как составные части в более сложные образования, называемые выражениями. Типы операторов
- •Режимы адресации
- •Директивы ассемблера
- •Директива задания исходных данных:
- •Директива использования сегментных регистров по умолчанию:
- •Упрощенные директивы определения сегмента
- •Идентификаторы, создаваемые директивой model
- •Модели памяти
- •Инструкции пересылки данных и двоичной арифметики
- •Запись программ на языке ассемблера
- •Пример записи формулы
- •Текст программы:
- •Варианты заданий
- •Циклические и разветвляющиеся программы
- •Команда сравнения
- •Безусловные переходы
- •Условный переход
- •Пример написания программы работы с массивами слов
- •Варианты заданий
- •Применение логических инструкций
- •Логические инструкции
- •Примеры использования логических команд
- •Пример выполнения работы
- •Варианты заданий
- •Обработка символьной информации с помощью функций dos
- •Программные прерывания и системные вызовы
- •Функция оан
- •Функция 0Bh
- •Пример выполнения работы
- •Варианты заданий
Упрощенные директивы определения сегмента
Формат директивы |
Назначение |
.CODE [имя] |
Начало или продолжение сегмента кода |
.DATA |
Начало или продолжение сегмента инициализированных данных. Также используется для определения данных типа near |
.CONST |
Начало или продолжение сегмента постоянных данных (констант) модуля |
.DATA? |
Начало или продолжение сегмента неинициализированных данных. Также используется для определения данных типа near |
.STACK [размер] |
Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека |
.FARDATA [имя] |
Начало или продолжение сегмента инициализированных данных типа far |
.FARDATA? [имя] |
Начало или продолжение сегмента неинициализированных данных типа far |
Наличие в некоторых директивах параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа.
При использовании директивы MODEL транслятор делает доступными несколько идентификаторов, к которым можно обращаться во время работы программы, с тем, чтобы получить информацию о тех или иных характеристиках данной модели памяти
Идентификаторы, создаваемые директивой model
Имя идентификатора |
Значение переменной |
@code |
Физический адрес сегмента кода |
@data |
Физический адрес сегмента данных типа near |
@fardata |
Физический адрес сегмента данных типа far |
@fardata? |
Физический адрес сегмента неинициализированных данных типа far |
@stack |
Физический адрес сегмента стека |
Операнды директивы MODEL используют для задания модели памяти, которая определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров.
Модели памяти
Модель |
Тип кода |
Тип данных |
Назначение модели |
TINY |
near |
near |
Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата .com. |
SMALL |
near |
near |
Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на ассемблере |
MEDIUM |
far |
near |
Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления — типа far. Данные объединены в одной группе; все ссылки на них — типа near |
COMPACT |
near |
far |
Код в одном сегменте; ссылка на данные — типа far |
LARGE |
far |
far |
Код в нескольких сегментах, по одному на каждый объединяемый программный модуль |
Инструкции пересылки данных и двоичной арифметики
Команды данной группы приведены в таблице 2.1. Код определяет выполняемое командой действие, операнды показывают адреса ячеек, хранящих исходные данные, необходимые для выполнения команды и адрес ячейки результата.
Процессор i8086 и более поздние версии относятся к двухадресным машинам. Это значит, что его команда может содержать не более двух операндов. Если для выполнения команды необходимо иметь два источника данных, например, сложение, то сохранение результата выполнения команды производиться по адресу одного из источников данных. Чтобы показать, какой из операндов будет хранить результат, его обозначают при описании команды как dst (destination – назначение), операнд, который используется только как адрес исходных данных, обозначается как src (source – источник). В двухоперандных командах операнд dst указывает, перед выполнением команды, адрес исходного данного, а после выполнения – адрес результата.
Мнемокод |
Действие |
|
Код |
Операнды |
|
mov |
dst, src. |
пересылка |
add |
dst, src |
сложение |
inc |
dst |
увеличить на единицу |
sub |
dst, src |
вычитание |
dec |
dst |
уменьшение на единицу |
neg |
dst |
изменение знака |
sal |
dst,счетчик |
арифметический сдвиг влево |
sar |
dst,счетчик |
арифметический сдвиг вправо ( по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда) |
shl |
dst,счетчик |
логический сдвиг влево |
shp |
dst,счетчик |
логический сдвиг вправо |
xlat |
таблица |
трансляция байтов из таблицы |
lea |
dst, src |
загрузка исполнительного адреса |
mod |
dst, src |
получения остатка от деления |
