- •Содержание
- •Введение
- •Архитектура микропроцессоров Intel 8086
- •Общие принципы работы мп 8086 при выполнении прикладных программ
- •Регистры
- •Адресация
- •Непосредственная адресация
- •Прямая адресация
- •Регистровая адресация
- •Косвенная регистровая адресация
- •Адресация no базе
- •Индексная адресация
- •Индексная адресация со смещением
- •Система команд
- •Команды пересылки данных
- •Арифметические команды
- •Битовые команды
- •Строковые команды
- •Команды передачи управления
- •Команды перехода
- •Условные
- •Безусловные
- •Команды условного перехода
- •Команды управления циклом
- •Тело цикла
- •Команды прерываний
- •Структура программы на языке ассемблера
- •Основные понятия языка ассемблера
- •Написание сегмента данных
- •Написание сегмента стека
- •Написание сегмента кода
- •Написание головной подпрограммы
- •Подготовка программ к выполнению
- •Отладка программ в Turbo Debugger
- •Специфика встроенного ассемблера
- •Оператор asm
- •Синтаксис ассемблерных команд
- •Коды инструкций
- •Операнды
- •Константы
- •Выражения
- •Операции
- •Бинарная операция -
- •Побитовые операции not, and, or, xor
- •Директивы ассемблера
-
Команды прерываний
Мнемоника |
Формат |
Комментарий |
INT |
INT номер |
Выполнить прерывание |
INTO |
INTO |
Выполнить прерывание по переполнению |
IRET |
IRET |
Вернуться из прерывания |
Выполнение прерываний во многом напоминает косвенный вызов дальней процедуры. По команде INT (INTO) в стек помещается регистр флагов, сегмент CS, указатель IP, а новые значения этих регистров берутся из 4-байтного вектора прерывания, соответствующего номеру прерывания в команде INT, или из вектора 4 - для команды INTO. Таким образом, единственным отличием от команды CALL является то, что в стек предварительно заносится регистр флагов. Следует, правда, оговориться: перед передачей управления программе обработки прерывания микропроцессор сбрасывает флаги трассировки TF и прерываний IF; сброс TF необходим для обеспечения нормальной работы отладчиков, использующих прерывание по вектору 1 или 4, сброс IF блокирует вмешательство других процессов в ход обработки прерывания.
Команда INTO представляет собой условное прерывание и выполняется, если в этот момент взведен флаг переполнения OF.
Команда IRET реализует правильный выход из программы обработки прерывания: она считывает из стека 3 двухбайтные слова и помещает их в регистры IP, CS и регистр флагов.
-
Структура программы на языке ассемблера
-
Основные понятия языка ассемблера
Ассемблерная программа состоит из операторов и директив. Операторы – это инструкции, исполняемые процессором (например, MOV, ADD и т. д.). Директивы, как правило, служат для указания режимов работы ассемблера (например, директива .MODEL), для разбиения потока операторов на сегменты и процедуры, определения данных, указания размера операнда (BYTE PTR, WORD PTR) и выполнения некоторых других операций.
Отдельные операторы или данные могут быть снабжены меткой, указывающей адрес команды либо операнда. Метка должна начинаться с латинской буквы либо символов _, @, $ и может содержать в себе латинские буквы, символы _, @, $ и цифры. В качестве метки нельзя использовать названия команд и директив.
Оператор ассемблера имеет вид:
[Метка:] Код_операции [Операнды] [; Комментарий]
В квадратных скобках находятся необязательные поля. Приведем несколько примеров:
Metka1 MOV AX, ES:[DI]
PUSH AX ; Запись AX в стек.
CLC ; Сброс флага переноса
Программа обычно начинается с директивы
.MODEL SMALL
которая сообщает ассемблеру, что используются сегменты размером не более 64 килобайт.
Как уже было указано, программа состоит из трех сегментов: кода, данных и стека. Сегменты определяются с помощью директив SEGMENT и ENDS следующим образом:
Имя SEGMENT Тип
Операторы
…
Имя ENDS
где Имя – метка сегмента;
Тип – ‘code’ – сегмент кода;
‘data’ – сегмент данных;
STACK ‘stack’ – сегмент стека.
Написание сегментов будет рассмотрено ниже.
Заканчивается программа директивой END. Она имеет вид:
END метка,
где метка – адрес оператора программы, который должен быть выполнен первым при старте программы.