Процессор сообщает о контрольной точке команды до выполнения самой этой команды (т.е., отладочное исключение, вызванное контрольной точкой команды, относится к сбоям).
Флаг RF позволяет обработчику отладочного исключения выполнять рестарт команд, вызвавших сбой, за исключением отладочных сбоев. В случае любого такого сбоя автор системного программного обеспечения должен установить бит RF в копии регистра EFLAGS, помещаемого в стек в подпрограмме-обработчике отладочного исключения. Этот бит подготавливает возможность возобновления выполнения программы с адреса контрольной точки без генерации на этой же команде повторного сбоя. (Примечание: бит RF не вызывает игнорирование ловушек контрольных точек или других видов сбоев).
Таблица 11-2. Условия отладочного исключения -----------------------------------------------------------------Тестируемые флаги Описание-----------------------------------------------------------------BS = 1 Ловушка пошагового выполненияB0 = 1 и (GE0 = 1 или LE0 = 1) Контрольная точка, определенная для DR0, LEN0 и R/W0B1 = 1 и (GE1 = 1 или LE1 = 1) Контрольная точка, определенная для DR1, LEN1 и R/W1B2 = 1 и (GE2 = 1 или LE2 = 1) Контрольная точка, определенная для DR2, LEN2 и R/W2B3 = 1 и (GE3 = 1 или LE3 = 1) Контрольная точка, определенная для DR3, LEN3 и R/W3BD = 1 Отладочные регистры, используемые для встроенной эмуляцииBT = 1 Переключение задачи-----------------------------------------------------------------
Процессор очищает флаг RF при успешном завершении каждой команды, за исключением завершения команды IRET, команды POPF и команд JMP, CALL или INT, вызывающих переключение задачи. Эти команды переключают флаг RF в значение, заданное сохраненной копией регистра EFLAGS.
Процессор устанавливает флаг RF в копии регистра EFLAGS, помещенной в стек перед входом в любой обработчик сбоя. Когда вход в обработчик сбоя выполняется для контрольных точек команд, например, флаг RF устанавливается в копии регистра EFLAGS, помещаемой в стек; следовательно, команда IRET, возвращающая управление из обработчика исключения, будет восстанавливать флаг RF в регистре EFLAGS, и выполнение возобновится в прерванной контрольной точкой команде без генерации для той же самой команды другой контрольной точки.
Если после отладочного сбоя флаг RF установлен, и отладочный обработчик пытается повторить выполнение сбойной команды, возможно, что эта попытка приведет к другим сбоям. Рестарт команды после таких сбоев также происходит при установленном флаге RF, поэтому продолжается подавление повторных отладочных сбоев. Процессор очищает флаг RF только после успешного завершения команды.