logo

Главная Система команд x86 Базовая система команд CPU BTC

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

BTC

Проверка и инверсия бита

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

?

     

?

?

?

?

*

 

Код

Команда

Описание

Проц.

Пример

0F BB

BTC r/m16,r16

Выбрать по r16 бит из r/m16 в CF инвертировать этот бит

Intel386

btc [di],ax

0F BB

BTC r/m32,r32

Выбрать по r32 бит из r/m32 в CF инвертировать этот бит

Intel386

btc [edi],eax

0F BA /7 ib

BTC r/m16,imm8

Выбрать по imm8 бит из r/m16 в CF инвертировать этот бит

Intel386

btc [bx],05

0F BA /7 ib

BTC r/m32,imm8

Выбрать по imm8 бит из r/m32 в CF инвертировать этот бит

Intel386

btc [ebx],02

Описание:

Команда BTC сохраняет значение бита из первого операнда со смещением, указанным вторым операндом, во флаге CF, а затем инвертирует этот бит.

Значение индекса выбираемого бита может быть представлено непосредственным значением в команде BTC или значением в общем регистре. В этой команде используется только 8-битное непосредственное значение. Значение этого операнда берется по модулю 32, таким образом смещение битов находится в диапазоне от 0 до 31. Это позволяет выбирать любой бит внутри регистра. Для битовых строк в памяти это поле непосредственного значения дает только смещение внутри слова или двойного слова.

Некоторые ассемблеры поддерживают значения битовых смещений больше 31, используя поле непосредственного значения imm8 в комбинации с полем смещения операнда в памяти disp. В этом случае ассемблером младшие 3 или 5 битов (3 для 16-битных операндов, 5 для 32-битных операндов) смещения бита (второй операнд команды) сохраняются в поле непосредственного операнда, а старшие биты сдвигаются и комбинируются с полем смещения. Процессор же игнорирует ненулевые значения старших битов поля imm8.

При доступе к памяти процессор обращается к четырем байтам, начинающимся по полученному следующим образом адресу:

Effective Address + (4 * (BitOffset DIV 32))

для размера операнда 32 бита, или к двум байтам, начинающимся по адресу:

Effective Address + (2 * (BitOffset DIV 16))

для 16-битного размера операнда. Такое обращение происходит, даже если необходим доступ только к одиночному байту. Поэтому, избегайте ссылок к областям памяти, близким к пустым адресным пространствам. В частности, избегайте ссылок на распределенные в памяти регистры ввода-вывода. Вместо этого используйте команду MOV для загрузки и сохранения значений по таким адресам и регистровую форму команды BTC для работы с данными.

Операция:

CF = BIT[LeftSRC, RightSRC];

BIT[LeftSRC, RightSRC] = NOT BIT[LeftSRC, RightSRC];

Особые ситуации защищенного режима:

#GP(0), если результат находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники