Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КС-ZAO / Лекции ЦЭВМруский вариант11.doc
Скачиваний:
188
Добавлен:
07.02.2016
Размер:
15.82 Mб
Скачать

Инструкции enter и leave

Инструкции ENTER и LEAVE используются для того, чтобы установить и отменить границы стека, в которых передаваемые параметры и локальные динамические переменные доступны относительно BP. Эти инструкции особенно полезны при организации интерфейса Ассемблера с языками, ориентированными на работу со стеком (например, Си).

Инструкция ENTER сохраняет регистр BP вызывающей программы, устанавливает его таким образом, чтобы он указывал на начало передаваемых параметров (если они имеются) в новых границах стека, устанавливает, как это необходимо, SP для выделения пространства для локальных переменных, и даже копирует блок указателей на границы стека языка высокого уровня в новые границы стека (если это необходимо).

Инструкция LEAVE имеет действие, обратное инструкции ENTER, и восстанавливает BP и SP в то состояние, которое они имели перед выполнением соответствующей инструкции ENTER.

SampleFunction PROC

enter 10,1

.

.

.

leave

ret SampleFunction ENDP

Первый операнд инструкции ENTER представляет собой 16-битовое промежуточное значение, задающее число байтов, зарезервированных для локальных переменных в новой границе стека. Второй операнд инструкции ENTER - это 8-битовое промежуточное значение, задающее уровень вложенности функции, для которой должна создаваться новая граница стека. Этот операнд задает, сколько раз нужно скопировать указатели границы стека из границ стека вызывающего кода в новые границы стека.

Инструкция bound

Директиве BOUND проверяет, что 16-битовое значение находится в диапазоне со знаком, заданном двумя смежными словами памяти, при этом верхняя граница записана по адресу, расположенному непосредственно над нижней границей. Обе границы интерпретируются, как значения со знаком, поэтому можно задать максимальный диапазон от -32768 до +32767 включительно. Значения, совпадающие с нижней или верхней границей, рассматриваются, как принадлежащие заданному диапазону.

Инструкция BOUND используется обычно для того, чтобы предотвратить выход за границы массива. Если BX не находится в заданном диапазоне, то генерируется прерывание INT 5.

Первый операнд инструкции BOUND представляет собой 16-разрядный регистр общего назначения, содержащий проверяемое значение. Второй операнд инструкции BOUND - это двойное слово, содержащее диапазон. Это двойное слово содержит 16-битовую нижнюю границу в младшем слове и 16-битовую верхнюю границу со знаком в качестве старшего слова.

Инструкции ins и outs

Инструкции INS и OUTS обеспечивают эффективную передачу данных между портами ввода-вывода и памятью.

Инструкция INS перемещает один или более байтов (или слов) из порта ввода-вывода, на который указывает регистр DX, в массив в памяти, на который указывают ES:DI, увеличивая DI на 1 (или на 2) после того, как каждый байт (или слово) будет передан (или уменьшая SI, если установлен флаг направления).

Инструкция OUTS перемещает один или более байтов (или слов) из массива в памяти, на который указывают DS:SI, в порт ввода-вывода, на который указывает регистр DX, увеличивая SI на 1 (или 2) после пересылки каждого байта (или слова) либо уменьшая регистр SI, если установлен флаг направления.

Соседние файлы в папке КС-ZAO