|
|
|
|
Управление размером доступных данных
Программист в дальнейшем может управлять размером окна данных путем установки bounds-checking (проверка границ) в массиве, к которому осуществляется
доступ. Одна из наиболее типичных ошибок в данных происходит тогда, когда доступ к массиву выполняется через его границы. Все, что происходит на границе
массива, теряется. Проверка границы массива может быть выполнена с помощью простого макроса, как показано в листинге 2-14. Для программистов, работающих
с процессором 80x86, для выполнения этой проверки предусмотрена инструкция BOUND (граница). Для обеспечения совместимости с инструкцией BOUND был написан
макрос bound, показанный в листинге 2-14.
Листинг 2-14. Макрос проверки границ массива
-----------------------------------------------------------------
; Сравнение границ массива, содержащихся в общем регистре REG,
; с двумя последовательными значениями, размещенными в памяти
; по адресу MEM32. Это есть сравнение целых со знаком.
bound MACRO reg,mem32
LOCAL out_bound,in_bound
pushf ; сохранение флажков
cmp reg,word ptr mem32 ; проверка нижнего предела
jl out_bound ; превышение индекса
cmp reg,word ptr mem32 + 2 ; проверка верхн. предела
jle in_bound ; индекс хороший
out_bound:
popf ; очистка стека
INT 5 ; принимаемое действие
in_bound:
popf ; восстановление флажков
ENDM
-----------------------------------------------------------------
|
Макрос bound сравнивает содержимое общего регистра, содержащего индекс массива, с двумя последовательными ячейками памяти. Первая ячейка памяти
содержит нижний предел индекса, а вторая ячейка - верхний предел индекса. Инструкция BOUND выполняет прерывание 5-го типа (int5), если проверяемый
индекс выходит за пределы границы. Пользователи этой версии макроса могут модифицировать макрос bound для выполнения любых своих действий.
|
|