На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 2 / Управление размером доступных данных Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Управление размером доступных данных

Программист в дальнейшем может управлять размером окна данных путем установки 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 для выполнения любых своих действий.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz