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

 

486+ BSWAP Обмен байтов


Команда bswap изменяет порядок байтов в своем единственном операнде, в качестве которого может выступать только 32-разрядный регистр общего назначения. Биты 7...0 обмениваются с битами 31...24, а биты 15... 18 с битами 23...16. Другими словами, нумерация байтов регистра изменяется на противополжную (вместо 3, 2, 1,0 - 0, 1, 2, 3). Команда не воздействует на флаги процессора.

Пример


mov ЕАХ, 01234567h

bswapEAX ;EAX=67452301h

 

386+ ВТ Проверка бита


Команда bt позволяет определить, установлен ли в заданном слове определенный бит. Анализируемое слово выступает в качестве первого операнда, номер бита - в качестве второго. Первым операндом команды bt может служить регистр или ячейка памяти, вторым - регистр или непосредственное значение. В команде допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа).
Значение проверяемого бита копируется в флаг CF.

Пример 1


mov AX,00FFh ;Анализируемое данное

bt AX,5 ; бит 5=1, ZF=1

Пример 2


mov AX,00FFh ;Анализируемое данное

bt AX,8 ;бит 8=0, ZF=0

Пример 3


mov AX,8001h ;Анализируемое данное

mov BX,15 ;Номер проверяемого бита

bt АХ,ВХ ;бит 15 = 1, ZF=1

Пример 4


;В полях данных

mem dw IFh ;Анализируемое данное

;В программном сегменте:

bt mem, 4 ;бит 4 = 1, ZF=1

 

386+ ВТС Проверка и инверсия бита


Команда btc проверяет определенный бит в слове, заданном первым операндом, копирует его значение в флаг CF и инвертирует. Номер бита выступает в качестве второго операнда. Первым операндом команды btc может служить регистр или ячейка памяти, вторым - регистр или непосредственное значение. В команде допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа).

Пример 1


mov AX,00FFh ;Анализируемое данное

btc АХ, 5 ;AX=00DFh Бит 5 был = 1

;Сброс бита 5, ZF=1

Пример 2


mov AX,OOFFh /Анализируемое данное

btc АХ, 8 ;AX=lFFh Бит 8 был = О

;Установка бита 8, ZF=0

Пример 3


mov AX,8001h ;Анализируемое данное

mov BX,15 ;Номер проверяемого бита

btc AX,BX ;AX=0001h, ZF=1

Пример 4


; В полях данных

mem dw IFh

;В программном сегменте: ; Анализируемое данное

btc mem, I /mem=lEh, ZF=1