FE23  LOOCH  DISASM

СПРАВОЧНИК  ПО  КОМАНДАМ
ПРОЦЕССОРОВ  x86

(empty)
Главная Загрузка Инструкция Команды x86 Карта сайта

 

КОМАНДЫ ДЛЯ РАБОТЫ С БИТАМИ


Группа "Работа с битами" содержит следующие команды:

 Команда Выполняемая операция
  BSF  Сканирование бита вперед
 Bit Scan Forward
  BSR  Сканирование бита назад
 Bit Scan Reverse
  BT  Проверка бита
 Bit Test
  BTS  Проверка бита и установка в единицу
 Bit Test and Set
  BTR  Проверка бита и сброс в нуль
 Bit Test and Reset
  BTC  Проверка бита и дополнение
 Bit Test and Complement

Можно считать, что здесь есть только две существенно разные команды, команда BSF/BSR и команда BT/BTS/BTR/BTC. Но эти две команды имеют разные модификации.

 Команда Операнды  Код Формат
  BSF  (reg16), (r/m16) 
 (reg32), (r/m32) 
  0F  BC    --------  MRM 
  BSR  (reg16), (r/m16) 
 (reg32), (r/m32) 
  0F  BD    --------  MRM 
  BT  (r/m16), (reg16) 
 (r/m32), (reg32) 
  0F  A3    --------  MRM 
  BT  (r/m16), (imm8) 
 (r/m32), (imm8) 
  0F  BA  /100    --------  NNN  data(1) 
  BTS  (r/m16), (reg16) 
 (r/m32), (reg32) 
  0F  AB    --------  MRM 
  BTS  (r/m16), (imm8) 
 (r/m32), (imm8) 
  0F  BA  /101    --------  NNN  data(1) 
  BTR  (r/m16), (reg16) 
 (r/m32), (reg32) 
  0F  B3    --------  MRM 
  BTR  (r/m16), (imm8) 
 (r/m32), (imm8) 
  0F  BA  /110    --------  NNN  data(1) 
  BTC  (r/m16), (reg16) 
 (r/m32), (reg32) 
  0F  BB    --------  MRM 
  BTC  (r/m16), (imm8) 
 (r/m32), (imm8) 
  0F  BA  /111    --------  NNN  data(1) 

В колонке "Операнд" показаны операнды для команды на языке ассемблера. Но эти обозначения показывают также, что является операндом и для машинной команды. Размер операнда 16 бит или 32 бита определяется атрибутом размера операнда.

Обозначения (reg16), (reg32) - это регистр, который задается в поле (reg) байта (mod,reg,r/m).

Обозначения (r/m16), (r/m32) - это регистр или адрес памяти, задаваемые в поле (r/m) байта (mod,reg,r/m).

Обозначение (imm8) - это численный параметр, непосредственный операнд размером в один байт, вставленный в машинную команду. В колонке "Формат" ему соответствует обозначение data(1).

Команда BSF/BSR

Команда BSF/BSR сканируют биты в слове (или в двойном слове) и отыскивает первый встреченный бит, равный 1. При этом команда BSF сканирует в прямом (forward) направлении, начиная с младшего (нулевого) разряда, а команда BSR сканирует в обратном (reverse) направлении, начиная со старшего разряда.

Проверяемое слово (или двойное слово) задается вторым операндом, это операнд - источник (source). Здесь может быть регистр или память.

Результатом является номер найденного бита. Первый операнд задает, куда заносить результат, это операнд - приемник (destination). Здесь может быть только регистр.

Если бит с единичкой найден, устанавливается флажок ( ZF = 1 ), если не найден, то ( ZF = 0 ).

На другие флажки эта команда не воздействует, другие флажки не изменяются.

Команда BT/BTS/BTR/BTC

Команда BT/BTS/BTR/BTC берет бит с заданным номером из слова (или из двойного слова) и заносит его во флажок переноса CF (carry flag). Команда BT больше ничего не делает. Команда BTS этот бит в исходном слове устанавливает в 1, команда BTR установливает в 0, команда BTC инвертирует этот бит (0 ставит в 1, 1 ставит в 0).

Исходное слово (или двойное слово), откуда берется проверяемый бит, задается первым операндом. Этот операнд считается приемником (destination). Здесь может быть регистр или память.

Номер разряда для проверяемого бита задается во втором операнде. Этот операнд считается источником (source). Здесь может быть либо регистр, либо просто числовое значение. (Эти два разных способа задания второго операнда поддерживаются совершенно разными машинными командами).

Бит, помещенный во флажок CF, далее можно тестировать, используя команду JC или JNC.

Команда воздействует только на флажок CF, другие флажки не изменяются.

О кодах операций для команды BT/BTS/BTR/BTC

Два варианта кодов операций в двоичном виде можно представить так:

  BT     100     00001111     10-100-011     mod,reg,r/m  
  00001111     10111010     mod,100,r/m  
  BTS     101     00001111     10-101-011     mod,reg,r/m  
  00001111     10111010     mod,101,r/m  
  BTR     110     00001111     10-110-011     mod,reg,r/m  
  00001111     10111010     mod,110,r/m  
  BTC     111     00001111     10-111-011     mod,reg,r/m  
  00001111     10111010     mod,111,r/m  

Здесь показаны первый и второй байты кода операции и следующий за ними байт (mod,reg,r/m).




Основные страницы справочника

Справочник по командам процессоров x86
 
Все команды по алфавиту (кратко)
Все команды по алфавиту (подробно)
Первый байт кода операций
Второй байт кода операций
 


Главная Загрузка Инструкция Команды x86 Карта сайта


 
Copyright (C) FE23 Looch Disasm, 2011
File          - refe26.htm
File created  - 06 Jun 2011
Last modified - 22 Jun 2011
Hosted by uCoz