Справочник по языку Ассемблера IBM PC

BOUND


(check array BOUNDs)

Контроль нахождения индекса массива в границах

Схема команды:  bound индекс,границы массива 

Назначение: проверка нахождения значения индекса в границах массива.


Алгоритм работы:


Cравнить значение в регистре индекс с двумя значениями, расположенными последовательно в ячейке памяти, адресуемой операндом границы массива. Диапазон значений индекса определяется используемым регистром индекс:

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

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



Если в результате проверки значение из регистра вышло за пределы указанного диапазона значений, то возбуждается прерывание с номером 5, если нет, программа продолжает выполнение.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:


Команду bound очень удобно использовать для контроля выхода за нижнюю или верхнюю границы массива. Значения этих границ должны быть предварительно помещены в два последовательных слова (двойных слова) в памяти. Адрес этих слов (двойных слов) указывается вторым операндом. Далее динамически в ходе работы программы значение в регистре индекс, указываемом первым операндом, сравнивается со значениями этих двух границ, и если нижняя_граница<=(индексindex)<=верхняя_граница, то программа продолжает выполнение. В противном случае генерируется исключительная ситуация 5 (int 5). Далее в программе обработки этой ситуации можно выполнить необходимую корректировку и вернуться в программу (см. урок 17).


Фрагмент, который можно использовать при обработке одномерного массива с размерностью элементов в слово:

.286    ;это обязательная директива, так как bound         ;входит в систему команд микропроцессоров, начиная с i286 .data BoundMas        label   word Low_Bound       dw      0 Upp_Bound       dw      20 mas     dw      10 dup (?) ...         xor     di,di   ;очистка индексного регистра cycl:         mov     ax,mas[di]      ;перебор элементов массива         add     di,2         bound   di,BoundMas ;если значение в di не будет попадать в границы, то будет вызван ;обработчик прерывания 5, где можно скорректировать ;значение ip/eip в стеке с тем, чтобы выйти ;из бесконечного ;цикла, например, на метку М2 или ;выполнить другие действия         jmp     cycl М2: ...         

См. также: урок 17 и команду


Содержание раздела