Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Ассемблеру.docx
Скачиваний:
12
Добавлен:
09.11.2018
Размер:
125.1 Кб
Скачать
    1. Команды прерываний

Мнемоника

Формат

Комментарий

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 и регистр флагов.

  1. Структура программы на языке ассемблера

    1. Основные понятия языка ассемблера

Ассемблерная программа состоит из операторов и директив. Операторы – это инструкции, исполняемые процессором (например, 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 метка,

где метка – адрес оператора программы, который должен быть выполнен первым при старте программы.