B
386+ BOUND Проверка индекса массива на выход за границы массива
Команда bound проверяет, лежит ли указанный индекс, рассматриваемый, как число со знаком, внутри заданных вторым операндом границ. Если индекс выходит за границы массива снизу или сверху, генерируется прерывание с вектором 5. Первый операнд должен быть регистром, содержащим проверяемый индекс, второй – адресом поля памяти с двумя границами проверяемого массива. В команде bound допустимо использование как 16-битовых, так и 32-битовых операндов (но и первый, и второй операнды должны быть одного типа).
386+ BSF Прямое сканирование битов
Команда bsf сканирует слово или двойное слово в поисках бита, равного 1. Сканирование выполняется от младшего бита (0) к старшему. Если в слове не найдено установленных битов, то устанавливается флаг ZF. Если установленные биты есть, то номер первого установленного бита заносится в указанный в команде регистр. Номером бита считается его позиция в слове, отсчитываемая от бита 0.
В качестве первого операнда команды bsf следует указывать регистр, куда будет помещен результат сканирования, в качестве второго – регистр или ячейку памяти со сканируемым словом. В команде bsf допустимо использование как 16-битовых, так и 32-битовых операндов (но и первый, и второй операнды должны быть одного типа).
Пример 1:
mov BX,70h; Анализируемое данное bsf АХ,ВХ; АХ=4, ZF=0
Пример 2:
mov SI,0; Анализируемое данное bsf BX,SI; ZF=1, в ВХ прежнее значение
Пример 3:
mov SI,8; Анализируемое данное bsf BX,SI; BX=3, ZF=1
Пример 4:
;В полях данных mem dw 9000h; Анализируемое данное ;В программном сегменте: bsf AX, mem; AX=000Ch=12, ZF=0
386+ BSR Обратное сканирование битов
Команда bsf сканирует слою или двойное слово в поисках бита, равного 1. Сканирование выполняется от старшего бита (15 или 31) к младшему. Если в слове не найдено установленных битов, то устанавливается флаг ZF. Если установленные биты есть, то номер первого установленного бита заносится в указанный в команде регистр. Номером бита считается его позиция в слове, отсчитываемая от бита 0.
В качестве первого операнда команды bsf следует указывать регистр, куда будет помещен результат сканирования, в качестве второго – регистр или ячейку памяти со сканируемым словом. В команде bsf допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд – константа).
Пример 1:
mov BX,70h; Анализируемое данное bsr AX,BX; AX=6, ZF=0
Пример 2:
mov SI,0; Анализируемое данное bsr BX,SI; ZF=1, в ВХ прежнее значение
Пример 3:
mov SI,8; Анализируемое данное bsf BX,SI; BX=3, ZF=1
Пример 4:
; В полях данных mem dw 9000h; Анализируемое данное ;В программном сегменте: bsr AX, mem; AX=000Fh=15, ZF=0